Skip to content

Commit

Permalink
configure keys and description interface
Browse files Browse the repository at this point in the history
  • Loading branch information
gunlee01 committed Jan 30, 2021
1 parent a9fecb8 commit db713a0
Show file tree
Hide file tree
Showing 3 changed files with 226 additions and 90 deletions.
245 changes: 170 additions & 75 deletions scouterx/conf/configure.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package conf

import (
"github.com/emirpasic/gods/maps/linkedhashmap"
"github.com/magiconair/properties"
"github.com/scouter-contrib/scouter-agent-golang/scouterx/common/logger"
"github.com/scouter-contrib/scouter-agent-golang/scouterx/common/util"
"os"
"path/filepath"
"strconv"
"strings"
"sync"
"syscall"
Expand All @@ -14,6 +16,26 @@ import (

var once sync.Once
var configureOnce sync.Once
var descSync sync.RWMutex

type ValueType int

const vtValue = 1
const vtNum = 2
const vtBool = 3
const vtCommaSeparatedValue = 4
const vtCommaColonSeparatedValue = 5

//var descMap = make(map[string]ConfigureDesc)
var descMap = linkedhashmap.New()

type ConfigureDesc struct {
Key string
Value string
DefaultValue string
Desc string
ValueType ValueType
}

type Configure struct {
sync.Mutex
Expand Down Expand Up @@ -172,12 +194,12 @@ func (conf *Configure) resetObjNameAndType(props *properties.Properties) {
}

oldObjName := conf.ObjName
newObjSimpleName := props.GetString("obj_name", defaultName)
newObjSimpleName := stringOf(props,"obj_name", defaultName, "object name")
conf.ObjNameSimple = newObjSimpleName
conf.ObjName = "/" + hostname + "/" + newObjSimpleName
conf.ObjHash = util.HashString(conf.ObjName)

conf.ObjType = props.GetString("obj_type", "golang")
conf.ObjType = stringOf(props,"obj_type", "golang", "object type(monitoring group)")
if oldObjName != conf.ObjName {
objChangeNotify()
}
Expand Down Expand Up @@ -235,83 +257,156 @@ func (conf *Configure) Refresh() {
}
}

func GetConfigureDescMap() *linkedhashmap.Map {
descSync.RLock()
defer descSync.RUnlock()

copy := linkedhashmap.New()
it := descMap.Iterator()
for it.Next() {
copy.Put(it.Key(), it.Value())
}
return copy
}

func boolOf(props *properties.Properties, key string, defaultValue bool, desc string) bool {
descSync.Lock()
defer descSync.Unlock()

value := props.GetBool(key, defaultValue)
descMap.Put(key, ConfigureDesc{
Key: key,
Value: strconv.FormatBool(value),
DefaultValue: strconv.FormatBool(defaultValue),
Desc: desc,
ValueType: vtBool,
})
return value
}

func intOf(props *properties.Properties, key string, defaultValue int, desc string) int {
descSync.Lock()
defer descSync.Unlock()

value := props.GetInt(key, defaultValue)
descMap.Put(key, ConfigureDesc{
Key: key,
Value: strconv.Itoa(value),
DefaultValue: strconv.Itoa(defaultValue),
Desc: desc,
ValueType: vtNum,
})
return value
}

func stringOf(props *properties.Properties, key string, defaultValue string, desc string) string {
descSync.Lock()
defer descSync.Unlock()

value := props.GetString(key, defaultValue)
descMap.Put(key, ConfigureDesc{
Key: key,
Value: value,
DefaultValue: defaultValue,
Desc: desc,
ValueType: vtValue,
})
return value
}

func stringOfType(props *properties.Properties, key string, defaultValue string, valueType ValueType, desc string) string {
descSync.Lock()
defer descSync.Unlock()

value := props.GetString(key, defaultValue)
descMap.Put(key, ConfigureDesc{
Key: key,
Value: value,
DefaultValue: defaultValue,
Desc: desc,
ValueType: valueType,
})
return value
}

func (conf *Configure) addToConf(props *properties.Properties) {

conf.resetObjNameAndType(props)

conf._trace = props.GetBool("_trace", false)
conf.TraceObjSend = props.GetBool("trace_obj_send", false)

conf.SendQueueSize = props.GetInt("send_queue_size", 3000)

conf.NetCollectorIP = props.GetString("net_collector_ip", "127.0.0.1")
conf.NetCollectorUDPPort = props.GetInt("net_collector_udp_port", 6100)
conf.NetCollectorTCPPort = props.GetInt("net_collector_tcp_port", 6100)
conf.NetCollectorTcpSoTimeoutMs = props.GetInt("net_collector_tcp_so_timeout_ms", 60000)
conf.NetCollectorTcpConnectionTimeoutMs = props.GetInt("net_collector_tcp_connection_timeout_ms", 3000)
conf.UDPMaxBytes = props.GetInt("udp_max_bytes", 60000)

conf.StuckServiceBaseTimeMs = props.GetInt("stuck_service_base_time_ms", 300000)
conf.StuckServiceRemoveEnabled = props.GetBool("stuck_service_remove_enabled", true)

conf.TraceActiveserviceYellowTime = props.GetInt("trace_activeservice_yellow_time", 3000)
conf.TraceActiveserviceRedTime = props.GetInt("trace_activeservice_red_time", 8000)

conf.ProfileStepMaxKeepInMemoryCount = props.GetInt("profile_step_max_keep_in_memory_count", 2048)
conf.ProfileStepMaxCount = props.GetInt("profile_step_max_count", 1024)

conf.ProfileHttpQuerystringEnabled = props.GetBool("profile_http_querystring_enabled", false)
conf.ProfileHttpHeaderEnabled = props.GetBool("profile_http_header_enabled", false)
conf.ProfileHttpHeaderKeys = props.GetString("profile_http_header_keys", "")

conf.TraceHttpClientIpHeaderKey = props.GetString("trace_http_client_ip_header_key", "")

conf.XlogDiscardServicePatterns = props.GetString("xlog_discard_service_patterns", "")
conf.XlogDiscardServiceShowError = props.GetBool("xlog_discard_service_show_error", true)

conf.XlogSamplingExcludePatterns = props.GetString("xlog_sampling_exclude_patterns", "")

conf.XlogSamplingEnabled = props.GetBool("xlog_sampling_enabled", false)
conf.XlogSamplingOnlyProfile = props.GetBool("xlog_sampling_only_profile", false)
conf.XlogSamplingStep1Ms = int32(props.GetInt("xlog_sampling_step1_ms", 100))
conf.XlogSamplingStep1RatePct = props.GetInt("xlog_sampling_step1_rate_pct", 2)
conf.XlogSamplingStep2Ms = int32(props.GetInt("xlog_sampling_step2_ms", 500))
conf.XlogSamplingStep2RatePct = props.GetInt("xlog_sampling_step2_rate_pct", 7)
conf.XlogSamplingStep3Ms = int32(props.GetInt("xlog_sampling_step3_ms", 1000))
conf.XlogSamplingStep3RatePct = props.GetInt("xlog_sampling_step3_rate_pct", 15)
conf.XlogSamplingOverRatePct = props.GetInt("xlog_sampling_over_rate_pct", 3000)

conf.XlogPatternedSamplingEnabled = props.GetBool("xlog_patterned_sampling_enabled", false)
conf.XlogPatternedSamplingServicePatterns = props.GetString("xlog_patterned_sampling_service_patterns", "")
conf.XlogPatternedSamplingOnlyProfile = props.GetBool("xlog_patterned_sampling_only_profile", false)
conf.XlogPatternedSamplingStep1Ms = int32(props.GetInt("xlog_patterned_sampling_step1_ms", 100))
conf.XlogPatternedSamplingStep1RatePct = props.GetInt("xlog_patterned_sampling_step1_rate_pct", 2)
conf.XlogPatternedSamplingStep2Ms = int32(props.GetInt("xlog_patterned_sampling_step2_ms", 500))
conf.XlogPatternedSamplingStep2RatePct = props.GetInt("xlog_patterned_sampling_step2_rate_pct", 7)
conf.XlogPatternedSamplingStep3Ms = int32(props.GetInt("xlog_patterned_sampling_step3_ms", 1000))
conf.XlogPatternedSamplingStep3RatePct = props.GetInt("xlog_patterned_sampling_step3_rate_pct", 15)
conf.XlogPatternedSamplingOverRatePct = props.GetInt("xlog_patterned_sampling_over_rate_pct", 3000)

conf.XlogPatterned2SamplingEnabled = props.GetBool("xlog_patterned2_sampling_enabled", false)
conf.XlogPatterned2SamplingServicePatterns = props.GetString("xlog_patterned2_sampling_service_patterns", "")
conf.XlogPatterned2SamplingOnlyProfile = props.GetBool("xlog_patterned2_sampling_only_profile", false)
conf.XlogPatterned2SamplingStep1Ms = int32(props.GetInt("xlog_patterned2_sampling_step1_ms", 100))
conf.XlogPatterned2SamplingStep1RatePct = props.GetInt("xlog_patterned2_sampling_step1_rate_pct", 2)
conf.XlogPatterned2SamplingStep2Ms = int32(props.GetInt("xlog_patterned2_sampling_step2_ms", 500))
conf.XlogPatterned2SamplingStep2RatePct = props.GetInt("xlog_patterned2_sampling_step2_rate_pct", 7)
conf.XlogPatterned2SamplingStep3Ms = int32(props.GetInt("xlog_patterned2_sampling_step3_ms", 1000))
conf.XlogPatterned2SamplingStep3RatePct = props.GetInt("xlog_patterned2_sampling_step3_rate_pct", 15)
conf.XlogPatterned2SamplingOverRatePct = props.GetInt("xlog_patterned2_sampling_over_rate_pct", 3000)

conf.XlogPatterned3SamplingEnabled = props.GetBool("xlog_patterned3_sampling_enabled", false)
conf.XlogPatterned3SamplingServicePatterns = props.GetString("xlog_patterned3_sampling_service_patterns", "")
conf.XlogPatterned3SamplingOnlyProfile = props.GetBool("xlog_patterned3_sampling_only_profile", false)
conf.XlogPatterned3SamplingStep1Ms = int32(props.GetInt("xlog_patterned3_sampling_step1_ms", 100))
conf.XlogPatterned3SamplingStep1RatePct = props.GetInt("xlog_patterned3_sampling_step1_rate_pct", 2)
conf.XlogPatterned3SamplingStep2Ms = int32(props.GetInt("xlog_patterned3_sampling_step2_ms", 500))
conf.XlogPatterned3SamplingStep2RatePct = props.GetInt("xlog_patterned3_sampling_step2_rate_pct", 7)
conf.XlogPatterned3SamplingStep3Ms = int32(props.GetInt("xlog_patterned3_sampling_step3_ms", 1000))
conf.XlogPatterned3SamplingStep3RatePct = props.GetInt("xlog_patterned3_sampling_step3_rate_pct", 15)
conf.XlogPatterned3SamplingOverRatePct = props.GetInt("xlog_patterned3_sampling_over_rate_pct", 3000)

conf.TraceObjSend = boolOf(props, "trace_obj_send", false, "")
conf.SendQueueSize = intOf(props, "send_queue_size", 3000, "")

conf.NetCollectorIP = stringOf(props, "net_collector_ip", "127.0.0.1", "")
conf.NetCollectorUDPPort = intOf(props, "net_collector_udp_port", 6100, "")
conf.NetCollectorTCPPort = intOf(props, "net_collector_tcp_port", 6100, "")
conf.NetCollectorTcpSoTimeoutMs = intOf(props, "net_collector_tcp_so_timeout_ms", 60000, "")
conf.NetCollectorTcpConnectionTimeoutMs = intOf(props, "net_collector_tcp_connection_timeout_ms", 3000, "")
conf.UDPMaxBytes = intOf(props, "udp_max_bytes", 60000, "")

conf.StuckServiceBaseTimeMs = intOf(props, "stuck_service_base_time_ms", 300000, "")
conf.StuckServiceRemoveEnabled = boolOf(props, "stuck_service_remove_enabled", true, "")

conf.TraceActiveserviceYellowTime = intOf(props, "trace_activeservice_yellow_time", 3000, "")
conf.TraceActiveserviceRedTime = intOf(props, "trace_activeservice_red_time", 8000, "")

conf.ProfileStepMaxKeepInMemoryCount = intOf(props, "profile_step_max_keep_in_memory_count", 2048, "")
conf.ProfileStepMaxCount = intOf(props, "profile_step_max_count", 1024, "")

conf.ProfileHttpQuerystringEnabled = boolOf(props, "profile_http_querystring_enabled", false, "")
conf.ProfileHttpHeaderEnabled = boolOf(props, "profile_http_header_enabled", false, "")
conf.ProfileHttpHeaderKeys = stringOfType(props, "profile_http_header_keys", "", vtCommaSeparatedValue, "")

conf.TraceHttpClientIpHeaderKey = stringOf(props, "trace_http_client_ip_header_key", "", "")

conf.XlogDiscardServicePatterns = stringOfType(props, "xlog_discard_service_patterns", "", vtCommaSeparatedValue, "")
conf.XlogDiscardServiceShowError = boolOf(props, "xlog_discard_service_show_error", true, "")

conf.XlogSamplingExcludePatterns = stringOfType(props, "xlog_sampling_exclude_patterns", "", vtCommaSeparatedValue, "")

conf.XlogSamplingEnabled = boolOf(props, "xlog_sampling_enabled", false, "")
conf.XlogSamplingOnlyProfile = boolOf(props, "xlog_sampling_only_profile", false, "")
conf.XlogSamplingStep1Ms = int32(intOf(props, "xlog_sampling_step1_ms", 100, ""))
conf.XlogSamplingStep1RatePct = intOf(props, "xlog_sampling_step1_rate_pct", 2, "")
conf.XlogSamplingStep2Ms = int32(intOf(props, "xlog_sampling_step2_ms", 500, ""))
conf.XlogSamplingStep2RatePct = intOf(props, "xlog_sampling_step2_rate_pct", 7, "")
conf.XlogSamplingStep3Ms = int32(intOf(props, "xlog_sampling_step3_ms", 1000, ""))
conf.XlogSamplingStep3RatePct = intOf(props, "xlog_sampling_step3_rate_pct", 15, "")
conf.XlogSamplingOverRatePct = intOf(props, "xlog_sampling_over_rate_pct", 3000, "")

conf.XlogPatternedSamplingEnabled = boolOf(props, "xlog_patterned_sampling_enabled", false, "")
conf.XlogPatternedSamplingServicePatterns = stringOfType(props, "xlog_patterned_sampling_service_patterns", "", vtCommaSeparatedValue, "")
conf.XlogPatternedSamplingOnlyProfile = boolOf(props, "xlog_patterned_sampling_only_profile", false, "")
conf.XlogPatternedSamplingStep1Ms = int32(intOf(props, "xlog_patterned_sampling_step1_ms", 100, ""))
conf.XlogPatternedSamplingStep1RatePct = intOf(props, "xlog_patterned_sampling_step1_rate_pct", 2, "")
conf.XlogPatternedSamplingStep2Ms = int32(intOf(props, "xlog_patterned_sampling_step2_ms", 500, ""))
conf.XlogPatternedSamplingStep2RatePct = intOf(props, "xlog_patterned_sampling_step2_rate_pct", 7, "")
conf.XlogPatternedSamplingStep3Ms = int32(intOf(props, "xlog_patterned_sampling_step3_ms", 1000, ""))
conf.XlogPatternedSamplingStep3RatePct = intOf(props, "xlog_patterned_sampling_step3_rate_pct", 15, "")
conf.XlogPatternedSamplingOverRatePct = intOf(props, "xlog_patterned_sampling_over_rate_pct", 3000, "")

conf.XlogPatterned2SamplingEnabled = boolOf(props, "xlog_patterned2_sampling_enabled", false, "")
conf.XlogPatterned2SamplingServicePatterns = stringOfType(props, "xlog_patterned2_sampling_service_patterns", "", vtCommaSeparatedValue, "")
conf.XlogPatterned2SamplingOnlyProfile = boolOf(props, "xlog_patterned2_sampling_only_profile", false, "")
conf.XlogPatterned2SamplingStep1Ms = int32(intOf(props, "xlog_patterned2_sampling_step1_ms", 100, ""))
conf.XlogPatterned2SamplingStep1RatePct = intOf(props, "xlog_patterned2_sampling_step1_rate_pct", 2, "")
conf.XlogPatterned2SamplingStep2Ms = int32(intOf(props, "xlog_patterned2_sampling_step2_ms", 500, ""))
conf.XlogPatterned2SamplingStep2RatePct = intOf(props, "xlog_patterned2_sampling_step2_rate_pct", 7, "")
conf.XlogPatterned2SamplingStep3Ms = int32(intOf(props, "xlog_patterned2_sampling_step3_ms", 1000, ""))
conf.XlogPatterned2SamplingStep3RatePct = intOf(props, "xlog_patterned2_sampling_step3_rate_pct", 15, "")
conf.XlogPatterned2SamplingOverRatePct = intOf(props, "xlog_patterned2_sampling_over_rate_pct", 3000, "")

conf.XlogPatterned3SamplingEnabled = boolOf(props, "xlog_patterned3_sampling_enabled", false, "")
conf.XlogPatterned3SamplingServicePatterns = stringOfType(props, "xlog_patterned3_sampling_service_patterns", "", vtCommaSeparatedValue, "")
conf.XlogPatterned3SamplingOnlyProfile = boolOf(props, "xlog_patterned3_sampling_only_profile", false, "")
conf.XlogPatterned3SamplingStep1Ms = int32(intOf(props, "xlog_patterned3_sampling_step1_ms", 100, ""))
conf.XlogPatterned3SamplingStep1RatePct = intOf(props, "xlog_patterned3_sampling_step1_rate_pct", 2, "")
conf.XlogPatterned3SamplingStep2Ms = int32(intOf(props, "xlog_patterned3_sampling_step2_ms", 500, ""))
conf.XlogPatterned3SamplingStep2RatePct = intOf(props, "xlog_patterned3_sampling_step2_rate_pct", 7, "")
conf.XlogPatterned3SamplingStep3Ms = int32(intOf(props, "xlog_patterned3_sampling_step3_ms", 1000, ""))
conf.XlogPatterned3SamplingStep3RatePct = intOf(props, "xlog_patterned3_sampling_step3_rate_pct", 15, "")
conf.XlogPatterned3SamplingOverRatePct = intOf(props, "xlog_patterned3_sampling_over_rate_pct", 3000, "")
}


Expand Down
7 changes: 0 additions & 7 deletions scouterx/conf/exthandler.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,9 @@
package conf

import (
"github.com/scouter-contrib/scouter-agent-golang/scouterx/common/netdata"
"io/ioutil"
)

func LoadConfigKeys() *netdata.ListValue {
lv := new(netdata.ListValue)
//TODO
return lv
}

func LoadConfigText() string {
filePath := getConfFilePath()
bytes, err := ioutil.ReadFile(filePath)
Expand Down
64 changes: 56 additions & 8 deletions scouterx/netio/tcpclient/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,20 +122,17 @@ func handle(cmd string, pack netdata.Pack, in *netdata.DataInputX, out *netdata.
if ac.IsTrace() {
logger.Trace.Println("LIST_CONFIGURE_WAS")
}
//TODO
return netdata.NewMapPack()
return listConfig()
case CONFIGURE_VALUE_TYPE:
if ac.IsTrace() {
logger.Trace.Println("CONFIGURE_VALUE_TYPE")
}
//TODO
return netdata.NewMapPack()
return listConfigValueType()
case CONFIGURE_DESC:
if ac.IsTrace() {
logger.Trace.Println("CONFIGURE_DESC")
}
//TODO
return netdata.NewMapPack()
return listConfigDescription()
case OBJECT_ACTIVE_SERVICE_LIST:
if ac.IsTrace() {
logger.Trace.Println("OBJECT_ACTIVE_SERVICE_LIST")
Expand Down Expand Up @@ -283,11 +280,18 @@ func GetActiveList() *netdata.MapPack {

func loadConfig() *netdata.MapPack {
configText := conf.LoadConfigText()
configKeys := conf.LoadConfigKeys()

mp := netdata.NewMapPack()
mp.Put("configKey", configKeys)
mp.Put("agentConfig", configText)

descMap := conf.GetConfigureDescMap()
keyList := mp.NewList("configKey")
for it := descMap.Iterator(); it.Next(); {
switch desc := it.Value().(type) {
case conf.ConfigureDesc:
keyList.AddString(desc.Key)
}
}
return mp
}

Expand All @@ -311,3 +315,47 @@ func ResetCache(pack netdata.Pack) netdata.Pack {
return pack
}

func listConfig() *netdata.MapPack {
mp := netdata.NewMapPack()
keyList := mp.NewList("key")
valueList := mp.NewList("value")
defaultsList := mp.NewList("default")

descMap := conf.GetConfigureDescMap()

for it := descMap.Iterator(); it.Next(); {
switch desc := it.Value().(type) {
case conf.ConfigureDesc:
keyList.AddString(desc.Key)
valueList.AddString(desc.Value)
defaultsList.AddString(desc.DefaultValue)
}
}
return mp
}

func listConfigDescription() *netdata.MapPack {
mp := netdata.NewMapPack()

descMap := conf.GetConfigureDescMap()
for it := descMap.Iterator(); it.Next(); {
switch desc := it.Value().(type) {
case conf.ConfigureDesc:
mp.Put(desc.Key, desc.Desc)
}
}
return mp
}

func listConfigValueType() *netdata.MapPack {
mp := netdata.NewMapPack()

descMap := conf.GetConfigureDescMap()
for it := descMap.Iterator(); it.Next(); {
switch desc := it.Value().(type) {
case conf.ConfigureDesc:
mp.Put(desc.Key, int32(desc.ValueType))
}
}
return mp
}

0 comments on commit db713a0

Please sign in to comment.