From 463b5c39e15641b47cba5548e0924caf58bb00e4 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Mon, 23 Jul 2018 00:01:55 +0900 Subject: [PATCH 01/53] [WIP] scouter server's telegraf http output support of influx line protocol --- .gitignore | 1 + scouter.agent.java/conf/testcase-scouter.conf | 1 + .../main/java/scouter/agent/Configure.java | 158 +++++++++++++++ .../agent/TelegrafMasurementConfig.java | 120 ++++++++++++ .../java/scouter/agent/ConfigureTest.java | 71 +++++++ .../scouter/lang/counters/CounterEngine.java | 2 +- .../java/scouter/server/CounterManager.java | 103 +++++++++- .../http/handler/TelegrafInputHandler.java | 53 +++++ .../server/http/model/InfluxSingleLine.java | 183 ++++++++++++++++++ .../scouter/server/CounterManagerTest.java | 63 ++++++ .../http/model/InfluxSingleLineTest.java | 64 ++++++ 11 files changed, 817 insertions(+), 2 deletions(-) create mode 100644 scouter.agent.java/conf/testcase-scouter.conf create mode 100644 scouter.agent.java/src/main/java/scouter/agent/TelegrafMasurementConfig.java create mode 100644 scouter.agent.java/src/test/java/scouter/agent/ConfigureTest.java create mode 100644 scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java create mode 100644 scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java create mode 100644 scouter.server/src/test/java/scouter/server/CounterManagerTest.java create mode 100644 scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java diff --git a/.gitignore b/.gitignore index 8eabde53e..47d7a18ff 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ scouter.common/bin/* scouter.common/bin-test/* scouter.server/bin/* scouter.server/bin-test/* +scouter.server/conf/* scouter.deploy/out scouter.server.boot/testlib */.cache diff --git a/scouter.agent.java/conf/testcase-scouter.conf b/scouter.agent.java/conf/testcase-scouter.conf new file mode 100644 index 000000000..5f168d14d --- /dev/null +++ b/scouter.agent.java/conf/testcase-scouter.conf @@ -0,0 +1 @@ +objName=test-case-scouter diff --git a/scouter.agent.java/src/main/java/scouter/agent/Configure.java b/scouter.agent.java/src/main/java/scouter/agent/Configure.java index b1b04ac48..525b8aabb 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/Configure.java +++ b/scouter.agent.java/src/main/java/scouter/agent/Configure.java @@ -19,6 +19,7 @@ import scouter.Version; import scouter.agent.netio.data.DataProxy; import scouter.agent.util.JarUtil; +import scouter.lang.Counter; import scouter.lang.conf.ConfObserver; import scouter.lang.conf.ConfigDesc; import scouter.lang.conf.ConfigValueType; @@ -44,6 +45,7 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -657,6 +659,34 @@ public final static synchronized Configure getInstance() { @ConfigDesc("Path to jsp to collect enduser data") public String enduser_trace_endpoint_url = "/_scouter_browser.jsp"; + //telegraf sample config for help + @ConfigDesc("Telegraf http input enabled") + private boolean input_telegraf_enabled = true; + @ConfigDesc("print telegraf line protocol to STDOUT") + private boolean input_telegraf_debug_enabled = false; + @ConfigDesc("Telegraf http input of the $measurement$ enabled.\n$measurement$ is a variable to the measurement name of the line protocol.\n eg) input_telegraf_$redis_keyspace$_enabled=true") + private boolean input_telegraf_$measurement$_enabled = true; + @ConfigDesc("print telegraf line protocol of the $measurement$ to STDOUT") + private boolean input_telegraf_$measurement$_debug_enabled = false; + @ConfigDesc("which fields of $measurement$ are mapped to scouter's counter.\nformat: {line-protocol field name}:{scouter counter name}:{display name?}:{unit?}:{hasTotal?}\nIt can have multiple values.\neg)used_memory:tg-redis-used-memory,used_memory_rss:redis-used-memory-rss,redis used rss,bytes,true") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + private String input_telegraf_$measurement$_counter_mappings = ""; + @ConfigDesc("define an objectType prefix. objectType is defined with some tags.\nsee input_telegraf_$measurement$_objType_append_tags option.") + private String input_telegraf_$measurement$_objType_base = ""; + @ConfigDesc("this tags's value is appended to objType_base.\nIt can have multiple values. eg)tag1,tag2") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + private String input_telegraf_$measurement$_objType_append_tags = ""; + @ConfigDesc("define an objectName prefix. objectName is defined with some tags.\nsee input_telegraf_$measurement$_objName_append_tags option.") + private String input_telegraf_$measurement$_objName_base = ""; + @ConfigDesc("this tags's value is appended to objName_base.\nIt can have multiple values. eg)tag1,tag2") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + private String input_telegraf_$measurement$_objName_append_tags = ""; + @ConfigDesc("tag name to define host") + private String input_telegraf_$measurement$_host_tag = ""; + @ConfigDesc("which host value defined with $measurement$_host_tag option is mapped to scouter's host.\nIt can have multiple values. eg)hostValue1:scouterHost1,hostValue2:scouterHost2") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + private String input_telegraf_$measurement$_host_mappings = ""; + //Experimental(ignoreset) public boolean __experimental = false; public boolean __control_connection_leak_autoclose_enabled = false; @@ -680,6 +710,23 @@ public final static synchronized Configure getInstance() { private int enduser_perf_endpoint_hash = HashUtil.hash(enduser_trace_endpoint_url); private StringSet custom_jmx_set = new StringSet(); + //telegraf input internal variables + private static final String TELEGRAF_INPUT_MEASUREMENT_PREFIX = "input_telegraf_$"; + private static final int TELEGRAF_INPUT_MEASUREMENT_PREFIX_LENGTH = TELEGRAF_INPUT_MEASUREMENT_PREFIX.length(); + private static final String TELEGRAF_INPUT_MEASUREMENT_ENABLED_POSTFIX = "_enabled"; + private static final String TELEGRAF_INPUT_MEASUREMENT_DEBUG_ENABLED_POSTFIX = "_debug_enabled"; + + private static final String TELEGRAF_INPUT_MEASUREMENT_COUNTER_MAPPINGS_POSTFIX = "_counter_mappings"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_BASE_POSTFIX = "_objType_base"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_APPEND_TAGS_POSTFIX = "_objType_append_tags"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_BASE_POSTFIX = "_objName_base"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_APPEND_TAGS_POSTFIX = "_objName_append_tags"; + private static final String TELEGRAF_INPUT_MEASUREMENT_HOST_TAG_POSTFIX = "_host_tag"; + private static final String TELEGRAF_INPUT_MEASUREMENT_HOST_MAPPINGS_POSTFIX = "_host_mappings"; + + //telegraf config + public Map telegrafInputConfigMap = new HashMap(); + /** * sometimes call by sample application, at that time normally set some * properties directly @@ -750,6 +797,9 @@ public synchronized boolean reload(boolean force) { } private void apply() { + //Telegraf input config + applyTelegrafInputConfig(); + this.profile_http_querystring_enabled = getBoolean("profile_http_querystring_enabled", false); this.profile_http_header_enabled = getBoolean("profile_http_header_enabled", false); this.profile_http_parameter_enabled = getBoolean("profile_http_parameter_enabled", false); @@ -1070,6 +1120,114 @@ private void apply() { setStaticContents(); } + protected void applyTelegrafInputConfig() { + for (Map.Entry e : property.entrySet()) { + String key = (String) e.getKey(); + String value = (String) e.getValue(); + if(value == null) { + continue; + } + + //eg) input_telegraf_$redis_keyspace$_enabled + if (key.startsWith(TELEGRAF_INPUT_MEASUREMENT_PREFIX)) { //start with "input_telegraf_$" + String simplifiedKey = key.substring(TELEGRAF_INPUT_MEASUREMENT_PREFIX_LENGTH); //redis_keyspace$_enabled + int secondDollar = simplifiedKey.indexOf("$_"); + String measurement = simplifiedKey.substring(0, secondDollar); //redis_keyspace + String postfix = simplifiedKey.substring(secondDollar + 1); + + TelegrafMasurementConfig tConfig = telegrafInputConfigMap.get(measurement); + if (tConfig == null) { + tConfig = new TelegrafMasurementConfig(measurement); + telegrafInputConfigMap.put(measurement, tConfig); + } + + if (TELEGRAF_INPUT_MEASUREMENT_ENABLED_POSTFIX.equals(postfix)) { + try { + tConfig.setEnabled(Boolean.parseBoolean(value)); + } catch (Exception ignored) {} + + } else if (TELEGRAF_INPUT_MEASUREMENT_DEBUG_ENABLED_POSTFIX.equals(postfix)) { + try { + tConfig.setDebugEnabled(Boolean.parseBoolean(value)); + } catch (Exception ignored) {} + + } else if (TELEGRAF_INPUT_MEASUREMENT_COUNTER_MAPPINGS_POSTFIX.equals(postfix)) { + String[] counterMappings = StringUtil.split(value, ','); + if (counterMappings == null || counterMappings.length == 0) { + continue; + } + //format: {line-protocol field name}:{scouter counter name}:{display name?}:{unit?}:{hasTotal?} + Map counterMappingMap = new HashMap(); + for (String counterMapping : counterMappings) { + Counter counter = new Counter(); + String[] split = StringUtil.split(counterMapping, ':'); + if (split.length >= 2) { + counterMappingMap.put(split[0], counter); + counter.setName(split[1]); + } + if (split.length >= 3) { + counter.setDisplayName(split[2]); + } else { + counter.setDisplayName(split[1]); + } + if (split.length >= 4) { + counter.setUnit(split[3]); + } else { + counter.setUnit(""); + } + if (split.length >= 5) { + try { + counter.setTotal(Boolean.parseBoolean(split[4])); + } catch (Exception ignored) {} + } + } + + if (counterMappingMap.size() > 0) { + tConfig.setCounterMapping(counterMappingMap); + } + + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_BASE_POSTFIX.equals(postfix)) { + tConfig.setObjTypeBase(value); + + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_APPEND_TAGS_POSTFIX.equals(postfix)) { + String[] tags = StringUtil.split(value, ','); + if (tags == null || tags.length == 0) { + continue; + } + tConfig.setObjTypeAppendTags(Arrays.asList(tags)); + + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_BASE_POSTFIX.equals(postfix)) { + tConfig.setObjNameBase(value); + + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_APPEND_TAGS_POSTFIX.equals(postfix)) { + String[] tags = StringUtil.split(value, ','); + if (tags == null || tags.length == 0) { + continue; + } + tConfig.setObjNameAppendTags(Arrays.asList(tags)); + + } else if (TELEGRAF_INPUT_MEASUREMENT_HOST_TAG_POSTFIX.equals(postfix)) { + tConfig.setHostTag(value); + + } else if (TELEGRAF_INPUT_MEASUREMENT_HOST_MAPPINGS_POSTFIX.equals(postfix)) { + String[] hostMappings = StringUtil.split(value, ','); + if (hostMappings == null || hostMappings.length == 0) { + continue; + } + Map hostMappingMap = new HashMap(); + for (String hostAndMap : hostMappings) { + String[] split = StringUtil.split(hostAndMap, ':'); + if (split.length == 2) { + hostMappingMap.put(split[0], split[1]); + } + } + tConfig.setHostMapping(hostMappingMap); + + } + } + } + } + public String getObjExtType() { return this.objExtType; } diff --git a/scouter.agent.java/src/main/java/scouter/agent/TelegrafMasurementConfig.java b/scouter.agent.java/src/main/java/scouter/agent/TelegrafMasurementConfig.java new file mode 100644 index 000000000..413ba16b1 --- /dev/null +++ b/scouter.agent.java/src/main/java/scouter/agent/TelegrafMasurementConfig.java @@ -0,0 +1,120 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.agent; + +import scouter.lang.Counter; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. + */ +public class TelegrafMasurementConfig { + private String measurement; + + private boolean enabled = true; + private boolean debugEnabled = false; + + private Map counterMapping; + private String objTypeBase; + private List objTypeAppendTags = new ArrayList(); + private String objNameBase; + private List objNameAppendTags = new ArrayList(); + private String hostTag; + private Map hostMapping = new HashMap(); + + public TelegrafMasurementConfig(String measurement) { + this.measurement = measurement; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public boolean isDebugEnabled() { + return debugEnabled; + } + + public void setDebugEnabled(boolean debugEnabled) { + this.debugEnabled = debugEnabled; + } + + public Map getCounterMapping() { + return counterMapping; + } + + public void setCounterMapping(Map counterMapping) { + this.counterMapping = counterMapping; + } + + public String getObjTypeBase() { + return objTypeBase; + } + + public void setObjTypeBase(String objTypeBase) { + this.objTypeBase = objTypeBase; + } + + public List getObjTypeAppendTags() { + return objTypeAppendTags; + } + + public void setObjTypeAppendTags(List objTypeAppendTags) { + this.objTypeAppendTags = objTypeAppendTags; + } + + public String getObjNameBase() { + return objNameBase; + } + + public void setObjNameBase(String objNameBase) { + this.objNameBase = objNameBase; + } + + public List getObjNameAppendTags() { + return objNameAppendTags; + } + + public void setObjNameAppendTags(List objNameAppendTags) { + this.objNameAppendTags = objNameAppendTags; + } + + public String getHostTag() { + return hostTag; + } + + public void setHostTag(String hostTag) { + this.hostTag = hostTag; + } + + public Map getHostMapping() { + return hostMapping; + } + + public void setHostMapping(Map hostMapping) { + this.hostMapping = hostMapping; + } +} diff --git a/scouter.agent.java/src/test/java/scouter/agent/ConfigureTest.java b/scouter.agent.java/src/test/java/scouter/agent/ConfigureTest.java new file mode 100644 index 000000000..76618470a --- /dev/null +++ b/scouter.agent.java/src/test/java/scouter/agent/ConfigureTest.java @@ -0,0 +1,71 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.agent; + +import org.junit.Assert; +import org.junit.Test; +import scouter.lang.Counter; + +import java.util.Map; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. + */ +public class ConfigureTest { + + @Test + public void applyTelegrafInputConfig_test() { + System.setProperty("scouter.config", "./conf/testcase-scouter.conf"); + System.setProperty("input_telegraf_$xpu_space$_enabled", "true"); + System.setProperty("input_telegraf_$xpu_space$_debug_enabled", "true"); + System.setProperty("input_telegraf_$xpu_space$_counter_mappings", "xpu1:Sxpu1,xpu2:Sxpu2:S of xpu 2:%:false"); + System.setProperty("input_telegraf_$xpu_space$_objType_base", "TGTYPE01"); + System.setProperty("input_telegraf_$xpu_space$_objType_append_tags", "t1,t2"); + System.setProperty("input_telegraf_$xpu_space$_objName_base", "TGNAME01"); + System.setProperty("input_telegraf_$xpu_space$_objName_append_tags", "t3,t4"); + System.setProperty("input_telegraf_$xpu_space$_host_tag", "tg_host"); + System.setProperty("input_telegraf_$xpu_space$_host_mappings", "h1:Sh1,h2:Sh2"); + + Map configMap = Configure.getInstance().telegrafInputConfigMap; + TelegrafMasurementConfig tConfig = configMap.get("xpu_space"); + + Assert.assertEquals(tConfig.isEnabled(), true); + Assert.assertEquals(tConfig.isDebugEnabled(), true); + Assert.assertEquals(tConfig.getObjTypeBase(), System.getProperty("input_telegraf_$xpu_space$_objType_base")); + Assert.assertEquals(tConfig.getObjNameBase(), System.getProperty("input_telegraf_$xpu_space$_objName_base")); + Assert.assertEquals(tConfig.getHostTag(), System.getProperty("input_telegraf_$xpu_space$_host_tag")); + + Counter xpu1Counter = tConfig.getCounterMapping().get("xpu1"); + Assert.assertEquals(xpu1Counter.getName(), "Sxpu1"); + + Counter xpu2Counter = tConfig.getCounterMapping().get("xpu2"); + Assert.assertEquals(xpu2Counter.getName(), "Sxpu2"); + Assert.assertEquals(xpu2Counter.getDisplayName(), "S of xpu 2"); + Assert.assertEquals(xpu2Counter.getUnit(), "%"); + Assert.assertEquals(xpu2Counter.isTotal(), false); + + Assert.assertTrue(tConfig.getObjTypeAppendTags().contains("t1")); + Assert.assertTrue(tConfig.getObjTypeAppendTags().contains("t2")); + Assert.assertTrue(tConfig.getObjNameAppendTags().contains("t3")); + Assert.assertTrue(tConfig.getObjNameAppendTags().contains("t4")); + + Assert.assertEquals(tConfig.getHostMapping().get("h1"), "Sh1"); + Assert.assertEquals(tConfig.getHostMapping().get("h2"), "Sh2"); + } +} \ No newline at end of file diff --git a/scouter.common/src/main/java/scouter/lang/counters/CounterEngine.java b/scouter.common/src/main/java/scouter/lang/counters/CounterEngine.java index 45777b3dc..db6dd6726 100644 --- a/scouter.common/src/main/java/scouter/lang/counters/CounterEngine.java +++ b/scouter.common/src/main/java/scouter/lang/counters/CounterEngine.java @@ -49,7 +49,7 @@ public class CounterEngine { public static final String TAG_FAMILY = "Family"; public static final String TAG_COUNTER = "Counter"; public static final String TAG_OBJECT_TYPE = "ObjectType"; - + public static final String ATTR_NAME = "name"; public static final String ATTR_MASTER = "master"; public static final String ATTR_DISPLAY = "disp"; diff --git a/scouter.server/src/main/java/scouter/server/CounterManager.java b/scouter.server/src/main/java/scouter/server/CounterManager.java index ac63f84d8..fd2ee3805 100644 --- a/scouter.server/src/main/java/scouter/server/CounterManager.java +++ b/scouter.server/src/main/java/scouter/server/CounterManager.java @@ -96,7 +96,108 @@ public byte[] getXmlContent() { public byte[] getXmlCustomContent() { return xmlCustomContent; } - + + /** + * Memory cache of custom counter xml + */ + private Document unsafeDoc; + + /** + * Add family to custom counter xml (if exist replace it) + * @param family + * @return success or not + */ + public synchronized boolean safelyAddFamily(Family family) { + initUnsafeDoc(); + if (unsafeDoc == null) { + return false; + } + + Element newElement = unsafeDoc.createElement(CounterEngine.TAG_FAMILY); + newElement.setAttribute(CounterEngine.ATTR_NAME, family.getName()); + newElement.setAttribute(CounterEngine.ATTR_MASTER, family.getMaster()); + Element oldElement = findElementByTypeAndName(CounterEngine.TAG_FAMILY, family.getName()); + Element familiesElement = (Element) unsafeDoc.getElementsByTagName(CounterEngine.TAG_FAMILYS).item(0); + if (oldElement == null) { + familiesElement.appendChild(newElement); + } else { + familiesElement.replaceChild(newElement, oldElement); + } + saveCustomContent(); + return true; + } + + /** + * Add object type to custom counter xml (if exist replace it) + * @param objType + * @return success or not + */ + public synchronized boolean safelyAddObjectType(ObjectType objType) { + initUnsafeDoc(); + if (unsafeDoc == null) { + return false; + } + + Element newElement = unsafeDoc.createElement(CounterEngine.TAG_OBJECT_TYPE); + setObjectTypeAttribute(unsafeDoc, newElement, objType); + Element oldElement = findElementByTypeAndName(CounterEngine.TAG_OBJECT_TYPE, objType.getName()); + Element typesElements = (Element) unsafeDoc.getElementsByTagName(CounterEngine.TAG_TYPES).item(0); + if (oldElement == null) { + typesElements.appendChild(newElement); + } else { + typesElements.replaceChild(newElement, oldElement); + } + saveCustomContent(); + return true; + } + + private Element findElementByTypeAndName(String elementTagName, String nameAttrValue) { + NodeList list = unsafeDoc.getElementsByTagName(elementTagName); + if (list != null && list.getLength() > 0) { + for (int i = 0; i < list.getLength(); i++) { + Node node = list.item(i); + if (node.getNodeType() == Node.ELEMENT_NODE) { + Element element = (Element) node; + String name = element.getAttribute(CounterEngine.ATTR_NAME); + if (nameAttrValue.equals(name)) { + return element; + } + } + } + } + return null; + } + + private void saveCustomContent() { + XmlUtil.writeXmlFileWithIndent(unsafeDoc, customFile, 2); + xmlCustomContent = FileUtil.readAll(customFile); + reloadEngine(); + } + + private void initUnsafeDoc() { + if (unsafeDoc == null) { + unsafeDoc = getCustomDocument(); + if (unsafeDoc == null) { + return; + } + Element rootElement = (Element) unsafeDoc.getElementsByTagName(CounterEngine.TAG_COUNTERS).item(0); + Element familiesElement = (Element) unsafeDoc.getElementsByTagName(CounterEngine.TAG_FAMILYS).item(0); + Element typesElements = (Element) unsafeDoc.getElementsByTagName(CounterEngine.TAG_TYPES).item(0); + if (rootElement == null) { + rootElement = unsafeDoc.createElement(CounterEngine.TAG_COUNTERS); + unsafeDoc.appendChild(rootElement); + } + if (familiesElement == null) { + familiesElement = unsafeDoc.createElement(CounterEngine.TAG_FAMILYS); + rootElement.appendChild(familiesElement); + } + if (typesElements == null) { + typesElements = unsafeDoc.createElement(CounterEngine.TAG_TYPES); + rootElement.appendChild(typesElements); + } + } + } + public synchronized boolean addFamily(Family family) { Document doc = appendFamily(family, getCustomDocument()); if (doc != null) { diff --git a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java new file mode 100644 index 000000000..6cb6031db --- /dev/null +++ b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java @@ -0,0 +1,53 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.server.http.handler; + +import scouter.server.http.model.InfluxSingleLine; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. + */ +public class TelegrafInputHandler { + public void handlerRequest(HttpServletRequest request, HttpServletResponse response) throws IOException { + long receivedTime = System.currentTimeMillis(); + Map uniqueLineString = new HashMap(); + int lineCount = 0; + while (true) { + if (lineCount++ > 500) { + //TODO 응답 주고 끝내자. + } + + String lineString = request.getReader().readLine(); + if (lineString == null) { + break; + } + uniqueLineString.put(InfluxSingleLine.toLineStringKey(lineString), lineString); + } + + for (Map.Entry lineStringEntry : uniqueLineString.entrySet()) { + + } + } +} diff --git a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java new file mode 100644 index 000000000..fe7eb1872 --- /dev/null +++ b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java @@ -0,0 +1,183 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.server.http.model; + +import scouter.lang.value.DecimalValue; +import scouter.lang.value.FloatValue; +import scouter.server.Configure; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. + */ +public class InfluxSingleLine { + public static final String SPACE_RE = "|!!|space"; + public static final String BACKSLASH_RE = "|!!|backslash"; + public static final String EQUAL_RE = "|!!|equal"; + private Configure configure; + private String measuement; + + private String counterName; + private String objType; + private int objHash; + long receviedTime; + long timestamp; + + Map tags; + Map decimalFields; + Map floatFields; + + private InfluxSingleLine() {} + + /** + * line string key is measurement + tag values + */ + public static String toLineStringKey(String lineString) { + return lineString.substring(0, lineString.indexOf(' ')); + } + + public static InfluxSingleLine of(String lineStr) { + char[] chars = lineStr.toCharArray(); + char sink = '\0'; + int mode = 0; //0: measurement, 1: tags, 2: fields, 3: timestamp + + StringBuilder measurementSb = new StringBuilder(); + + StringBuilder tagKeySb = new StringBuilder(); + StringBuilder tagValueSb = new StringBuilder(); + boolean tagKeyMode = true; //if false then tag value mode + Map tags = new HashMap(); + + StringBuilder fieldKeySb = new StringBuilder(); + StringBuilder fieldValueSb = new StringBuilder(); + boolean fieldKeyMode = true; //if false then field value mode + Map fields = new HashMap(); + + StringBuilder timestampSb = new StringBuilder(); + + for (int pos = 0; pos < lineStr.length(); pos++) { + char c = chars[pos]; + if (mode == 0) { //measurement + if (sink == '\\') { + measurementSb.append(c); + sink = '\0'; + + } else { + switch (c) { + case '\\': + sink = '\\'; + break; + case ',': + mode++; + break; + default: + measurementSb.append(c); + break; + } + } + + } else if (mode == 1) { //tags + if (sink == '\\') { + if (tagKeyMode) { + tagKeySb.append(c); + } else { + tagValueSb.append(c); + } + sink = '\0'; + + } else { + switch (c) { + case '\\': + sink = '\\'; + break; + case ' ': + mode++; + if (tagKeySb.length() > 0) { + tags.put(tagKeySb.toString(), tagValueSb.toString()); + } + break; + case '=': + tagKeyMode = false; + break; + case ',': + tagKeyMode = true; + tags.put(tagKeySb.toString(), tagValueSb.toString()); + tagKeySb = new StringBuilder(); + tagValueSb = new StringBuilder(); + break; + default: + if (tagKeyMode) { + tagKeySb.append(c); + } else { + tagValueSb.append(c); + } + break; + } + } + + } else if (mode == 2) { //fields + if (sink == '\\') { + if (fieldKeyMode) { + fieldKeySb.append(c); + } else { + fieldValueSb.append(c); + } + sink = '\0'; + + } else { + switch (c) { + case '\\': + sink = '\\'; + break; + case ' ': + mode++; + if (fieldKeySb.length() > 0) { + fields.put(fieldKeySb.toString(), fieldValueSb.toString()); + } + break; + case '=': + tagKeyMode = false; + break; + case ',': + tagKeyMode = true; + fields.put(fieldKeySb.toString(), fieldValueSb.toString()); + fieldKeySb = new StringBuilder(); + fieldValueSb = new StringBuilder(); + break; + default: + if (tagKeyMode) { + fieldKeySb.append(c); + } else { + fieldValueSb.append(c); + } + break; + } + } + + } else if (mode == 3) { // timestamp + timestampSb.append(c); + } + } + + InfluxSingleLine line = new InfluxSingleLine(); + return null; + } +} diff --git a/scouter.server/src/test/java/scouter/server/CounterManagerTest.java b/scouter.server/src/test/java/scouter/server/CounterManagerTest.java new file mode 100644 index 000000000..60ebfff4a --- /dev/null +++ b/scouter.server/src/test/java/scouter/server/CounterManagerTest.java @@ -0,0 +1,63 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.server; + +import org.junit.Assert; +import org.junit.Test; +import scouter.lang.Family; +import scouter.lang.ObjectType; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 21. + */ +public class CounterManagerTest { + + @Test + public void getCounterManage_test() { + CounterManager counterManager = CounterManager.getInstance(); + Assert.assertNotNull(counterManager); + } + + @Test + public void safelyAddObjectType_test() { + CounterManager counterManager = CounterManager.getInstance(); + ObjectType objectType = new ObjectType(); + objectType.setName("test-counter-1"); + objectType.setDisplayName("test-counter-1"); + objectType.setFamily(counterManager.getCounterEngine().getFamily("host")); + objectType.setIcon(""); + + counterManager.safelyAddObjectType(objectType); + ObjectType generated = counterManager.getCounterEngine().getObjectType(objectType.getName()); + + Assert.assertEquals(objectType, generated); + } + + @Test + public void safelyAddFamily_test() { + CounterManager counterManager = CounterManager.getInstance(); + Family hostFamily = counterManager.getCounterEngine().getFamily("host"); + String newFamilyName = "host-custom-generated"; + hostFamily.setName(newFamilyName); + counterManager.safelyAddFamily(hostFamily); + + Family generated = counterManager.getCounterEngine().getFamily(newFamilyName); + Assert.assertEquals(hostFamily, generated); + } +} \ No newline at end of file diff --git a/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java b/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java new file mode 100644 index 000000000..2b4745b69 --- /dev/null +++ b/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java @@ -0,0 +1,64 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.server.http.model; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. + */ +public class InfluxSingleLineTest { + +// mem,host=GunMac.skbroadband used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i,slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i,active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521 1532269780000000000 +// cpu,cpu=cpu0,host=GunMac.skbroadband usage_user=23.923923923923923,usage_idle=64.46446446446447,usage_iowait=0,usage_irq=0,usage_softirq=0,usage_guest=0,usage_system=11.611611611611611,usage_nice=0,usage_steal=0,usage_guest_nice=0 1532269780000000000 +// cpu,cpu=cpu1,host=GunMac.skbroadband usage_nice=0,usage_irq=0,usage_user=12.574850299401197,usage_system=5.289421157684631,usage_idle=82.13572854291417,usage_guest=0,usage_guest_nice=0,usage_iowait=0,usage_softirq=0,usage_steal=0 1532269780000000000 +// cpu,cpu=cpu2,host=GunMac.skbroadband usage_system=9.3,usage_iowait=0,usage_softirq=0,usage_guest=0,usage_guest_nice=0,usage_user=24.4,usage_idle=66.3,usage_nice=0,usage_irq=0,usage_steal=0 1532269780000000000 +// cpu,cpu=cpu3,host=GunMac.skbroadband usage_guest_nice=0,usage_user=12.387612387612387,usage_idle=82.51748251748252,usage_iowait=0,usage_guest=0,usage_steal=0,usage_system=5.094905094905095,usage_nice=0,usage_irq=0,usage_softirq=0 1532269780000000000 +// cpu,cpu=cpu-total,host=GunMac.skbroadband usage_user=18.315842078960518,usage_iowait=0,usage_irq=0,usage_softirq=0,usage_guest=0,usage_system=7.8210894552723635,usage_idle=73.86306846576711,usage_nice=0,usage_steal=0,usage_guest_nice=0 1532269780000000000 + + @Test + public void of_test() { + InfluxSingleLine.of("mem,host=GunMac.skbroadband,region=seoul used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i,slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i,active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521 1532269780000000000"); + } + + @Test + public void perf_test() { + String metric = "mem,host=GunMac.skbroadband,region=seoul used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i,slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i,active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521 1532269780000000000"; + + long start = System.currentTimeMillis(); + for (int i = 0; i < 300000; i++) { + InfluxSingleLine.of(metric); + } + System.out.println("[of millis]" + (System.currentTimeMillis() - start)); + + start = System.currentTimeMillis(); + for (int i = 0; i < 300000; i++) { + InfluxSingleLine.of(metric); + } + System.out.println("[of millis]" + (System.currentTimeMillis() - start)); + + start = System.currentTimeMillis(); + for (int i = 0; i < 300000; i++) { + InfluxSingleLine.of(metric); + } + System.out.println("[of millis]" + (System.currentTimeMillis() - start)); + } +} \ No newline at end of file From 5ee5e68bf1594e3d26a62d361096e65fb6247ed0 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Mon, 23 Jul 2018 23:32:49 +0900 Subject: [PATCH 02/53] [WIP] scouter server's telegraf http output support of influx line protocol --- .../main/java/scouter/agent/Configure.java | 129 ----------------- .../main/java/scouter/server/Configure.java | 133 ++++++++++++++++++ .../server}/TelegrafMasurementConfig.java | 3 +- .../server/http/handler/RegisterHandler.java | 2 +- .../http/handler/TelegrafInputHandler.java | 129 ++++++++++++++++- .../server/http/model/InfluxSingleLine.java | 130 +++++++++++++++-- .../java/scouter/server}/ConfigureTest.java | 6 +- 7 files changed, 384 insertions(+), 148 deletions(-) rename {scouter.agent.java/src/main/java/scouter/agent => scouter.server/src/main/java/scouter/server}/TelegrafMasurementConfig.java (99%) rename {scouter.agent.java/src/test/java/scouter/agent => scouter.server/src/test/java/scouter/server}/ConfigureTest.java (96%) diff --git a/scouter.agent.java/src/main/java/scouter/agent/Configure.java b/scouter.agent.java/src/main/java/scouter/agent/Configure.java index 525b8aabb..014644b26 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/Configure.java +++ b/scouter.agent.java/src/main/java/scouter/agent/Configure.java @@ -19,7 +19,6 @@ import scouter.Version; import scouter.agent.netio.data.DataProxy; import scouter.agent.util.JarUtil; -import scouter.lang.Counter; import scouter.lang.conf.ConfObserver; import scouter.lang.conf.ConfigDesc; import scouter.lang.conf.ConfigValueType; @@ -45,7 +44,6 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -710,23 +708,6 @@ public final static synchronized Configure getInstance() { private int enduser_perf_endpoint_hash = HashUtil.hash(enduser_trace_endpoint_url); private StringSet custom_jmx_set = new StringSet(); - //telegraf input internal variables - private static final String TELEGRAF_INPUT_MEASUREMENT_PREFIX = "input_telegraf_$"; - private static final int TELEGRAF_INPUT_MEASUREMENT_PREFIX_LENGTH = TELEGRAF_INPUT_MEASUREMENT_PREFIX.length(); - private static final String TELEGRAF_INPUT_MEASUREMENT_ENABLED_POSTFIX = "_enabled"; - private static final String TELEGRAF_INPUT_MEASUREMENT_DEBUG_ENABLED_POSTFIX = "_debug_enabled"; - - private static final String TELEGRAF_INPUT_MEASUREMENT_COUNTER_MAPPINGS_POSTFIX = "_counter_mappings"; - private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_BASE_POSTFIX = "_objType_base"; - private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_APPEND_TAGS_POSTFIX = "_objType_append_tags"; - private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_BASE_POSTFIX = "_objName_base"; - private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_APPEND_TAGS_POSTFIX = "_objName_append_tags"; - private static final String TELEGRAF_INPUT_MEASUREMENT_HOST_TAG_POSTFIX = "_host_tag"; - private static final String TELEGRAF_INPUT_MEASUREMENT_HOST_MAPPINGS_POSTFIX = "_host_mappings"; - - //telegraf config - public Map telegrafInputConfigMap = new HashMap(); - /** * sometimes call by sample application, at that time normally set some * properties directly @@ -797,8 +778,6 @@ public synchronized boolean reload(boolean force) { } private void apply() { - //Telegraf input config - applyTelegrafInputConfig(); this.profile_http_querystring_enabled = getBoolean("profile_http_querystring_enabled", false); this.profile_http_header_enabled = getBoolean("profile_http_header_enabled", false); @@ -1120,114 +1099,6 @@ private void apply() { setStaticContents(); } - protected void applyTelegrafInputConfig() { - for (Map.Entry e : property.entrySet()) { - String key = (String) e.getKey(); - String value = (String) e.getValue(); - if(value == null) { - continue; - } - - //eg) input_telegraf_$redis_keyspace$_enabled - if (key.startsWith(TELEGRAF_INPUT_MEASUREMENT_PREFIX)) { //start with "input_telegraf_$" - String simplifiedKey = key.substring(TELEGRAF_INPUT_MEASUREMENT_PREFIX_LENGTH); //redis_keyspace$_enabled - int secondDollar = simplifiedKey.indexOf("$_"); - String measurement = simplifiedKey.substring(0, secondDollar); //redis_keyspace - String postfix = simplifiedKey.substring(secondDollar + 1); - - TelegrafMasurementConfig tConfig = telegrafInputConfigMap.get(measurement); - if (tConfig == null) { - tConfig = new TelegrafMasurementConfig(measurement); - telegrafInputConfigMap.put(measurement, tConfig); - } - - if (TELEGRAF_INPUT_MEASUREMENT_ENABLED_POSTFIX.equals(postfix)) { - try { - tConfig.setEnabled(Boolean.parseBoolean(value)); - } catch (Exception ignored) {} - - } else if (TELEGRAF_INPUT_MEASUREMENT_DEBUG_ENABLED_POSTFIX.equals(postfix)) { - try { - tConfig.setDebugEnabled(Boolean.parseBoolean(value)); - } catch (Exception ignored) {} - - } else if (TELEGRAF_INPUT_MEASUREMENT_COUNTER_MAPPINGS_POSTFIX.equals(postfix)) { - String[] counterMappings = StringUtil.split(value, ','); - if (counterMappings == null || counterMappings.length == 0) { - continue; - } - //format: {line-protocol field name}:{scouter counter name}:{display name?}:{unit?}:{hasTotal?} - Map counterMappingMap = new HashMap(); - for (String counterMapping : counterMappings) { - Counter counter = new Counter(); - String[] split = StringUtil.split(counterMapping, ':'); - if (split.length >= 2) { - counterMappingMap.put(split[0], counter); - counter.setName(split[1]); - } - if (split.length >= 3) { - counter.setDisplayName(split[2]); - } else { - counter.setDisplayName(split[1]); - } - if (split.length >= 4) { - counter.setUnit(split[3]); - } else { - counter.setUnit(""); - } - if (split.length >= 5) { - try { - counter.setTotal(Boolean.parseBoolean(split[4])); - } catch (Exception ignored) {} - } - } - - if (counterMappingMap.size() > 0) { - tConfig.setCounterMapping(counterMappingMap); - } - - } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_BASE_POSTFIX.equals(postfix)) { - tConfig.setObjTypeBase(value); - - } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_APPEND_TAGS_POSTFIX.equals(postfix)) { - String[] tags = StringUtil.split(value, ','); - if (tags == null || tags.length == 0) { - continue; - } - tConfig.setObjTypeAppendTags(Arrays.asList(tags)); - - } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_BASE_POSTFIX.equals(postfix)) { - tConfig.setObjNameBase(value); - - } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_APPEND_TAGS_POSTFIX.equals(postfix)) { - String[] tags = StringUtil.split(value, ','); - if (tags == null || tags.length == 0) { - continue; - } - tConfig.setObjNameAppendTags(Arrays.asList(tags)); - - } else if (TELEGRAF_INPUT_MEASUREMENT_HOST_TAG_POSTFIX.equals(postfix)) { - tConfig.setHostTag(value); - - } else if (TELEGRAF_INPUT_MEASUREMENT_HOST_MAPPINGS_POSTFIX.equals(postfix)) { - String[] hostMappings = StringUtil.split(value, ','); - if (hostMappings == null || hostMappings.length == 0) { - continue; - } - Map hostMappingMap = new HashMap(); - for (String hostAndMap : hostMappings) { - String[] split = StringUtil.split(hostAndMap, ':'); - if (split.length == 2) { - hostMappingMap.put(split[0], split[1]); - } - } - tConfig.setHostMapping(hostMappingMap); - - } - } - } - } - public String getObjExtType() { return this.objExtType; } diff --git a/scouter.server/src/main/java/scouter/server/Configure.java b/scouter.server/src/main/java/scouter/server/Configure.java index 62dc5e07d..e2f17868b 100644 --- a/scouter.server/src/main/java/scouter/server/Configure.java +++ b/scouter.server/src/main/java/scouter/server/Configure.java @@ -17,6 +17,7 @@ package scouter.server; +import scouter.lang.Counter; import scouter.lang.conf.ConfigDesc; import scouter.lang.conf.ConfigValueType; import scouter.lang.conf.ConfigValueUtil; @@ -40,7 +41,10 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; +import java.util.Arrays; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Properties; import java.util.StringTokenizer; @@ -49,6 +53,23 @@ public class Configure extends Thread { private static Configure instance = null; public final static String CONF_DIR = "./conf/"; + //telegraf input internal variables + private static final String TELEGRAF_INPUT_MEASUREMENT_PREFIX = "input_telegraf_$"; + private static final int TELEGRAF_INPUT_MEASUREMENT_PREFIX_LENGTH = TELEGRAF_INPUT_MEASUREMENT_PREFIX.length(); + private static final String TELEGRAF_INPUT_MEASUREMENT_ENABLED_POSTFIX = "_enabled"; + private static final String TELEGRAF_INPUT_MEASUREMENT_DEBUG_ENABLED_POSTFIX = "_debug_enabled"; + + private static final String TELEGRAF_INPUT_MEASUREMENT_COUNTER_MAPPINGS_POSTFIX = "_counter_mappings"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_BASE_POSTFIX = "_objType_base"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_APPEND_TAGS_POSTFIX = "_objType_append_tags"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_BASE_POSTFIX = "_objName_base"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_APPEND_TAGS_POSTFIX = "_objName_append_tags"; + private static final String TELEGRAF_INPUT_MEASUREMENT_HOST_TAG_POSTFIX = "_host_tag"; + private static final String TELEGRAF_INPUT_MEASUREMENT_HOST_MAPPINGS_POSTFIX = "_host_mappings"; + + //telegraf config + public Map telegrafInputConfigMap = new HashMap(); + public final static synchronized Configure getInstance() { if (instance == null) { instance = new Configure(); @@ -384,6 +405,7 @@ public synchronized boolean reload(boolean force) { property = ConfigValueUtil.replaceSysProp(temp); apply(); + applyTelegrafInputConfig(); return true; } @@ -526,6 +548,117 @@ private void apply() { ConfObserver.exec(); } + /** + * Configuration for telegraf input + */ + protected void applyTelegrafInputConfig() { + for (Map.Entry e : property.entrySet()) { + String key = (String) e.getKey(); + String value = (String) e.getValue(); + if(value == null) { + continue; + } + + //eg) input_telegraf_$redis_keyspace$_enabled + if (key.startsWith(TELEGRAF_INPUT_MEASUREMENT_PREFIX)) { //start with "input_telegraf_$" + String simplifiedKey = key.substring(TELEGRAF_INPUT_MEASUREMENT_PREFIX_LENGTH); //redis_keyspace$_enabled + int secondDollar = simplifiedKey.indexOf("$_"); + String measurement = simplifiedKey.substring(0, secondDollar); //redis_keyspace + String postfix = simplifiedKey.substring(secondDollar + 1); + + TelegrafMasurementConfig tConfig = telegrafInputConfigMap.get(measurement); + if (tConfig == null) { + tConfig = new TelegrafMasurementConfig(measurement); + telegrafInputConfigMap.put(measurement, tConfig); + } + + if (TELEGRAF_INPUT_MEASUREMENT_ENABLED_POSTFIX.equals(postfix)) { + try { + tConfig.setEnabled(Boolean.parseBoolean(value)); + } catch (Exception ignored) {} + + } else if (TELEGRAF_INPUT_MEASUREMENT_DEBUG_ENABLED_POSTFIX.equals(postfix)) { + try { + tConfig.setDebugEnabled(Boolean.parseBoolean(value)); + } catch (Exception ignored) {} + + } else if (TELEGRAF_INPUT_MEASUREMENT_COUNTER_MAPPINGS_POSTFIX.equals(postfix)) { + String[] counterMappings = StringUtil.split(value, ','); + if (counterMappings == null || counterMappings.length == 0) { + continue; + } + //format: {line-protocol field name}:{scouter counter name}:{display name?}:{unit?}:{hasTotal?} + Map counterMappingMap = new HashMap(); + for (String counterMapping : counterMappings) { + Counter counter = new Counter(); + String[] split = StringUtil.split(counterMapping, ':'); + if (split.length >= 2) { + counterMappingMap.put(split[0], counter); + counter.setName(split[1]); + } + if (split.length >= 3) { + counter.setDisplayName(split[2]); + } else { + counter.setDisplayName(split[1]); + } + if (split.length >= 4) { + counter.setUnit(split[3]); + } else { + counter.setUnit(""); + } + if (split.length >= 5) { + try { + counter.setTotal(Boolean.parseBoolean(split[4])); + } catch (Exception ignored) {} + } + } + + if (counterMappingMap.size() > 0) { + tConfig.setCounterMapping(counterMappingMap); + } + + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_BASE_POSTFIX.equals(postfix)) { + tConfig.setObjTypeBase(value); + + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_APPEND_TAGS_POSTFIX.equals(postfix)) { + String[] tags = StringUtil.split(value, ','); + if (tags == null || tags.length == 0) { + continue; + } + tConfig.setObjTypeAppendTags(Arrays.asList(tags)); + + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_BASE_POSTFIX.equals(postfix)) { + tConfig.setObjNameBase(value); + + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_APPEND_TAGS_POSTFIX.equals(postfix)) { + String[] tags = StringUtil.split(value, ','); + if (tags == null || tags.length == 0) { + continue; + } + tConfig.setObjNameAppendTags(Arrays.asList(tags)); + + } else if (TELEGRAF_INPUT_MEASUREMENT_HOST_TAG_POSTFIX.equals(postfix)) { + tConfig.setHostTag(value); + + } else if (TELEGRAF_INPUT_MEASUREMENT_HOST_MAPPINGS_POSTFIX.equals(postfix)) { + String[] hostMappings = StringUtil.split(value, ','); + if (hostMappings == null || hostMappings.length == 0) { + continue; + } + Map hostMappingMap = new HashMap(); + for (String hostAndMap : hostMappings) { + String[] split = StringUtil.split(hostAndMap, ':'); + if (split.length == 2) { + hostMappingMap.put(split[0], split[1]); + } + } + tConfig.setHostMapping(hostMappingMap); + + } + } + } + } + private StringSet getStringSet(String key, String deli) { StringSet set = new StringSet(); String v = getValue(key); diff --git a/scouter.agent.java/src/main/java/scouter/agent/TelegrafMasurementConfig.java b/scouter.server/src/main/java/scouter/server/TelegrafMasurementConfig.java similarity index 99% rename from scouter.agent.java/src/main/java/scouter/agent/TelegrafMasurementConfig.java rename to scouter.server/src/main/java/scouter/server/TelegrafMasurementConfig.java index 413ba16b1..e5250de9a 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/TelegrafMasurementConfig.java +++ b/scouter.server/src/main/java/scouter/server/TelegrafMasurementConfig.java @@ -16,7 +16,7 @@ * */ -package scouter.agent; +package scouter.server; import scouter.lang.Counter; @@ -117,4 +117,5 @@ public Map getHostMapping() { public void setHostMapping(Map hostMapping) { this.hostMapping = hostMapping; } + } diff --git a/scouter.server/src/main/java/scouter/server/http/handler/RegisterHandler.java b/scouter.server/src/main/java/scouter/server/http/handler/RegisterHandler.java index 672a9b225..4fc93c83a 100644 --- a/scouter.server/src/main/java/scouter/server/http/handler/RegisterHandler.java +++ b/scouter.server/src/main/java/scouter/server/http/handler/RegisterHandler.java @@ -174,7 +174,7 @@ public static boolean process(Reader in) { return false; } - private static void notifyAllClients() { + public static void notifyAllClients() { AsyncRun.getInstance().add(new Runnable() { public void run() { RemoteControl control = new RemoteControl("REFETCH_COUNTER_XML", System.currentTimeMillis(), new MapPack(), 0); diff --git a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java index 6cb6031db..3582c023f 100644 --- a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java +++ b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java @@ -18,7 +18,16 @@ package scouter.server.http.handler; +import scouter.lang.Counter; +import scouter.lang.Family; +import scouter.lang.ObjectType; +import scouter.lang.value.NumberValue; +import scouter.server.Configure; +import scouter.server.CounterManager; +import scouter.server.Logger; import scouter.server.http.model.InfluxSingleLine; +import scouter.util.RequestQueue; +import scouter.util.ThreadUtil; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -29,8 +38,41 @@ /** * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. */ -public class TelegrafInputHandler { +public class TelegrafInputHandler extends Thread { + private static TelegrafInputHandler instance = new TelegrafInputHandler(); + private static Configure configure = Configure.getInstance(); + private static CounterManager counterManager = CounterManager.getInstance(); + + private RequestQueue registerObjTypeQueue = new RequestQueue(1024); + private RequestQueue addCounterQueue = new RequestQueue(1024); + + private static class AddCounterParam { + ObjectType objectType; + Counter counter; + public AddCounterParam(ObjectType objectType, Counter counter) { + this.objectType = objectType; + this.counter = counter; + } + } + + private TelegrafInputHandler() { + this.setDaemon(true); + this.setName(ThreadUtil.getName(this)); + this.start(); + } + + public static TelegrafInputHandler getInstance() { + return instance; + } + + @Override + public void start() { + //TODO register job + } + public void handlerRequest(HttpServletRequest request, HttpServletResponse response) throws IOException { + + //TODO counter를 가지고 일정 수 이상이 누적되면 204 응답하자. 204일때 telegraf 에서 어떻게 처리하는지를 확인해 봐야한다. 재전송 안하는지... long receivedTime = System.currentTimeMillis(); Map uniqueLineString = new HashMap(); int lineCount = 0; @@ -47,7 +89,92 @@ public void handlerRequest(HttpServletRequest request, HttpServletResponse respo } for (Map.Entry lineStringEntry : uniqueLineString.entrySet()) { + InfluxSingleLine line = InfluxSingleLine.of(lineStringEntry.getValue(), configure, receivedTime); + if (line == null) { + continue; + } + } + } + public void count(InfluxSingleLine line) { + ObjectType objectType = counterManager.getCounterEngine().getObjectType(line.getObjType()); + if (objectType == null) { + registerNewObjType(line); + return; + } + + Map numberFields = line.getNumberFields(); + boolean dirty = false; + for (Counter counter : numberFields.keySet()) { + Counter counterInternal = objectType.getCounter(counter.getName()); + if (counterInternal == null) { + dirty = true; + addCounter(objectType, counter); + continue; + } + } + if (dirty) { + return; + } + //TODO counter action + } + + private void registerNewObjType(InfluxSingleLine line) { + registerObjTypeQueue.put(line); + } + + private void addCounter(ObjectType objectType, Counter counter) { + addCounterQueue.put(new AddCounterParam(objectType, counter)); + } + + private synchronized void registerNewObjType0(InfluxSingleLine line) { + ObjectType objectTypeDoubleCheck = counterManager.getCounterEngine().getObjectType(line.getObjType()); + if (objectTypeDoubleCheck != null) { + return; + } + + try { + String objTypeName = line.getObjType(); + ObjectType objectType = new ObjectType(); + objectType.setName(objTypeName); + objectType.setDisplayName(objTypeName); + objectType.setIcon(""); + + Family family = new Family(); + objectType.setFamily(family); + family.setName(objTypeName); + + Map numberFields = line.getNumberFields(); + boolean firstCounter = true; + for (Counter counter : numberFields.keySet()) { + family.addCounter(counter); + if (firstCounter) { + family.setMaster(counter.getName()); + } + firstCounter = false; + } + + boolean success0 = counterManager.safelyAddFamily(family); + boolean success1 = counterManager.safelyAddObjectType(objectType); + + if (success0 && success1) { + RegisterHandler.notifyAllClients(); + } + + } catch (Throwable th) { + Logger.println("HT-001", 30, "Error on register telegraf type", th); + } + } + + private synchronized void addCounter0(ObjectType objectType, Counter counter) { + Counter counterDoubleCheck = objectType.getCounter(counter.getName()); + if (counterDoubleCheck != null) { + return; + } + objectType.addCounter(counter); + boolean success = counterManager.safelyAddObjectType(objectType); + if (success) { + RegisterHandler.notifyAllClients(); } } } diff --git a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java index fe7eb1872..b91709dc8 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java +++ b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java @@ -18,9 +18,13 @@ package scouter.server.http.model; +import scouter.lang.Counter; import scouter.lang.value.DecimalValue; import scouter.lang.value.FloatValue; +import scouter.lang.value.NumberValue; import scouter.server.Configure; +import scouter.server.TelegrafMasurementConfig; +import scouter.util.HashUtil; import java.util.HashMap; import java.util.Map; @@ -29,23 +33,73 @@ * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. */ public class InfluxSingleLine { - public static final String SPACE_RE = "|!!|space"; - public static final String BACKSLASH_RE = "|!!|backslash"; - public static final String EQUAL_RE = "|!!|equal"; - private Configure configure; private String measuement; - - private String counterName; + private String host; private String objType; + private String objName; private int objHash; long receviedTime; - long timestamp; + long timestampOrigin; Map tags; - Map decimalFields; - Map floatFields; + Map numberFields = new HashMap(); + + private InfluxSingleLine(TelegrafMasurementConfig tConfig, + String measuement, + Map tags, + Map fields, + long receviedTime, + long timestampOrigin) { + + this.measuement = measuement; + this.tags = tags; + this.receviedTime = receviedTime; + this.timestampOrigin = timestampOrigin; + + this.host = tags.get(tConfig.getHostTag()); + if (this.host == null) { + this.host = "unknown"; + } else { + String mappedHost = tConfig.getHostMapping().get(this.host); + if (mappedHost != null) { + this.host = mappedHost; + } + } - private InfluxSingleLine() {} + StringBuilder objTypeSb = new StringBuilder(tConfig.getObjTypeBase()).append('_'); + for (String tagKey : tConfig.getObjTypeAppendTags()) { + objTypeSb.append('_').append(tags.get(tagKey)); + } + this.objType = objTypeSb.toString(); + + StringBuilder objNamSb = new StringBuilder(40).append('/').append(host).append('/').append(tConfig.getObjNameBase()); + for (String tagKey : tConfig.getObjNameAppendTags()) { + objNamSb.append('_').append(tags.get(tagKey)); + } + this.objName = objNamSb.toString(); + this.objHash = HashUtil.hash(objName); + + Map counterMapping = tConfig.getCounterMapping(); + for (Map.Entry field : fields.entrySet()) { + Counter counter = counterMapping.get(field.getKey()); + if (counter == null) { + continue; + } + String valueStr = field.getValue(); + int valueLen = valueStr.length(); + char lastChar = valueStr.charAt(valueLen - 1); + + if (lastChar == 'i') { //long + long value = Long.parseLong(valueStr.substring(0, valueLen - 1)); + numberFields.put(counter, new DecimalValue(value)); + } else if (lastChar >= '0' && lastChar <= '9') { //float + numberFields.put(counter, new FloatValue(Float.parseFloat(valueStr))); + } else { + //skip - boolean or string + continue; + } + } + } /** * line string key is measurement + tag values @@ -54,7 +108,7 @@ public static String toLineStringKey(String lineString) { return lineString.substring(0, lineString.indexOf(' ')); } - public static InfluxSingleLine of(String lineStr) { + public static InfluxSingleLine of(String lineStr, Configure configure, long receivedTime) { char[] chars = lineStr.toCharArray(); char sink = '\0'; int mode = 0; //0: measurement, 1: tags, 2: fields, 3: timestamp @@ -177,7 +231,57 @@ public static InfluxSingleLine of(String lineStr) { } } - InfluxSingleLine line = new InfluxSingleLine(); - return null; + String measurement = measurementSb.toString(); + TelegrafMasurementConfig tConfig = configure.telegrafInputConfigMap.get(measurement); + if (tConfig == null) { + return null; + } + if (!tConfig.isEnabled()) { + return null; + } + + + try { + return new InfluxSingleLine(tConfig, measurement, tags, fields, receivedTime, Long.parseLong(timestampSb.toString())); + } catch (Throwable t) { + t.printStackTrace(); + return null; + } + } + + public String getMeasuement() { + return measuement; + } + + public String getHost() { + return host; + } + + public String getObjType() { + return objType; + } + + public String getObjName() { + return objName; + } + + public int getObjHash() { + return objHash; + } + + public long getReceviedTime() { + return receviedTime; + } + + public long getTimestampOrigin() { + return timestampOrigin; + } + + public Map getTags() { + return tags; + } + + public Map getNumberFields() { + return numberFields; } } diff --git a/scouter.agent.java/src/test/java/scouter/agent/ConfigureTest.java b/scouter.server/src/test/java/scouter/server/ConfigureTest.java similarity index 96% rename from scouter.agent.java/src/test/java/scouter/agent/ConfigureTest.java rename to scouter.server/src/test/java/scouter/server/ConfigureTest.java index 76618470a..d9f822c2c 100644 --- a/scouter.agent.java/src/test/java/scouter/agent/ConfigureTest.java +++ b/scouter.server/src/test/java/scouter/server/ConfigureTest.java @@ -16,7 +16,7 @@ * */ -package scouter.agent; +package scouter.server; import org.junit.Assert; import org.junit.Test; @@ -25,12 +25,12 @@ import java.util.Map; /** - * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. + * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 23. */ public class ConfigureTest { @Test - public void applyTelegrafInputConfig_test() { + public void applyTelegrafInputConfig() { System.setProperty("scouter.config", "./conf/testcase-scouter.conf"); System.setProperty("input_telegraf_$xpu_space$_enabled", "true"); System.setProperty("input_telegraf_$xpu_space$_debug_enabled", "true"); From d2d006b49214cc70e90c3be9f82df7a14a65eb32 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Tue, 24 Jul 2018 23:19:42 +0900 Subject: [PATCH 03/53] [WIP] scouter server's telegraf http output support of influx line protocol --- .../main/java/scouter/agent/Configure.java | 28 -------- .../main/java/scouter/util/StringUtil.java | 24 +++++++ .../main/java/scouter/server/Configure.java | 30 +++++++- .../java/scouter/server/CounterManager.java | 10 +++ .../server/TelegrafMasurementConfig.java | 7 +- .../http/handler/TelegrafInputHandler.java | 38 +++++++--- .../server/http/model/InfluxSingleLine.java | 12 ++-- .../handler/TelegrafInputHandlerTest.java | 70 +++++++++++++++++++ .../http/model/InfluxSingleLineTest.java | 9 +-- 9 files changed, 178 insertions(+), 50 deletions(-) create mode 100644 scouter.server/src/test/java/scouter/server/http/handler/TelegrafInputHandlerTest.java diff --git a/scouter.agent.java/src/main/java/scouter/agent/Configure.java b/scouter.agent.java/src/main/java/scouter/agent/Configure.java index 014644b26..bfb2f2dc2 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/Configure.java +++ b/scouter.agent.java/src/main/java/scouter/agent/Configure.java @@ -657,34 +657,6 @@ public final static synchronized Configure getInstance() { @ConfigDesc("Path to jsp to collect enduser data") public String enduser_trace_endpoint_url = "/_scouter_browser.jsp"; - //telegraf sample config for help - @ConfigDesc("Telegraf http input enabled") - private boolean input_telegraf_enabled = true; - @ConfigDesc("print telegraf line protocol to STDOUT") - private boolean input_telegraf_debug_enabled = false; - @ConfigDesc("Telegraf http input of the $measurement$ enabled.\n$measurement$ is a variable to the measurement name of the line protocol.\n eg) input_telegraf_$redis_keyspace$_enabled=true") - private boolean input_telegraf_$measurement$_enabled = true; - @ConfigDesc("print telegraf line protocol of the $measurement$ to STDOUT") - private boolean input_telegraf_$measurement$_debug_enabled = false; - @ConfigDesc("which fields of $measurement$ are mapped to scouter's counter.\nformat: {line-protocol field name}:{scouter counter name}:{display name?}:{unit?}:{hasTotal?}\nIt can have multiple values.\neg)used_memory:tg-redis-used-memory,used_memory_rss:redis-used-memory-rss,redis used rss,bytes,true") - @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) - private String input_telegraf_$measurement$_counter_mappings = ""; - @ConfigDesc("define an objectType prefix. objectType is defined with some tags.\nsee input_telegraf_$measurement$_objType_append_tags option.") - private String input_telegraf_$measurement$_objType_base = ""; - @ConfigDesc("this tags's value is appended to objType_base.\nIt can have multiple values. eg)tag1,tag2") - @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) - private String input_telegraf_$measurement$_objType_append_tags = ""; - @ConfigDesc("define an objectName prefix. objectName is defined with some tags.\nsee input_telegraf_$measurement$_objName_append_tags option.") - private String input_telegraf_$measurement$_objName_base = ""; - @ConfigDesc("this tags's value is appended to objName_base.\nIt can have multiple values. eg)tag1,tag2") - @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) - private String input_telegraf_$measurement$_objName_append_tags = ""; - @ConfigDesc("tag name to define host") - private String input_telegraf_$measurement$_host_tag = ""; - @ConfigDesc("which host value defined with $measurement$_host_tag option is mapped to scouter's host.\nIt can have multiple values. eg)hostValue1:scouterHost1,hostValue2:scouterHost2") - @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) - private String input_telegraf_$measurement$_host_mappings = ""; - //Experimental(ignoreset) public boolean __experimental = false; public boolean __control_connection_leak_autoclose_enabled = false; diff --git a/scouter.common/src/main/java/scouter/util/StringUtil.java b/scouter.common/src/main/java/scouter/util/StringUtil.java index 9bcf1b9a3..e40419605 100644 --- a/scouter.common/src/main/java/scouter/util/StringUtil.java +++ b/scouter.common/src/main/java/scouter/util/StringUtil.java @@ -148,6 +148,30 @@ public static String[] split(String s, char c) { return arr.toArray(new String[arr.size()]); } + public static String[] splitByWholeSeparatorPreserveAllTokens(String s, char c) { + ArrayList arr = new ArrayList(); + + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == c) { + if (sb.length() > 0) { + arr.add(sb.toString()); + sb = new StringBuilder(); + } else { + arr.add(""); + sb = new StringBuilder(); + } + } else { + sb.append(s.charAt(i)); + } + } + if (sb.length() > 0) { + arr.add(sb.toString()); + sb = new StringBuilder(); + } + return arr.toArray(new String[arr.size()]); + } + public static HashSet splitAndTrimToSet(String s, char c, boolean toUpper) { HashSet set = new HashSet(); diff --git a/scouter.server/src/main/java/scouter/server/Configure.java b/scouter.server/src/main/java/scouter/server/Configure.java index e2f17868b..d8ccbdfdc 100644 --- a/scouter.server/src/main/java/scouter/server/Configure.java +++ b/scouter.server/src/main/java/scouter/server/Configure.java @@ -338,6 +338,34 @@ public final static synchronized Configure getInstance() { @ConfigDesc("search xlog service option - max xlog count to search per request") public int req_search_xlog_max_count = 500; + //telegraf sample config for help + @ConfigDesc("Telegraf http input enabled") + private boolean input_telegraf_enabled = true; + @ConfigDesc("print telegraf line protocol to STDOUT") + private boolean input_telegraf_debug_enabled = false; + @ConfigDesc("Telegraf http input of the $measurement$ enabled.\n$measurement$ is a variable to the measurement name of the line protocol.\n eg) input_telegraf_$redis_keyspace$_enabled=true") + private boolean input_telegraf_$measurement$_enabled = true; + @ConfigDesc("print telegraf line protocol of the $measurement$ to STDOUT") + private boolean input_telegraf_$measurement$_debug_enabled = false; + @ConfigDesc("which fields of $measurement$ are mapped to scouter's counter.\nformat: {line-protocol field name}:{scouter counter name}:{display name?}:{unit?}:{hasTotal?}\nIt can have multiple values.\neg)used_memory:tg-redis-used-memory,used_memory_rss:redis-used-memory-rss,redis used rss,bytes,true") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + private String input_telegraf_$measurement$_counter_mappings = ""; + @ConfigDesc("define an objectType prefix. objectType is defined with some tags.\nsee input_telegraf_$measurement$_objType_append_tags option.") + private String input_telegraf_$measurement$_objType_base = ""; + @ConfigDesc("this tags's value is appended to objType_base.\nIt can have multiple values. eg)tag1,tag2") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + private String input_telegraf_$measurement$_objType_append_tags = ""; + @ConfigDesc("define an objectName prefix. objectName is defined with some tags.\nsee input_telegraf_$measurement$_objName_append_tags option.") + private String input_telegraf_$measurement$_objName_base = ""; + @ConfigDesc("this tags's value is appended to objName_base.\nIt can have multiple values. eg)tag1,tag2") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + private String input_telegraf_$measurement$_objName_append_tags = ""; + @ConfigDesc("tag name to define host") + private String input_telegraf_$measurement$_host_tag = ""; + @ConfigDesc("which host value defined with $measurement$_host_tag option is mapped to scouter's host.\nIt can have multiple values. eg)hostValue1:scouterHost1,hostValue2:scouterHost2") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + private String input_telegraf_$measurement$_host_mappings = ""; + //Visitor Hourly public boolean visitor_hourly_count_enabled = true; @@ -591,7 +619,7 @@ protected void applyTelegrafInputConfig() { Map counterMappingMap = new HashMap(); for (String counterMapping : counterMappings) { Counter counter = new Counter(); - String[] split = StringUtil.split(counterMapping, ':'); + String[] split = StringUtil.splitByWholeSeparatorPreserveAllTokens(counterMapping, ':'); if (split.length >= 2) { counterMappingMap.put(split[0], counter); counter.setName(split[1]); diff --git a/scouter.server/src/main/java/scouter/server/CounterManager.java b/scouter.server/src/main/java/scouter/server/CounterManager.java index fd2ee3805..3bf80dac4 100644 --- a/scouter.server/src/main/java/scouter/server/CounterManager.java +++ b/scouter.server/src/main/java/scouter/server/CounterManager.java @@ -118,6 +118,16 @@ public synchronized boolean safelyAddFamily(Family family) { newElement.setAttribute(CounterEngine.ATTR_MASTER, family.getMaster()); Element oldElement = findElementByTypeAndName(CounterEngine.TAG_FAMILY, family.getName()); Element familiesElement = (Element) unsafeDoc.getElementsByTagName(CounterEngine.TAG_FAMILYS).item(0); + for (Counter counter : family.listCounters()) { + Element counterElement = unsafeDoc.createElement(CounterEngine.TAG_COUNTER); + counterElement.setAttribute(CounterEngine.ATTR_NAME, counter.getName()); + counterElement.setAttribute(CounterEngine.ATTR_DISPLAY, counter.getDisplayName()); + counterElement.setAttribute(CounterEngine.ATTR_UNIT, counter.getUnit()); + counterElement.setAttribute(CounterEngine.ATTR_ICON, counter.getIcon()); + counterElement.setAttribute(CounterEngine.ATTR_ALL, counter.isAll() ? "true" : "false"); + counterElement.setAttribute(CounterEngine.ATTR_TOTAL, counter.isTotal() ? "true" : "false"); + newElement.appendChild(counterElement); + } if (oldElement == null) { familiesElement.appendChild(newElement); } else { diff --git a/scouter.server/src/main/java/scouter/server/TelegrafMasurementConfig.java b/scouter.server/src/main/java/scouter/server/TelegrafMasurementConfig.java index e5250de9a..6997a2970 100644 --- a/scouter.server/src/main/java/scouter/server/TelegrafMasurementConfig.java +++ b/scouter.server/src/main/java/scouter/server/TelegrafMasurementConfig.java @@ -29,15 +29,16 @@ * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. */ public class TelegrafMasurementConfig { + private final String TG = "TG$"; private String measurement; private boolean enabled = true; private boolean debugEnabled = false; private Map counterMapping; - private String objTypeBase; + private String objTypeBase = TG; private List objTypeAppendTags = new ArrayList(); - private String objNameBase; + private String objNameBase = ""; private List objNameAppendTags = new ArrayList(); private String hostTag; private Map hostMapping = new HashMap(); @@ -75,7 +76,7 @@ public String getObjTypeBase() { } public void setObjTypeBase(String objTypeBase) { - this.objTypeBase = objTypeBase; + this.objTypeBase = TG + objTypeBase; } public List getObjTypeAppendTags() { diff --git a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java index 3582c023f..f95a42cba 100644 --- a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java +++ b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java @@ -66,8 +66,27 @@ public static TelegrafInputHandler getInstance() { } @Override - public void start() { - //TODO register job + public void run() { + while (true) { + try { + while (true) { + InfluxSingleLine line = registerObjTypeQueue.get(1000); + if (line == null) { + break; + } + registerNewObjType0(line); + } + while (true) { + AddCounterParam addCounterParam = addCounterQueue.get(1000); + if (addCounterParam == null) { + break; + } + addCounter0(addCounterParam); + } + } catch (Exception e) { + Logger.println("TGI-003", 60, "TelegrafInputHandler Error:" + e.getMessage(), e); + } + } } public void handlerRequest(HttpServletRequest request, HttpServletResponse response) throws IOException { @@ -96,7 +115,7 @@ public void handlerRequest(HttpServletRequest request, HttpServletResponse respo } } - public void count(InfluxSingleLine line) { + protected void count(InfluxSingleLine line) { ObjectType objectType = counterManager.getCounterEngine().getObjectType(line.getObjType()); if (objectType == null) { registerNewObjType(line); @@ -127,7 +146,7 @@ private void addCounter(ObjectType objectType, Counter counter) { addCounterQueue.put(new AddCounterParam(objectType, counter)); } - private synchronized void registerNewObjType0(InfluxSingleLine line) { + private void registerNewObjType0(InfluxSingleLine line) { ObjectType objectTypeDoubleCheck = counterManager.getCounterEngine().getObjectType(line.getObjType()); if (objectTypeDoubleCheck != null) { return; @@ -150,8 +169,8 @@ private synchronized void registerNewObjType0(InfluxSingleLine line) { family.addCounter(counter); if (firstCounter) { family.setMaster(counter.getName()); + firstCounter = false; } - firstCounter = false; } boolean success0 = counterManager.safelyAddFamily(family); @@ -166,13 +185,16 @@ private synchronized void registerNewObjType0(InfluxSingleLine line) { } } - private synchronized void addCounter0(ObjectType objectType, Counter counter) { + private void addCounter0(AddCounterParam param) { + ObjectType objectType = param.objectType; + Counter counter = param.counter; Counter counterDoubleCheck = objectType.getCounter(counter.getName()); if (counterDoubleCheck != null) { return; } - objectType.addCounter(counter); - boolean success = counterManager.safelyAddObjectType(objectType); + Family family = objectType.getFamily(); + family.addCounter(counter); + boolean success = counterManager.safelyAddFamily(family); if (success) { RegisterHandler.notifyAllClients(); } diff --git a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java index b91709dc8..23f6bcc13 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java +++ b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java @@ -38,7 +38,7 @@ public class InfluxSingleLine { private String objType; private String objName; private int objHash; - long receviedTime; + long receivedTime; long timestampOrigin; Map tags; @@ -48,12 +48,12 @@ private InfluxSingleLine(TelegrafMasurementConfig tConfig, String measuement, Map tags, Map fields, - long receviedTime, + long receivedTime, long timestampOrigin) { this.measuement = measuement; this.tags = tags; - this.receviedTime = receviedTime; + this.receivedTime = receivedTime; this.timestampOrigin = timestampOrigin; this.host = tags.get(tConfig.getHostTag()); @@ -66,7 +66,7 @@ private InfluxSingleLine(TelegrafMasurementConfig tConfig, } } - StringBuilder objTypeSb = new StringBuilder(tConfig.getObjTypeBase()).append('_'); + StringBuilder objTypeSb = new StringBuilder(tConfig.getObjTypeBase()); for (String tagKey : tConfig.getObjTypeAppendTags()) { objTypeSb.append('_').append(tags.get(tagKey)); } @@ -269,8 +269,8 @@ public int getObjHash() { return objHash; } - public long getReceviedTime() { - return receviedTime; + public long getReceivedTime() { + return receivedTime; } public long getTimestampOrigin() { diff --git a/scouter.server/src/test/java/scouter/server/http/handler/TelegrafInputHandlerTest.java b/scouter.server/src/test/java/scouter/server/http/handler/TelegrafInputHandlerTest.java new file mode 100644 index 000000000..41df97b54 --- /dev/null +++ b/scouter.server/src/test/java/scouter/server/http/handler/TelegrafInputHandlerTest.java @@ -0,0 +1,70 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.server.http.handler; + +import org.junit.BeforeClass; +import org.junit.Test; +import scouter.server.Configure; +import scouter.server.http.model.InfluxSingleLine; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 24. + */ +public class TelegrafInputHandlerTest { + + @BeforeClass + public static void beforeClass() { + System.setProperty("scouter.config", "./conf/testcase-scouter.conf"); + System.setProperty("input_telegraf_$mem$_enabled", "true"); + System.setProperty("input_telegraf_$mem$_debug_enabled", "true"); + System.setProperty("input_telegraf_$mem$_counter_mappings", "used:tg-used,free:tg-free:memory-free::false,available_percent:tg-mem-pct:memory percent:%:false"); + System.setProperty("input_telegraf_$mem$_objType_base", "MEM"); + //System.setProperty("input_telegraf_$mem$_objType_append_tags", ""); + System.setProperty("input_telegraf_$mem$_objName_base", "tg"); + System.setProperty("input_telegraf_$mem$_objName_append_tags", "region"); + System.setProperty("input_telegraf_$mem$_host_tag", "host"); + //System.setProperty("input_telegraf_$mem$_host_mappings", "h1:Sh1,h2:Sh2"); + } + + /** + * remove counter.site.xml before test + * @throws InterruptedException + */ + @Test + public void count_new_family_and_objType_is_added() throws InterruptedException { + String metric = "mem,host=GunMac.skbroadband,region=seoul used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i,slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i,active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521 1532269780000000000"; + InfluxSingleLine line = InfluxSingleLine.of(metric, Configure.getInstance(), System.currentTimeMillis()); + TelegrafInputHandler.getInstance().count(line); + Thread.sleep(300000); + } + + /** + * test after count_new_family_and_objType_is_added() + * @throws InterruptedException + */ + @Test + public void count_new_counter_is_added() throws InterruptedException { + System.setProperty("input_telegraf_$mem$_counter_mappings", "used:tg-used,free:tg-free:memory-free::false,available_percent:tg-mem-pct:memory percent:%:false,inactive:tg-mem-inactive:mem inactive:ea:false"); + + String metric = "mem,host=GunMac.skbroadband,region=seoul used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i,slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i,active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521 1532269780000000000"; + InfluxSingleLine line = InfluxSingleLine.of(metric, Configure.getInstance(), System.currentTimeMillis()); + TelegrafInputHandler.getInstance().count(line); + Thread.sleep(300000); + } +} \ No newline at end of file diff --git a/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java b/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java index 2b4745b69..b6f16bf4c 100644 --- a/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java +++ b/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java @@ -19,6 +19,7 @@ package scouter.server.http.model; import org.junit.Test; +import scouter.server.Configure; import static org.junit.Assert.*; @@ -36,7 +37,7 @@ public class InfluxSingleLineTest { @Test public void of_test() { - InfluxSingleLine.of("mem,host=GunMac.skbroadband,region=seoul used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i,slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i,active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521 1532269780000000000"); + InfluxSingleLine.of("mem,host=GunMac.skbroadband,region=seoul used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i,slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i,active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521 1532269780000000000", Configure.getInstance(), System.currentTimeMillis()); } @Test @@ -45,19 +46,19 @@ public void perf_test() { long start = System.currentTimeMillis(); for (int i = 0; i < 300000; i++) { - InfluxSingleLine.of(metric); + InfluxSingleLine.of(metric, Configure.getInstance(), start); } System.out.println("[of millis]" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); for (int i = 0; i < 300000; i++) { - InfluxSingleLine.of(metric); + InfluxSingleLine.of(metric, Configure.getInstance(), start); } System.out.println("[of millis]" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); for (int i = 0; i < 300000; i++) { - InfluxSingleLine.of(metric); + InfluxSingleLine.of(metric, Configure.getInstance(), start); } System.out.println("[of millis]" + (System.currentTimeMillis() - start)); } From 852b5d0ff2ef4b452c532f93d63b2f4e2e7ff9f1 Mon Sep 17 00:00:00 2001 From: bill23 Date: Fri, 27 Jul 2018 10:41:41 +0900 Subject: [PATCH 04/53] support h2 database query --- .../main/java/scouter/agent/asm/JDBCPreparedStatementASM.java | 2 ++ .../src/main/java/scouter/agent/asm/JDBCResultSetASM.java | 2 ++ .../src/main/java/scouter/agent/asm/JDBCStatementASM.java | 1 + 3 files changed, 5 insertions(+) diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCPreparedStatementASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCPreparedStatementASM.java index c3c5c89c9..51ffc8502 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCPreparedStatementASM.java +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCPreparedStatementASM.java @@ -77,6 +77,8 @@ public JDBCPreparedStatementASM() { // MySql Connector/j 6.X target.add("com/mysql/cj/jdbc/PreparedStatement"); + target.add("org/h2/jdbc/JdbcPreparedStatement"); // h2 + // @skyworker - MySQL ServerPreparedStatement는 특별히 필드를 추가하지 않음 noField.add("com/mysql/jdbc/ServerPreparedStatement"); noField.add("jdbc/FakePreparedStatement2"); diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCResultSetASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCResultSetASM.java index 6817a417e..7f868bba2 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCResultSetASM.java +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCResultSetASM.java @@ -66,6 +66,8 @@ public JDBCResultSetASM() { target.add("Altibase/jdbc/driver/ABResultSet"); //tibero6 + target.add("org/h2/jdbc/JdbcResultSet"); //h2 + //only close String alti1 = "Altibase/jdbc/driver/AltibaseResultSet"; target.add(alti1); onlyCloseTarget.add(alti1); diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCStatementASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCStatementASM.java index 2da39f70c..ff5b29ce2 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCStatementASM.java +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCStatementASM.java @@ -59,6 +59,7 @@ public JDBCStatementASM() { target.add("cubrid/jdbc/driver/CUBRIDStatement"); target.add("Altibase/jdbc/driver/AltibaseStatement"); target.add("Altibase/jdbc/driver/ABStatement"); + target.add("org/h2/jdbc/JdbcStatement"); //h2 } public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc classDesc) { From 40afbd48d02063d81039f497d7bb6af14f94de6e Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Mon, 30 Jul 2018 00:10:02 +0900 Subject: [PATCH 05/53] [WIP] scouter server's telegraf http output support of influx line protocol --- pom.xml | 2 +- scouter.agent.batch/pom.xml | 2 +- scouter.agent.host/pom.xml | 2 +- scouter.agent.java/pom.xml | 2 +- .../configuration/views/ConfigureView.java | 4 +- scouter.common/pom.xml | 2 +- .../src/main/java/scouter/lang/Counter.java | 21 +- .../java/scouter/lang/pack/ObjectPack.java | 16 +- .../main/java/scouter/util/StringUtil.java | 21 ++ scouter.deploy/pom.xml | 2 +- scouter.server.boot/pom.xml | 2 +- scouter.server/pom.xml | 2 +- .../main/java/scouter/server/Configure.java | 153 +++++++++--- .../server/TelegrafMasurementConfig.java | 122 ---------- .../scouter/server/TgMeasurementConfig.java | 201 ++++++++++++++++ .../java/scouter/server/http/HttpServer.java | 18 +- .../http/handler/TelegrafInputHandler.java | 77 +++++-- .../server/http/model/CounterProtocol.java | 136 +++++++++++ .../server/http/model/InfluxSingleLine.java | 148 +++++++----- .../http/servlet/TelegrafInputServlet.java | 37 +++ .../scouter/server/core/AgentManager.scala | 6 +- .../server/netio/data/NetDataProcessor.scala | 13 +- .../java/scouter/server/ConfigureTest.java | 8 +- .../handler/TelegrafInputHandlerTest.java | 41 +++- .../http/model/InfluxSingleLineTest.java | 217 +++++++++++++++++- scouter.webapp/pom.xml | 2 +- 26 files changed, 994 insertions(+), 263 deletions(-) delete mode 100644 scouter.server/src/main/java/scouter/server/TelegrafMasurementConfig.java create mode 100644 scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java create mode 100644 scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java create mode 100644 scouter.server/src/main/java/scouter/server/http/servlet/TelegrafInputServlet.java diff --git a/pom.xml b/pom.xml index 1109e8dc2..8a93851a0 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.0 + 1.9.1.SNAPSHOT pom SCOUTER APM diff --git a/scouter.agent.batch/pom.xml b/scouter.agent.batch/pom.xml index 83b7d130a..ab9734015 100644 --- a/scouter.agent.batch/pom.xml +++ b/scouter.agent.batch/pom.xml @@ -5,7 +5,7 @@ io.github.scouter-project scouter-parent - 1.9.0 + 1.9.1.SNAPSHOT scouter-agent-batch diff --git a/scouter.agent.host/pom.xml b/scouter.agent.host/pom.xml index dc3409bdf..537d93e09 100644 --- a/scouter.agent.host/pom.xml +++ b/scouter.agent.host/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.0 + 1.9.1.SNAPSHOT scouter-agent-host diff --git a/scouter.agent.java/pom.xml b/scouter.agent.java/pom.xml index c1bcfa703..a61145595 100644 --- a/scouter.agent.java/pom.xml +++ b/scouter.agent.java/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.0 + 1.9.1.SNAPSHOT scouter-agent-java diff --git a/scouter.client/src/scouter/client/configuration/views/ConfigureView.java b/scouter.client/src/scouter/client/configuration/views/ConfigureView.java index 29037996e..66939671e 100644 --- a/scouter.client/src/scouter/client/configuration/views/ConfigureView.java +++ b/scouter.client/src/scouter/client/configuration/views/ConfigureView.java @@ -300,7 +300,7 @@ public void mouseDoubleClick(MouseEvent e) { int end = selectedY; while(start > 0) { char c = contents.charAt(--start); - if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_' || c == '-') { + if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_' || c == '-' || c == '$') { //expand backward } else { start++; @@ -309,7 +309,7 @@ public void mouseDoubleClick(MouseEvent e) { } while(end < contents.length()) { char c = contents.charAt(end++); - if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_' || c == '-') { + if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_' || c == '-' || c == '$') { //expand ahead } else { end--; diff --git a/scouter.common/pom.xml b/scouter.common/pom.xml index 8dc9c1d87..7cd45cf53 100644 --- a/scouter.common/pom.xml +++ b/scouter.common/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.0 + 1.9.1.SNAPSHOT scouter-common diff --git a/scouter.common/src/main/java/scouter/lang/Counter.java b/scouter.common/src/main/java/scouter/lang/Counter.java index fd012d1fb..a819f26c5 100644 --- a/scouter.common/src/main/java/scouter/lang/Counter.java +++ b/scouter.common/src/main/java/scouter/lang/Counter.java @@ -27,7 +27,12 @@ public class Counter implements Comparable { private boolean all = true; private boolean total = true; private StringKeyLinkedMap attrMap = new StringKeyLinkedMap(); - + + public Counter() {} + + public Counter(String name) { + this.name = name; + } public String getName() { return name; } @@ -106,4 +111,18 @@ public boolean equals(Object obj) { public int compareTo(Counter o) { return this.name.compareTo(o.getName()); } + + public Counter clone() { + Counter clone = new Counter(); + clone.name = this.name; + clone.displayName = this.displayName; + clone.unit = this.unit; + clone.icon = this.icon; + clone.all = this.all; + clone.total = this.total; + //TODO deep clone + clone.attrMap = this.attrMap; + + return clone; + } } \ No newline at end of file diff --git a/scouter.common/src/main/java/scouter/lang/pack/ObjectPack.java b/scouter.common/src/main/java/scouter/lang/pack/ObjectPack.java index 1ee0c3364..5b3df133b 100644 --- a/scouter.common/src/main/java/scouter/lang/pack/ObjectPack.java +++ b/scouter.common/src/main/java/scouter/lang/pack/ObjectPack.java @@ -17,19 +17,21 @@ package scouter.lang.pack; -import java.io.IOException; -import java.sql.Timestamp; - import scouter.io.DataInputX; import scouter.io.DataOutputX; import scouter.lang.value.MapValue; import scouter.util.Hexa32; +import java.io.IOException; +import java.sql.Timestamp; + /** * Object that contains one agent(called object) information */ public class ObjectPack implements Pack { + public static final String TAG_KEY_DEAD_TIME = "deadTime"; + /** * Object type */ @@ -92,6 +94,14 @@ public void wakeup() { this.alive = true; } + public void setDeadTime(int deadTime) { + this.tags.put(TAG_KEY_DEAD_TIME, deadTime); + } + + public int getDeadTime() { + return tags.getInt(TAG_KEY_DEAD_TIME); + } + public byte getPackType() { return PackEnum.OBJECT; } diff --git a/scouter.common/src/main/java/scouter/util/StringUtil.java b/scouter.common/src/main/java/scouter/util/StringUtil.java index e40419605..c7f546d31 100644 --- a/scouter.common/src/main/java/scouter/util/StringUtil.java +++ b/scouter.common/src/main/java/scouter/util/StringUtil.java @@ -148,6 +148,27 @@ public static String[] split(String s, char c) { return arr.toArray(new String[arr.size()]); } + public static ArrayList splitAsList(String s, char c) { + ArrayList arr = new ArrayList(); + + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == c) { + if (sb.length() > 0) { + arr.add(sb.toString()); + sb = new StringBuilder(); + } + } else { + sb.append(s.charAt(i)); + } + } + if (sb.length() > 0) { + arr.add(sb.toString()); + sb = new StringBuilder(); + } + return arr; + } + public static String[] splitByWholeSeparatorPreserveAllTokens(String s, char c) { ArrayList arr = new ArrayList(); diff --git a/scouter.deploy/pom.xml b/scouter.deploy/pom.xml index 6184c89b5..e4e518b45 100644 --- a/scouter.deploy/pom.xml +++ b/scouter.deploy/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.0 + 1.9.1.SNAPSHOT scouter-deploy diff --git a/scouter.server.boot/pom.xml b/scouter.server.boot/pom.xml index 2b094a518..24e5c0a58 100644 --- a/scouter.server.boot/pom.xml +++ b/scouter.server.boot/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.0 + 1.9.1.SNAPSHOT scouter-server-boot diff --git a/scouter.server/pom.xml b/scouter.server/pom.xml index 37167e087..eb50b916f 100644 --- a/scouter.server/pom.xml +++ b/scouter.server/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.0 + 1.9.1.SNAPSHOT scouter-server diff --git a/scouter.server/src/main/java/scouter/server/Configure.java b/scouter.server/src/main/java/scouter/server/Configure.java index d8ccbdfdc..bd59789bd 100644 --- a/scouter.server/src/main/java/scouter/server/Configure.java +++ b/scouter.server/src/main/java/scouter/server/Configure.java @@ -17,7 +17,6 @@ package scouter.server; -import scouter.lang.Counter; import scouter.lang.conf.ConfigDesc; import scouter.lang.conf.ConfigValueType; import scouter.lang.conf.ConfigValueUtil; @@ -25,6 +24,7 @@ import scouter.lang.value.ListValue; import scouter.lang.value.MapValue; import scouter.net.NetConstants; +import scouter.server.http.model.CounterProtocol; import scouter.util.DateUtil; import scouter.util.FileUtil; import scouter.util.StringEnumer; @@ -41,12 +41,15 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Properties; import java.util.StringTokenizer; +import java.util.concurrent.ConcurrentHashMap; public class Configure extends Thread { @@ -59,6 +62,7 @@ public class Configure extends Thread { private static final String TELEGRAF_INPUT_MEASUREMENT_ENABLED_POSTFIX = "_enabled"; private static final String TELEGRAF_INPUT_MEASUREMENT_DEBUG_ENABLED_POSTFIX = "_debug_enabled"; + private static final String TELEGRAF_INPUT_MEASUREMENT_TAG_FILTER_POSTFIX = "_tag_filter"; private static final String TELEGRAF_INPUT_MEASUREMENT_COUNTER_MAPPINGS_POSTFIX = "_counter_mappings"; private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_BASE_POSTFIX = "_objType_base"; private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_APPEND_TAGS_POSTFIX = "_objType_append_tags"; @@ -68,7 +72,7 @@ public class Configure extends Thread { private static final String TELEGRAF_INPUT_MEASUREMENT_HOST_MAPPINGS_POSTFIX = "_host_mappings"; //telegraf config - public Map telegrafInputConfigMap = new HashMap(); + public Map telegrafInputConfigMap = new ConcurrentHashMap(); public final static synchronized Configure getInstance() { if (instance == null) { @@ -80,6 +84,16 @@ public final static synchronized Configure getInstance() { return instance; } + public final static synchronized Configure newInstanceForTestCase() { + if (instance != null) { + instance.running = false; + } + instance = new Configure(); + instance.setDaemon(true); + instance.setName(ThreadUtil.getName(instance)); + instance.start(); + return instance; + } //SERVER @ConfigDesc("Server ID") @@ -340,31 +354,62 @@ public final static synchronized Configure getInstance() { //telegraf sample config for help @ConfigDesc("Telegraf http input enabled") - private boolean input_telegraf_enabled = true; + public boolean input_telegraf_enabled = true; @ConfigDesc("print telegraf line protocol to STDOUT") - private boolean input_telegraf_debug_enabled = false; - @ConfigDesc("Telegraf http input of the $measurement$ enabled.\n$measurement$ is a variable to the measurement name of the line protocol.\n eg) input_telegraf_$redis_keyspace$_enabled=true") - private boolean input_telegraf_$measurement$_enabled = true; - @ConfigDesc("print telegraf line protocol of the $measurement$ to STDOUT") - private boolean input_telegraf_$measurement$_debug_enabled = false; - @ConfigDesc("which fields of $measurement$ are mapped to scouter's counter.\nformat: {line-protocol field name}:{scouter counter name}:{display name?}:{unit?}:{hasTotal?}\nIt can have multiple values.\neg)used_memory:tg-redis-used-memory,used_memory_rss:redis-used-memory-rss,redis used rss,bytes,true") - @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) - private String input_telegraf_$measurement$_counter_mappings = ""; - @ConfigDesc("define an objectType prefix. objectType is defined with some tags.\nsee input_telegraf_$measurement$_objType_append_tags option.") - private String input_telegraf_$measurement$_objType_base = ""; - @ConfigDesc("this tags's value is appended to objType_base.\nIt can have multiple values. eg)tag1,tag2") + public boolean input_telegraf_debug_enabled = false; + @ConfigDesc("Waiting time(ms) until stopped heartbeat of object is determined to be inactive") + public int telegraf_object_deadtime_ms = 35000; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "Telegraf http input of the $measurement$ enabled.\n" + + "$measurement$ is a variable to the measurement name of the line protocol.\n" + + "eg) input_telegraf_$redis_keyspace$_enabled=true") + public boolean input_telegraf_$measurement$_enabled = true; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "print telegraf line protocol of the $measurement$ to STDOUT") + public boolean input_telegraf_$measurement$_debug_enabled = false; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "If set, only the metric matching to this tag value is handled.\n" + + "It can have multiple values. comma separator means 'or' condition. eg) cpu:cpu-total,cpu:cpu0\n" + + "It also have not(!) condition. eg) cpu:!cpu-total") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String input_telegraf_$measurement$_tag_filter = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "which fields of $measurement$ are mapped to scouter's counter.\n" + + "format: {line-protocol field name}:{scouter counter name}:{display name?}:{unit?}:{hasTotal?}\n" + + "It can have multiple values.\n" + + "{scouter counter name} can be defined in combination with the line protocol's tag variables.\n" + + "For example, if the value of 'tag1' is 'disk01' and the value of 'tag2' is 'bin', the counter name defined as 'scouter-du-$tag1$-$tag2$' is 'scouter-du-disk01-bin'.\n" + + "eg)used_memory:tg-redis-used-memory,used_memory_rss:redis-used-memory-rss,redis used rss,bytes,true\n" + + "eg)cpu:cpu-$cpu-no$ -- this example shows counter definition with tag value.") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String input_telegraf_$measurement$_counter_mappings = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "define an objectType prefix. objectType is defined with some tags.\n" + + "see input_telegraf_$measurement$_objType_append_tags option.") + public String input_telegraf_$measurement$_objType_base = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "this tags's value is appended to objType_base.\nIt can have multiple values. eg)tag1,tag2") @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) - private String input_telegraf_$measurement$_objType_append_tags = ""; - @ConfigDesc("define an objectName prefix. objectName is defined with some tags.\nsee input_telegraf_$measurement$_objName_append_tags option.") - private String input_telegraf_$measurement$_objName_base = ""; - @ConfigDesc("this tags's value is appended to objName_base.\nIt can have multiple values. eg)tag1,tag2") + public String input_telegraf_$measurement$_objType_append_tags = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "define an objectName prefix. objectName is defined with some tags.\n" + + "see input_telegraf_$measurement$_objName_append_tags option.") + public String input_telegraf_$measurement$_objName_base = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "this tags's value is appended to objName_base.\n" + + "It can have multiple values. eg)tag1,tag2") @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) - private String input_telegraf_$measurement$_objName_append_tags = ""; - @ConfigDesc("tag name to define host") - private String input_telegraf_$measurement$_host_tag = ""; - @ConfigDesc("which host value defined with $measurement$_host_tag option is mapped to scouter's host.\nIt can have multiple values. eg)hostValue1:scouterHost1,hostValue2:scouterHost2") + public String input_telegraf_$measurement$_objName_append_tags = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "tag name to define host") + public String input_telegraf_$measurement$_host_tag = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "which host value defined with $measurement$_host_tag option is mapped to scouter's host.\n" + + "It can have multiple values. eg)hostValue1:scouterHost1,hostValue2:scouterHost2") @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) - private String input_telegraf_$measurement$_host_mappings = ""; + public String input_telegraf_$measurement$_host_mappings = ""; //Visitor Hourly public boolean visitor_hourly_count_enabled = true; @@ -572,7 +617,22 @@ private void apply() { this.net_tcp_service_pool_size = getInt("net_tcp_service_pool_size", 100); this.req_search_xlog_max_count = getInt("req_search_xlog_max_count", 500); - + + this.input_telegraf_enabled = getBoolean("input_telegraf_enabled", true); + this.input_telegraf_debug_enabled = getBoolean("input_telegraf_debug_enabled", false); + this.telegraf_object_deadtime_ms = getInt("telegraf_object_deadtime_ms", 35000); + + this.input_telegraf_$measurement$_enabled = getBoolean("input_telegraf_$measurement$_enabled", true); + this.input_telegraf_$measurement$_debug_enabled = getBoolean("input_telegraf_$measurement$_debug_enabled", false); + this.input_telegraf_$measurement$_tag_filter = getValue("input_telegraf_$measurement$_tag_filter", ""); + this.input_telegraf_$measurement$_counter_mappings = getValue("input_telegraf_$measurement$_counter_mappings", ""); + this.input_telegraf_$measurement$_objType_base = getValue("input_telegraf_$measurement$_objType_base", ""); + this.input_telegraf_$measurement$_objType_append_tags = getValue("input_telegraf_$measurement$_objType_append_tags", ""); + this.input_telegraf_$measurement$_objName_base = getValue("input_telegraf_$measurement$_objName_base", ""); + this.input_telegraf_$measurement$_objName_append_tags = getValue("input_telegraf_$measurement$_objName_append_tags", ""); + this.input_telegraf_$measurement$_host_tag = getValue("input_telegraf_$measurement$_host_tag", ""); + this.input_telegraf_$measurement$_host_mappings = getValue("input_telegraf_$measurement$_host_mappings", ""); + ConfObserver.exec(); } @@ -580,6 +640,8 @@ private void apply() { * Configuration for telegraf input */ protected void applyTelegrafInputConfig() { + Map tConfigMap = new HashMap(); + for (Map.Entry e : property.entrySet()) { String key = (String) e.getKey(); String value = (String) e.getValue(); @@ -594,10 +656,11 @@ protected void applyTelegrafInputConfig() { String measurement = simplifiedKey.substring(0, secondDollar); //redis_keyspace String postfix = simplifiedKey.substring(secondDollar + 1); - TelegrafMasurementConfig tConfig = telegrafInputConfigMap.get(measurement); + + TgMeasurementConfig tConfig = tConfigMap.get(measurement); if (tConfig == null) { - tConfig = new TelegrafMasurementConfig(measurement); - telegrafInputConfigMap.put(measurement, tConfig); + tConfig = new TgMeasurementConfig(measurement); + tConfigMap.put(measurement, tConfig); } if (TELEGRAF_INPUT_MEASUREMENT_ENABLED_POSTFIX.equals(postfix)) { @@ -610,15 +673,37 @@ protected void applyTelegrafInputConfig() { tConfig.setDebugEnabled(Boolean.parseBoolean(value)); } catch (Exception ignored) {} + } else if (TELEGRAF_INPUT_MEASUREMENT_TAG_FILTER_POSTFIX.equals(postfix)) { + String[] mappings = StringUtil.split(value, ','); + if (mappings == null || mappings.length == 0) { + continue; + } + + Map> tagFilterMap = new HashMap>(); + for (String mapping : mappings) { + String[] kv = StringUtil.split(mapping, ':'); + if (kv.length != 2) { + Logger.println("CFG003", "Abnormal line protocol tag mapping config."); + continue; + } + List list = tagFilterMap.get(kv[0]); + if (list == null) { + list = new ArrayList(); + tagFilterMap.put(kv[0], list); + } + list.add(kv[1]); + } + tConfig.setTagFilter(tagFilterMap); + } else if (TELEGRAF_INPUT_MEASUREMENT_COUNTER_MAPPINGS_POSTFIX.equals(postfix)) { String[] counterMappings = StringUtil.split(value, ','); if (counterMappings == null || counterMappings.length == 0) { continue; } //format: {line-protocol field name}:{scouter counter name}:{display name?}:{unit?}:{hasTotal?} - Map counterMappingMap = new HashMap(); + Map counterMappingMap = new HashMap(); for (String counterMapping : counterMappings) { - Counter counter = new Counter(); + CounterProtocol counter = new CounterProtocol(); String[] split = StringUtil.splitByWholeSeparatorPreserveAllTokens(counterMapping, ':'); if (split.length >= 2) { counterMappingMap.put(split[0], counter); @@ -640,10 +725,7 @@ protected void applyTelegrafInputConfig() { } catch (Exception ignored) {} } } - - if (counterMappingMap.size() > 0) { - tConfig.setCounterMapping(counterMappingMap); - } + tConfig.setCounterMapping(counterMappingMap); } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_BASE_POSTFIX.equals(postfix)) { tConfig.setObjTypeBase(value); @@ -685,6 +767,10 @@ protected void applyTelegrafInputConfig() { } } } + + for (Map.Entry tConfigEntry : tConfigMap.entrySet()) { + telegrafInputConfigMap.put(tConfigEntry.getKey(), tConfigEntry.getValue()); + } } private StringSet getStringSet(String key, String deli) { @@ -775,6 +861,7 @@ public boolean saveText(String text) { static { ignoreSet.add("property"); + ignoreSet.add("telegrafInputConfigMap"); } public MapValue getKeyValueInfo() { diff --git a/scouter.server/src/main/java/scouter/server/TelegrafMasurementConfig.java b/scouter.server/src/main/java/scouter/server/TelegrafMasurementConfig.java deleted file mode 100644 index 6997a2970..000000000 --- a/scouter.server/src/main/java/scouter/server/TelegrafMasurementConfig.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright 2015 the original author or authors. - * @https://github.com/scouter-project/scouter - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package scouter.server; - -import scouter.lang.Counter; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. - */ -public class TelegrafMasurementConfig { - private final String TG = "TG$"; - private String measurement; - - private boolean enabled = true; - private boolean debugEnabled = false; - - private Map counterMapping; - private String objTypeBase = TG; - private List objTypeAppendTags = new ArrayList(); - private String objNameBase = ""; - private List objNameAppendTags = new ArrayList(); - private String hostTag; - private Map hostMapping = new HashMap(); - - public TelegrafMasurementConfig(String measurement) { - this.measurement = measurement; - } - - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - - public boolean isDebugEnabled() { - return debugEnabled; - } - - public void setDebugEnabled(boolean debugEnabled) { - this.debugEnabled = debugEnabled; - } - - public Map getCounterMapping() { - return counterMapping; - } - - public void setCounterMapping(Map counterMapping) { - this.counterMapping = counterMapping; - } - - public String getObjTypeBase() { - return objTypeBase; - } - - public void setObjTypeBase(String objTypeBase) { - this.objTypeBase = TG + objTypeBase; - } - - public List getObjTypeAppendTags() { - return objTypeAppendTags; - } - - public void setObjTypeAppendTags(List objTypeAppendTags) { - this.objTypeAppendTags = objTypeAppendTags; - } - - public String getObjNameBase() { - return objNameBase; - } - - public void setObjNameBase(String objNameBase) { - this.objNameBase = objNameBase; - } - - public List getObjNameAppendTags() { - return objNameAppendTags; - } - - public void setObjNameAppendTags(List objNameAppendTags) { - this.objNameAppendTags = objNameAppendTags; - } - - public String getHostTag() { - return hostTag; - } - - public void setHostTag(String hostTag) { - this.hostTag = hostTag; - } - - public Map getHostMapping() { - return hostMapping; - } - - public void setHostMapping(Map hostMapping) { - this.hostMapping = hostMapping; - } - -} diff --git a/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java b/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java new file mode 100644 index 000000000..b0dbde5d3 --- /dev/null +++ b/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java @@ -0,0 +1,201 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.server; + +import scouter.server.http.model.CounterProtocol; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. + */ +public class TgMeasurementConfig { + public static final String TG = "TG$"; + + private String measurement; + + private boolean enabled = true; + private boolean debugEnabled = false; + + private Map counterMapping = new HashMap(); + private String objTypeBase = TG; + private List objTypeAppendTags = new ArrayList(); + private String objNameBase = TG; + private List objNameAppendTags = new ArrayList(); + private String hostTag; + private Map hostMapping = new HashMap(); + private Map> tagFilter = new HashMap>(); + + public TgMeasurementConfig(String measurement) { + this.measurement = measurement; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public boolean isDebugEnabled() { + return debugEnabled; + } + + public void setDebugEnabled(boolean debugEnabled) { + this.debugEnabled = debugEnabled; + } + + public Map getCounterMapping() { + return counterMapping; + } + + public void setCounterMapping(Map counterMapping) { + this.counterMapping = counterMapping; + } + + public String getObjTypeBase() { + return objTypeBase; + } + + public void setObjTypeBase(String objTypeBase) { + this.objTypeBase = TG + objTypeBase; + } + + public List getObjTypeAppendTags() { + return objTypeAppendTags; + } + + public void setObjTypeAppendTags(List objTypeAppendTags) { + this.objTypeAppendTags = objTypeAppendTags; + } + + public String getObjNameBase() { + return objNameBase; + } + + public void setObjNameBase(String objNameBase) { + this.objNameBase = TG + objNameBase; + } + + public List getObjNameAppendTags() { + return objNameAppendTags; + } + + public void setObjNameAppendTags(List objNameAppendTags) { + this.objNameAppendTags = objNameAppendTags; + } + + public String getHostTag() { + return hostTag; + } + + public void setHostTag(String hostTag) { + this.hostTag = hostTag; + } + + public Map getHostMapping() { + return hostMapping; + } + + public void setHostMapping(Map hostMapping) { + this.hostMapping = hostMapping; + } + + public static String getPrefix() { + return TG; + } + + public Map> getTagFilter() { + return tagFilter; + } + + public void setTagFilter(Map> tagFilter) { + this.tagFilter = tagFilter; + } + + public String toObjType(Map tags) { + StringBuilder objTypeSb = new StringBuilder(objTypeBase); + for (String tagKey : objTypeAppendTags) { + objTypeSb.append('_').append(tags.get(tagKey)); + } + return objTypeSb.toString(); + } + + public String toHost(Map tags) { + String host = tags.get(hostTag); + if (host == null) { + host = "unknown"; + } else { + String mappedHost = hostMapping.get(host); + if (mappedHost != null) { + host = mappedHost; + } + } + return host; + } + + public String toObjName(String host, Map tags) { + StringBuilder objNameSb = new StringBuilder(40).append('/').append(host).append('/').append(objNameBase); + for (String tagKey : objNameAppendTags) { + objNameSb.append('_').append(tags.get(tagKey)); + } + return objNameSb.toString(); + } + + public CounterProtocol getCounterProtocol(String counterName) { + return counterMapping.get(counterName); + } + public boolean isTagFilterMatching(Map tags) { + if (tagFilter == null || tagFilter.size() == 0) { + return true; + } + + boolean matching = false; + for (Map.Entry> e : tagFilter.entrySet()) { + List matchStrList = e.getValue(); + for (String matchStr : matchStrList) { + boolean not = false; + if (matchStr.charAt(0) == '!') { + not = true; + matchStr = matchStr.substring(1); + } + String value = tags.get(e.getKey()); + if (not) { + if (!matchStr.equals(value)) { + matching = true; + break; + } + } else { + if (matchStr.equals(value)) { + matching = true; + break; + } + } + } + if (matching) { + break; + } + } + return matching; + } +} diff --git a/scouter.server/src/main/java/scouter/server/http/HttpServer.java b/scouter.server/src/main/java/scouter/server/http/HttpServer.java index 7f1cbc626..0a6aa5efe 100644 --- a/scouter.server/src/main/java/scouter/server/http/HttpServer.java +++ b/scouter.server/src/main/java/scouter/server/http/HttpServer.java @@ -28,8 +28,11 @@ import scouter.server.Logger; import scouter.server.http.servlet.CounterServlet; import scouter.server.http.servlet.RegisterServlet; +import scouter.server.http.servlet.TelegrafInputServlet; +import scouter.util.StringUtil; import scouter.util.ThreadUtil; +import javax.servlet.http.HttpServletRequest; import java.util.TimeZone; public class HttpServer extends Thread { @@ -50,7 +53,6 @@ public static HttpServer load() { return instance; } - @Override public void run() { Configure conf = Configure.getInstance(); @@ -93,6 +95,7 @@ public void run() { } context.addServlet(new ServletHolder(CounterServlet.class), "/counter/*"); context.addServlet(new ServletHolder(RegisterServlet.class), "/register/*"); + context.addServlet(new ServletHolder(TelegrafInputServlet.class), "/telegraf/*"); if (conf.net_http_api_gzip_enabled) { GzipHandler gzipHandler = new GzipHandler(); @@ -127,4 +130,17 @@ public void run() { } } + public static String getRemoteAddr(HttpServletRequest request) { + String ip = request.getHeader("X-FORWARDED-FOR"); + if (ip == null) { + return request.getRemoteAddr(); + } else { + String[] ips = StringUtil.split(ip, ','); + if (ips.length > 0) { + return ips[0]; + } else { + return request.getRemoteAddr(); + } + } + } } diff --git a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java index f95a42cba..a985f8100 100644 --- a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java +++ b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java @@ -18,20 +18,28 @@ package scouter.server.http.handler; +import scouter.io.DataOutputX; import scouter.lang.Counter; import scouter.lang.Family; import scouter.lang.ObjectType; +import scouter.lang.pack.Pack; import scouter.lang.value.NumberValue; +import scouter.net.NetCafe; import scouter.server.Configure; import scouter.server.CounterManager; import scouter.server.Logger; +import scouter.server.http.HttpServer; +import scouter.server.http.model.CounterProtocol; import scouter.server.http.model.InfluxSingleLine; +import scouter.server.netio.data.NetDataProcessor; +import scouter.util.IPUtil; import scouter.util.RequestQueue; import scouter.util.ThreadUtil; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.net.InetAddress; import java.util.HashMap; import java.util.Map; @@ -90,52 +98,86 @@ public void run() { } public void handlerRequest(HttpServletRequest request, HttpServletResponse response) throws IOException { + if (!configure.input_telegraf_enabled) { + return; + } - //TODO counter를 가지고 일정 수 이상이 누적되면 204 응답하자. 204일때 telegraf 에서 어떻게 처리하는지를 확인해 봐야한다. 재전송 안하는지... long receivedTime = System.currentTimeMillis(); Map uniqueLineString = new HashMap(); int lineCount = 0; + boolean earlyResponse = false; while (true) { - if (lineCount++ > 500) { - //TODO 응답 주고 끝내자. + if (lineCount++ > 200) { + earlyResponse = true; + break; } - String lineString = request.getReader().readLine(); if (lineString == null) { break; } + if (configure.input_telegraf_debug_enabled) { + Logger.println("TG002", "[line protocol received] " + lineString); + } uniqueLineString.put(InfluxSingleLine.toLineStringKey(lineString), lineString); } + if (earlyResponse) { + Logger.println("TG010", "Too many line protocol in payload. fast return working."); + return; + } + for (Map.Entry lineStringEntry : uniqueLineString.entrySet()) { InfluxSingleLine line = InfluxSingleLine.of(lineStringEntry.getValue(), configure, receivedTime); + if (configure.input_telegraf_debug_enabled) { + Logger.println("TG003", "[line protocol] " + lineStringEntry.getValue() + " [line parsed] " + line); + + } else if (line != null && line.isDebug()) { + Logger.println("TG004", "[line protocol] " + lineStringEntry.getValue() + " [line parsed] " + line); + } + if (line == null) { continue; } + count(line, HttpServer.getRemoteAddr(request)); } } - protected void count(InfluxSingleLine line) { + protected void count(InfluxSingleLine line, String remoteAddress) throws IOException { ObjectType objectType = counterManager.getCounterEngine().getObjectType(line.getObjType()); if (objectType == null) { registerNewObjType(line); return; } - Map numberFields = line.getNumberFields(); - boolean dirty = false; - for (Counter counter : numberFields.keySet()) { - Counter counterInternal = objectType.getCounter(counter.getName()); + if (hasNewCounterThenRegister(objectType, line)) { + return; + } + + InetAddress address = InetAddress.getByAddress(IPUtil.toBytes(remoteAddress)); + NetDataProcessor.add(line.toObjectPack(remoteAddress, configure.telegraf_object_deadtime_ms), address); + NetDataProcessor.add(line.toPerfCounterPack(), address); + } + + private boolean hasNewCounterThenRegister(ObjectType objectType, InfluxSingleLine line) { + Map numberFields = line.getNumberFields(); + boolean hasNew = false; + + for (CounterProtocol counterProtocol : numberFields.keySet()) { + Counter counterInternal = objectType.getCounter(counterProtocol.getTaggingName(line.getTags())); if (counterInternal == null) { - dirty = true; - addCounter(objectType, counter); + hasNew = true; + addCounter(objectType, counterProtocol.toNormalCounter(line.getTags())); continue; } } - if (dirty) { - return; - } - //TODO counter action + return hasNew; + } + + private static void passToNetDataProcessor(Pack pack, InetAddress addr) throws IOException { + DataOutputX out = new DataOutputX(); + out.write(NetCafe.CAFE); + out.write(new DataOutputX().writePack(pack).toByteArray()); + NetDataProcessor.add(out.toByteArray(), addr); } private void registerNewObjType(InfluxSingleLine line) { @@ -163,9 +205,10 @@ private void registerNewObjType0(InfluxSingleLine line) { objectType.setFamily(family); family.setName(objTypeName); - Map numberFields = line.getNumberFields(); + Map numberFields = line.getNumberFields(); boolean firstCounter = true; - for (Counter counter : numberFields.keySet()) { + for (CounterProtocol counterProtocol : numberFields.keySet()) { + Counter counter = counterProtocol.toNormalCounter(line.getTags()); family.addCounter(counter); if (firstCounter) { family.setMaster(counter.getName()); diff --git a/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java b/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java new file mode 100644 index 000000000..e365af6ef --- /dev/null +++ b/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java @@ -0,0 +1,136 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.server.http.model; + +import scouter.lang.Counter; +import scouter.util.StringUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +//TODO test case +public class CounterProtocol extends Counter { + private List nameTags = new ArrayList(); + private List displayNameTags = new ArrayList(); + + public CounterProtocol() {} + + public CounterProtocol(String name) { + super(name); + } + + //TODO test case + public void setName(String nameWithTag) { + char[] chars = nameWithTag.toCharArray(); + StringBuilder nameBuilder = new StringBuilder(chars.length); + StringBuilder tagBuilder = new StringBuilder(chars.length); + boolean sink = false; + for (char c : chars) { + switch (c) { + case '$': + sink = !sink; + if (!sink) { + nameBuilder.append('*'); + tagBuilder.append('*'); + } + break; + default : + if (!sink) { + nameBuilder.append(c); + } else { + tagBuilder.append(c); + } + } + } + String name = nameBuilder.toString(); + super.setName(name); + if (tagBuilder.length() > 0) { + this.nameTags = StringUtil.splitAsList(tagBuilder.toString(), '*'); + } + } + + //TODO test case + public void setDisplayName(String displayNameWithTag) { + char[] chars = displayNameWithTag.toCharArray(); + StringBuilder nameBuilder = new StringBuilder(chars.length); + StringBuilder tagBuilder = new StringBuilder(chars.length); + boolean sink = false; + for (char c : chars) { + switch (c) { + case '$': + sink = !sink; + if (!sink) { + nameBuilder.append('*'); + tagBuilder.append('*'); + } + break; + default : + if (!sink) { + nameBuilder.append(c); + } else { + tagBuilder.append(c); + } + } + } + String displayName = nameBuilder.toString(); + super.setDisplayName(displayName); + if (tagBuilder.length() > 0) { + this.displayNameTags = StringUtil.splitAsList(tagBuilder.toString(), '*'); + } + } + + public String getTaggingName(Map tagMap) { + return makeValueWithTag(this.getName(), this.nameTags, tagMap); + } + + public String getTaggingDisplayName(Map tagMap) { + return makeValueWithTag(this.getDisplayName(), this.displayNameTags, tagMap); + } + + private String makeValueWithTag(String name, List tags, Map tagMap) { + if (tags == null || tags.size() == 0) { + return name; + } + if (name.indexOf('*') < 0) { + return name; + } + StringBuilder sb = new StringBuilder(name.length()); + int tagCounter = 0; + for (char c : name.toCharArray()) { + switch (c) { + case '*': + sb.append(tagMap.get(tags.get(tagCounter++))); + break; + default : + sb.append(c); + } + } + return sb.toString(); + } + + //TODO test case + public Counter toNormalCounter(Map tagMap) { + Counter normalCounter = this.clone(); + normalCounter.setName(makeValueWithTag(this.getName(), this.nameTags, tagMap)); + normalCounter.setDisplayName(makeValueWithTag(this.getDisplayName(), this.displayNameTags, tagMap)); + + return normalCounter; + } +} \ No newline at end of file diff --git a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java index 23f6bcc13..d8f4b43f4 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java +++ b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java @@ -18,12 +18,16 @@ package scouter.server.http.model; -import scouter.lang.Counter; +import scouter.lang.TimeTypeEnum; +import scouter.lang.pack.ObjectPack; +import scouter.lang.pack.PerfCounterPack; import scouter.lang.value.DecimalValue; import scouter.lang.value.FloatValue; +import scouter.lang.value.MapValue; import scouter.lang.value.NumberValue; import scouter.server.Configure; -import scouter.server.TelegrafMasurementConfig; +import scouter.server.Logger; +import scouter.server.TgMeasurementConfig; import scouter.util.HashUtil; import java.util.HashMap; @@ -33,71 +37,58 @@ * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. */ public class InfluxSingleLine { - private String measuement; + private String measurement; private String host; private String objType; private String objName; private int objHash; long receivedTime; long timestampOrigin; + boolean debug; Map tags; - Map numberFields = new HashMap(); + Map numberFields = new HashMap(); - private InfluxSingleLine(TelegrafMasurementConfig tConfig, - String measuement, + private InfluxSingleLine(TgMeasurementConfig tConfig, + String measurement, Map tags, Map fields, long receivedTime, - long timestampOrigin) { + long timestampOrigin, + boolean debug) { - this.measuement = measuement; + this.measurement = measurement; this.tags = tags; this.receivedTime = receivedTime; this.timestampOrigin = timestampOrigin; + this.host = tConfig.toHost(tags); + this.objType = tConfig.toObjType(tags); + this.objName = tConfig.toObjName(host, tags); + this.objHash = HashUtil.hash(objName); + this.debug = debug; - this.host = tags.get(tConfig.getHostTag()); - if (this.host == null) { - this.host = "unknown"; - } else { - String mappedHost = tConfig.getHostMapping().get(this.host); - if (mappedHost != null) { - this.host = mappedHost; - } + for (Map.Entry field : fields.entrySet()) { + addNumField(tConfig, field); } + } - StringBuilder objTypeSb = new StringBuilder(tConfig.getObjTypeBase()); - for (String tagKey : tConfig.getObjTypeAppendTags()) { - objTypeSb.append('_').append(tags.get(tagKey)); + private void addNumField(TgMeasurementConfig tConfig, Map.Entry field) { + CounterProtocol counterProtocol = tConfig.getCounterProtocol(field.getKey()); + if (counterProtocol == null) { + return; } - this.objType = objTypeSb.toString(); - StringBuilder objNamSb = new StringBuilder(40).append('/').append(host).append('/').append(tConfig.getObjNameBase()); - for (String tagKey : tConfig.getObjNameAppendTags()) { - objNamSb.append('_').append(tags.get(tagKey)); - } - this.objName = objNamSb.toString(); - this.objHash = HashUtil.hash(objName); + String valueStr = field.getValue(); + char lastChar = valueStr.charAt(valueStr.length() - 1); - Map counterMapping = tConfig.getCounterMapping(); - for (Map.Entry field : fields.entrySet()) { - Counter counter = counterMapping.get(field.getKey()); - if (counter == null) { - continue; - } - String valueStr = field.getValue(); - int valueLen = valueStr.length(); - char lastChar = valueStr.charAt(valueLen - 1); - - if (lastChar == 'i') { //long - long value = Long.parseLong(valueStr.substring(0, valueLen - 1)); - numberFields.put(counter, new DecimalValue(value)); - } else if (lastChar >= '0' && lastChar <= '9') { //float - numberFields.put(counter, new FloatValue(Float.parseFloat(valueStr))); - } else { - //skip - boolean or string - continue; - } + if (lastChar == 'i') { //long + long value = Long.parseLong(valueStr.substring(0, valueStr.length() - 1)); + numberFields.put(counterProtocol, new DecimalValue(value)); + } else if (lastChar >= '0' && lastChar <= '9') { //float + numberFields.put(counterProtocol, new FloatValue(Float.parseFloat(valueStr))); + } else { + //skip - boolean or string + return; } } @@ -208,16 +199,16 @@ public static InfluxSingleLine of(String lineStr, Configure configure, long rece } break; case '=': - tagKeyMode = false; + fieldKeyMode = false; break; case ',': - tagKeyMode = true; + fieldKeyMode = true; fields.put(fieldKeySb.toString(), fieldValueSb.toString()); fieldKeySb = new StringBuilder(); fieldValueSb = new StringBuilder(); break; default: - if (tagKeyMode) { + if (fieldKeyMode) { fieldKeySb.append(c); } else { fieldValueSb.append(c); @@ -232,25 +223,31 @@ public static InfluxSingleLine of(String lineStr, Configure configure, long rece } String measurement = measurementSb.toString(); - TelegrafMasurementConfig tConfig = configure.telegrafInputConfigMap.get(measurement); + TgMeasurementConfig tConfig = configure.telegrafInputConfigMap.get(measurement); + if (tConfig == null) { return null; } + if (!configure.input_telegraf_debug_enabled && tConfig.isDebugEnabled()) { + Logger.println("TG006", "[line protocol received] " + lineStr); + } if (!tConfig.isEnabled()) { return null; } - + if (!tConfig.isTagFilterMatching(tags)) { + return null; + } try { - return new InfluxSingleLine(tConfig, measurement, tags, fields, receivedTime, Long.parseLong(timestampSb.toString())); + return new InfluxSingleLine(tConfig, measurement, tags, fields, receivedTime, Long.parseLong(timestampSb.toString()), tConfig.isDebugEnabled()); } catch (Throwable t) { t.printStackTrace(); return null; } } - public String getMeasuement() { - return measuement; + public String getMeasurement() { + return measurement; } public String getHost() { @@ -281,7 +278,50 @@ public Map getTags() { return tags; } - public Map getNumberFields() { + public Map getNumberFields() { return numberFields; } + + public boolean isDebug() { + return debug; + } + + public ObjectPack toObjectPack(String address, int deadTime) { + ObjectPack objPack = new ObjectPack(); + objPack.objHash = this.objHash; + objPack.objName = this.objName; + objPack.objType = this.objType; + objPack.address = address; + MapValue tagMap = new MapValue(); + tagMap.put(ObjectPack.TAG_KEY_DEAD_TIME, deadTime); + objPack.tags = tagMap; + + return objPack; + } + + public PerfCounterPack toPerfCounterPack() { + PerfCounterPack perfPack = new PerfCounterPack(); + perfPack.time = this.receivedTime; + perfPack.timetype = TimeTypeEnum.REALTIME; + perfPack.objName = this.objName; + for (Map.Entry counterValueEntry : numberFields.entrySet()) { + perfPack.data.put(counterValueEntry.getKey().getTaggingName(tags), counterValueEntry.getValue()); + } + return perfPack; + } + + @Override + public String toString() { + return "InfluxSingleLine{" + + "measurement='" + measurement + '\'' + + ", host='" + host + '\'' + + ", objType='" + objType + '\'' + + ", objName='" + objName + '\'' + + ", objHash=" + objHash + + ", receivedTime=" + receivedTime + + ", timestampOrigin=" + timestampOrigin + + ", tags=" + tags + + ", numberFields=" + numberFields + + '}'; + } } diff --git a/scouter.server/src/main/java/scouter/server/http/servlet/TelegrafInputServlet.java b/scouter.server/src/main/java/scouter/server/http/servlet/TelegrafInputServlet.java new file mode 100644 index 000000000..669791f56 --- /dev/null +++ b/scouter.server/src/main/java/scouter/server/http/servlet/TelegrafInputServlet.java @@ -0,0 +1,37 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package scouter.server.http.servlet; + +import scouter.server.http.handler.TelegrafInputHandler; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class TelegrafInputServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + private static TelegrafInputHandler handler = TelegrafInputHandler.getInstance(); + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException { + handler.handlerRequest(req, res); + } + +} diff --git a/scouter.server/src/main/scala/scouter/server/core/AgentManager.scala b/scouter.server/src/main/scala/scouter/server/core/AgentManager.scala index d45f1ab73..0efca9fb0 100644 --- a/scouter.server/src/main/scala/scouter/server/core/AgentManager.scala +++ b/scouter.server/src/main/scala/scouter/server/core/AgentManager.scala @@ -47,7 +47,8 @@ object AgentManager { while (en.hasMoreElements()) { val objPack = en.nextElement(); if(!CounterConstants.BATCH.equals(objPack.objType)){ - if (now > objPack.wakeup + deadtime) { + var adjustDeadTime = if (objPack.getDeadTime() == 0) deadtime else objPack.getDeadTime(); + if (now > objPack.wakeup + adjustDeadTime) { inactive(objPack.objHash); } else if (counterEngine.isPrimaryObject(objPack.objType)) { primaryObjCount += 1; @@ -81,7 +82,7 @@ object AgentManager { ObjectWR.add(objPack); Logger.println("S104", "New " + objPack); } else { - if(!objPack.alive && counterEngine.isPrimaryObject(objPack.objType)) { + if (!objPack.alive && counterEngine.isPrimaryObject(objPack.objType)) { alertReactiveObject(objPack); } @@ -92,6 +93,7 @@ object AgentManager { } objPack.wakeup(); objPack.tags = p.tags; + if (CompareUtil.equals(p.address, objPack.address) == false) { save = true; } diff --git a/scouter.server/src/main/scala/scouter/server/netio/data/NetDataProcessor.scala b/scouter.server/src/main/scala/scouter/server/netio/data/NetDataProcessor.scala index e4d672f3e..67255190b 100644 --- a/scouter.server/src/main/scala/scouter/server/netio/data/NetDataProcessor.scala +++ b/scouter.server/src/main/scala/scouter/server/netio/data/NetDataProcessor.scala @@ -16,9 +16,10 @@ * */ package scouter.server.netio.data +import java.io.IOException import java.net.InetAddress -import scouter.io.DataInputX +import scouter.io.{DataInputX, DataOutputX} import scouter.lang.{TextTypes, TimeTypeEnum} import scouter.lang.counters.CounterConstants import scouter.lang.pack.AlertPack @@ -72,12 +73,22 @@ object NetDataProcessor { } val queue = new RequestQueue[NetData](2048) val conf = Configure.getInstance() + def add(data: Array[Byte], addr: InetAddress) { val ok = queue.putNotifySingle(new NetData(data, addr)) if (ok == false) { Logger.println("S158", 10, "overflow recv queue!!") } } + + @throws[IOException] + def add(pack: Pack, addr: InetAddress): Unit = { + val out = new DataOutputX + out.write(NetCafe.CAFE) + out.write(new DataOutputX().writePack(pack).toByteArray) + add(out.toByteArray, addr) + } + def process(p: NetData) { try { val in = new DataInputX(p.data) diff --git a/scouter.server/src/test/java/scouter/server/ConfigureTest.java b/scouter.server/src/test/java/scouter/server/ConfigureTest.java index d9f822c2c..762ec0dfe 100644 --- a/scouter.server/src/test/java/scouter/server/ConfigureTest.java +++ b/scouter.server/src/test/java/scouter/server/ConfigureTest.java @@ -42,13 +42,13 @@ public void applyTelegrafInputConfig() { System.setProperty("input_telegraf_$xpu_space$_host_tag", "tg_host"); System.setProperty("input_telegraf_$xpu_space$_host_mappings", "h1:Sh1,h2:Sh2"); - Map configMap = Configure.getInstance().telegrafInputConfigMap; - TelegrafMasurementConfig tConfig = configMap.get("xpu_space"); + Map configMap = Configure.getInstance().telegrafInputConfigMap; + TgMeasurementConfig tConfig = configMap.get("xpu_space"); Assert.assertEquals(tConfig.isEnabled(), true); Assert.assertEquals(tConfig.isDebugEnabled(), true); - Assert.assertEquals(tConfig.getObjTypeBase(), System.getProperty("input_telegraf_$xpu_space$_objType_base")); - Assert.assertEquals(tConfig.getObjNameBase(), System.getProperty("input_telegraf_$xpu_space$_objName_base")); + Assert.assertEquals(tConfig.getObjTypeBase(), TgMeasurementConfig.getPrefix() + System.getProperty("input_telegraf_$xpu_space$_objType_base")); + Assert.assertEquals(tConfig.getObjNameBase(), TgMeasurementConfig.getPrefix() + System.getProperty("input_telegraf_$xpu_space$_objName_base")); Assert.assertEquals(tConfig.getHostTag(), System.getProperty("input_telegraf_$xpu_space$_host_tag")); Counter xpu1Counter = tConfig.getCounterMapping().get("xpu1"); diff --git a/scouter.server/src/test/java/scouter/server/http/handler/TelegrafInputHandlerTest.java b/scouter.server/src/test/java/scouter/server/http/handler/TelegrafInputHandlerTest.java index 41df97b54..3f74cbd18 100644 --- a/scouter.server/src/test/java/scouter/server/http/handler/TelegrafInputHandlerTest.java +++ b/scouter.server/src/test/java/scouter/server/http/handler/TelegrafInputHandlerTest.java @@ -19,10 +19,13 @@ package scouter.server.http.handler; import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Test; import scouter.server.Configure; import scouter.server.http.model.InfluxSingleLine; +import java.io.IOException; + /** * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 24. */ @@ -34,12 +37,24 @@ public static void beforeClass() { System.setProperty("input_telegraf_$mem$_enabled", "true"); System.setProperty("input_telegraf_$mem$_debug_enabled", "true"); System.setProperty("input_telegraf_$mem$_counter_mappings", "used:tg-used,free:tg-free:memory-free::false,available_percent:tg-mem-pct:memory percent:%:false"); - System.setProperty("input_telegraf_$mem$_objType_base", "MEM"); + System.setProperty("input_telegraf_$mem$_objType_base", "HOST-METRIC"); //System.setProperty("input_telegraf_$mem$_objType_append_tags", ""); - System.setProperty("input_telegraf_$mem$_objName_base", "tg"); - System.setProperty("input_telegraf_$mem$_objName_append_tags", "region"); + System.setProperty("input_telegraf_$mem$_objName_base", "HOST-METRIC"); + //System.setProperty("input_telegraf_$mem$_objName_append_tags", "region"); System.setProperty("input_telegraf_$mem$_host_tag", "host"); //System.setProperty("input_telegraf_$mem$_host_mappings", "h1:Sh1,h2:Sh2"); + + System.setProperty("input_telegraf_$cpu$_enabled", "true"); + System.setProperty("input_telegraf_$cpu$_debug_enabled", "true"); + System.setProperty("input_telegraf_$cpu$_counter_mappings", "usage_user:tg-$cpu$-user:$cpu$ user:%:false,usage_system:tg-$cpu$-sys:$cpu$ sys:%:false"); + System.setProperty("input_telegraf_$cpu$_objType_base", "HOST-METRIC"); + //System.setProperty("input_telegraf_$mem$_objType_append_tags", ""); + System.setProperty("input_telegraf_$cpu$_objName_base", "HOST-METRIC"); + //System.setProperty("input_telegraf_$cpu$_objName_append_tags", "region"); + System.setProperty("input_telegraf_$cpu$_host_tag", "host"); + //System.setProperty("input_telegraf_$mem$_host_mappings", "h1:Sh1,h2:Sh2"); + + System.setProperty("input_telegraf_$cpu$_tag_matching", "cpu:cpu-total,cpu:cpu2"); } /** @@ -47,10 +62,11 @@ public static void beforeClass() { * @throws InterruptedException */ @Test - public void count_new_family_and_objType_is_added() throws InterruptedException { + @Ignore + public void count_new_family_and_objType_is_added() throws InterruptedException, IOException { String metric = "mem,host=GunMac.skbroadband,region=seoul used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i,slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i,active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521 1532269780000000000"; InfluxSingleLine line = InfluxSingleLine.of(metric, Configure.getInstance(), System.currentTimeMillis()); - TelegrafInputHandler.getInstance().count(line); + TelegrafInputHandler.getInstance().count(line, "127.0.0.1"); Thread.sleep(300000); } @@ -59,12 +75,23 @@ public void count_new_family_and_objType_is_added() throws InterruptedException * @throws InterruptedException */ @Test - public void count_new_counter_is_added() throws InterruptedException { + @Ignore + public void count_new_counter_is_added() throws InterruptedException, IOException { System.setProperty("input_telegraf_$mem$_counter_mappings", "used:tg-used,free:tg-free:memory-free::false,available_percent:tg-mem-pct:memory percent:%:false,inactive:tg-mem-inactive:mem inactive:ea:false"); String metric = "mem,host=GunMac.skbroadband,region=seoul used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i,slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i,active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521 1532269780000000000"; InfluxSingleLine line = InfluxSingleLine.of(metric, Configure.getInstance(), System.currentTimeMillis()); - TelegrafInputHandler.getInstance().count(line); + TelegrafInputHandler.getInstance().count(line, "127.0.0.1"); Thread.sleep(300000); } + + @Test + @Ignore + public void count_new_family_and_objType_is_added_cpu() throws InterruptedException, IOException { + String metric = "cpu,cpu=cpu-total,host=GunMac.local usage_user=21.58920539730135,usage_idle=70.56471764117941,usage_softirq=0,usage_guest=0,usage_system=7.84607696151924,usage_nice=0,usage_iowait=0,usage_irq=0,usage_steal=0,usage_guest_nice=0 1532698532000000000"; + InfluxSingleLine line = InfluxSingleLine.of(metric, Configure.getInstance(), System.currentTimeMillis()); + TelegrafInputHandler.getInstance().count(line, "127.0.0.1"); + Thread.sleep(300000); + } + } \ No newline at end of file diff --git a/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java b/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java index b6f16bf4c..9d3e3f1f7 100644 --- a/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java +++ b/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java @@ -18,29 +18,232 @@ package scouter.server.http.model; +import org.junit.Ignore; import org.junit.Test; +import scouter.lang.Counter; import scouter.server.Configure; +import scouter.server.TgMeasurementConfig; -import static org.junit.Assert.*; +import static junit.framework.TestCase.assertNotNull; +import static junit.framework.TestCase.assertNull; +import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.assertEquals; /** * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. */ public class InfluxSingleLineTest { -// mem,host=GunMac.skbroadband used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i,slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i,active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521 1532269780000000000 -// cpu,cpu=cpu0,host=GunMac.skbroadband usage_user=23.923923923923923,usage_idle=64.46446446446447,usage_iowait=0,usage_irq=0,usage_softirq=0,usage_guest=0,usage_system=11.611611611611611,usage_nice=0,usage_steal=0,usage_guest_nice=0 1532269780000000000 -// cpu,cpu=cpu1,host=GunMac.skbroadband usage_nice=0,usage_irq=0,usage_user=12.574850299401197,usage_system=5.289421157684631,usage_idle=82.13572854291417,usage_guest=0,usage_guest_nice=0,usage_iowait=0,usage_softirq=0,usage_steal=0 1532269780000000000 -// cpu,cpu=cpu2,host=GunMac.skbroadband usage_system=9.3,usage_iowait=0,usage_softirq=0,usage_guest=0,usage_guest_nice=0,usage_user=24.4,usage_idle=66.3,usage_nice=0,usage_irq=0,usage_steal=0 1532269780000000000 -// cpu,cpu=cpu3,host=GunMac.skbroadband usage_guest_nice=0,usage_user=12.387612387612387,usage_idle=82.51748251748252,usage_iowait=0,usage_guest=0,usage_steal=0,usage_system=5.094905094905095,usage_nice=0,usage_irq=0,usage_softirq=0 1532269780000000000 -// cpu,cpu=cpu-total,host=GunMac.skbroadband usage_user=18.315842078960518,usage_iowait=0,usage_irq=0,usage_softirq=0,usage_guest=0,usage_system=7.8210894552723635,usage_idle=73.86306846576711,usage_nice=0,usage_steal=0,usage_guest_nice=0 1532269780000000000 +// mem,host=vm0.us,os=aix,key=memory1 used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i,slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i,active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521 1532269780000000000 +// cpu,cpu=cpu0,host=vm0.us usage_user=23.923923923923923,usage_idle=64.46446446446447,usage_iowait=0,usage_irq=0,usage_softirq=0,usage_guest=0,usage_system=11.611611611611611,usage_nice=0,usage_steal=0,usage_guest_nice=0 1532269780000000000 +// cpu,cpu=cpu1,host=vm0.us usage_nice=0,usage_irq=0,usage_user=12.574850299401197,usage_system=5.289421157684631,usage_idle=82.13572854291417,usage_guest=0,usage_guest_nice=0,usage_iowait=0,usage_softirq=0,usage_steal=0 1532269780000000000 +// cpu,cpu=cpu2,host=vm0.us usage_system=9.3,usage_iowait=0,usage_softirq=0,usage_guest=0,usage_guest_nice=0,usage_user=24.4,usage_idle=66.3,usage_nice=0,usage_irq=0,usage_steal=0 1532269780000000000 +// cpu,cpu=cpu3,host=vm0.us usage_guest_nice=0,usage_user=12.387612387612387,usage_idle=82.51748251748252,usage_iowait=0,usage_guest=0,usage_steal=0,usage_system=5.094905094905095,usage_nice=0,usage_irq=0,usage_softirq=0 1532269780000000000 +// cpu,cpu=cpu-total,host=vm0.us usage_user=18.315842078960518,usage_iowait=0,usage_irq=0,usage_softirq=0,usage_guest=0,usage_system=7.8210894552723635,usage_idle=73.86306846576711,usage_nice=0,usage_steal=0,usage_guest_nice=0 1532269780000000000 @Test public void of_test() { InfluxSingleLine.of("mem,host=GunMac.skbroadband,region=seoul used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i,slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i,active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521 1532269780000000000", Configure.getInstance(), System.currentTimeMillis()); } + //System.setProperty("input_telegraf_$cpu$_counter_mappings", "usage_user:tg-cpu-user:user cpu:%:false,usage_system:tg-cpu-sys:sys cpu:%:false"); @Test + public void of_test_InfluxSingleLine_can_parse_line_protocol_normal_case() { + System.setProperty("input_telegraf_$mem$_counter_mappings" + , "used:tg-mem-used" + + ",free:tg-mem-free:memory free::false" + + ",available_percent:tg-mem-free-pct:memory percent:%:false"); + System.setProperty("input_telegraf_$mem$_objType_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$mem$_objName_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$mem$_host_tag", "host"); + Configure.newInstanceForTestCase(); + + String protocol = "mem,host=vm0.us,os=aix,key=memory1" + + " used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i" + + ",slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i" + + ",active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521" + + " 1532269780000000000"; + + InfluxSingleLine line = InfluxSingleLine.of(protocol, Configure.getInstance(), System.currentTimeMillis()); + + assertEquals(TgMeasurementConfig.getPrefix() + "HOST-METRIC", line.getObjType()); + assertEquals("vm0.us", line.getHost()); + assertEquals("/" + line.getHost() + "/" + TgMeasurementConfig.getPrefix() + "HOST-METRIC", line.getObjName()); + assertTrue(line.getNumberFields().keySet().contains(new CounterProtocol("tg-mem-used"))); + assertTrue(line.getNumberFields().keySet().contains(new CounterProtocol("tg-mem-free"))); + assertTrue(line.getNumberFields().keySet().contains(new CounterProtocol("tg-mem-free-pct"))); + + for (Counter counter : line.getNumberFields().keySet()) { + if (counter.getName().equals("tg-mem-used")) { + assertEquals(true, counter.isTotal()); + assertEquals(line.getNumberFields().get(counter).longValue(), 11656097792L); + } else if (counter.getName().equals("tg-mem-free")) { + assertEquals("memory free", counter.getDisplayName()); + assertEquals("", counter.getUnit()); + assertEquals(false, counter.isTotal()); + assertEquals(line.getNumberFields().get(counter).longValue(), 1467994112L); + } else if (counter.getName().equals("tg-mem-free-pct")) { + assertEquals("memory percent", counter.getDisplayName()); + assertEquals("%", counter.getUnit()); + assertEquals(false, counter.isTotal()); + assertEquals(line.getNumberFields().get(counter).floatValue(), 32.152581214904785f, 0.0001); + } + } + } + + @Test + public void of_test_InfluxSingleLine_can_parse_line_protocol_tagged_type_and_name_case() { + System.setProperty("input_telegraf_$mem$_counter_mappings" + , "used:tg-mem-used" + + ",free:tg-mem-free:memory free::false" + + ",available_percent:tg-mem-free-pct:memory percent:%:false"); + System.setProperty("input_telegraf_$mem$_objType_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$mem$_objType_append_tags", "os"); + System.setProperty("input_telegraf_$mem$_objName_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$mem$_objName_append_tags", "key"); + System.setProperty("input_telegraf_$mem$_host_tag", "host"); + System.setProperty("input_telegraf_$mem$_host_mappings", "vm1.us:myvm01,vm0.us:myvm0"); + Configure.newInstanceForTestCase(); + + String protocol = "mem,host=vm0.us,os=aix,key=memory1" + + " used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i" + + ",slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i" + + ",active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521" + + " 1532269780000000000"; + + InfluxSingleLine line = InfluxSingleLine.of(protocol, Configure.getInstance(), System.currentTimeMillis()); + + assertEquals(TgMeasurementConfig.getPrefix() + "HOST-METRIC_aix", line.getObjType()); + assertEquals("myvm0", line.getHost()); + assertEquals("/" + line.getHost() + "/" + TgMeasurementConfig.getPrefix() + "HOST-METRIC_memory1", line.getObjName()); + } + + @Test + public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tagged_counter() { + Configure.newInstanceForTestCase(); + System.setProperty("input_telegraf_$cpu$_counter_mappings" + , "usage_user:tg-$cpu$-user:$cpu$ user:%:false" + + ",usage_system:tg-$cpu$-sys:$cpu$ sys:%:false"); + System.setProperty("input_telegraf_$cpu$_objType_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$cpu$_objName_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$cpu$_host_tag", "host"); + Configure.newInstanceForTestCase(); + + String protocol = "cpu,cpu=cpu-total,host=vm0.us" + + " usage_user=18.315842078960518,usage_iowait=0,usage_irq=0,usage_softirq=0" + + ",usage_guest=0,usage_system=7.8210894552723635,usage_idle=73.86306846576711" + + ",usage_nice=0,usage_steal=0,usage_guest_nice=0" + + " 1532269780000000000"; + InfluxSingleLine line = InfluxSingleLine.of(protocol, Configure.getInstance(), System.currentTimeMillis()); + + assertTrue(line.getNumberFields().keySet().contains(new CounterProtocol("tg-*-user"))); + assertTrue(line.getNumberFields().keySet().contains(new CounterProtocol("tg-*-sys"))); +// assertTrue(line.getNumberFields().keySet().contains(new CounterProtocol("tg-cpu-total-user"))); +// assertTrue(line.getNumberFields().keySet().contains(new CounterProtocol("tg-cpu-total-sys"))); + + for (Counter counter : line.getNumberFields().keySet()) { + if (counter.getName().equals("tg-cpu-total-user")) { + assertEquals(line.getNumberFields().get(counter).floatValue(), 18.315842078960518, 0.001); + } else if (counter.getName().equals("tg-cpu-total-sys")) { + assertEquals(line.getNumberFields().get(counter).floatValue(), 7.8210894552723635, 0.001); + } + } + } + + @Test + public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tag_filter_unmatching_case() { + Configure.newInstanceForTestCase(); + System.setProperty("input_telegraf_$cpu$_counter_mappings", "usage_user:tg-$cpu$-user:$cpu$ user:%:false" + ",usage_system:tg-$cpu$-sys:$cpu$ sys:%:false"); + System.setProperty("input_telegraf_$cpu$_objType_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$cpu$_objName_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$cpu$_host_tag", "host"); + //tag filter => cpu:cpu-total,cpu:cpu2 + System.setProperty("input_telegraf_$cpu$_tag_filter", "cpu:cpu-total,cpu:cpu2"); + Configure.newInstanceForTestCase(); + + //this protocol tag "cpu=cpu-0" + String protocol = "cpu,cpu=cpu-0,host=vm0.us" + + " usage_user=18.315842078960518,usage_iowait=0,usage_irq=0,usage_softirq=0" + + ",usage_guest=0,usage_system=7.8210894552723635,usage_idle=73.86306846576711" + + ",usage_nice=0,usage_steal=0,usage_guest_nice=0" + + " 1532269780000000000"; + + InfluxSingleLine line = InfluxSingleLine.of(protocol, Configure.getInstance(), System.currentTimeMillis()); + + assertNull(line); + } + + @Test + public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tag_filter_unmatching_case_in_not_condition() { + Configure.newInstanceForTestCase(); + System.setProperty("input_telegraf_$cpu$_counter_mappings", "usage_user:tg-$cpu$-user:$cpu$ user:%:false" + ",usage_system:tg-$cpu$-sys:$cpu$ sys:%:false"); + System.setProperty("input_telegraf_$cpu$_objType_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$cpu$_objName_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$cpu$_host_tag", "host"); + //tag filter => cpu:cpu-total,cpu:cpu2 + System.setProperty("input_telegraf_$cpu$_tag_filter", "cpu:!cpu-0"); + Configure.newInstanceForTestCase(); + + //this protocol tag "cpu=cpu-0" + String protocol = "cpu,cpu=cpu-0,host=vm0.us" + + " usage_user=18.315842078960518,usage_iowait=0,usage_irq=0,usage_softirq=0" + + ",usage_guest=0,usage_system=7.8210894552723635,usage_idle=73.86306846576711" + + ",usage_nice=0,usage_steal=0,usage_guest_nice=0" + + " 1532269780000000000"; + + InfluxSingleLine line = InfluxSingleLine.of(protocol, Configure.getInstance(), System.currentTimeMillis()); + + assertNull(line); + } + + @Test + public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tag_filter_matching_case() { + Configure.newInstanceForTestCase(); + System.setProperty("input_telegraf_$cpu$_counter_mappings", "usage_user:tg-$cpu$-user:$cpu$ user:%:false" + ",usage_system:tg-$cpu$-sys:$cpu$ sys:%:false"); + System.setProperty("input_telegraf_$cpu$_objType_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$cpu$_objName_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$cpu$_host_tag", "host"); + //tag filter => cpu:cpu-total,cpu:cpu2 + System.setProperty("input_telegraf_$cpu$_tag_filter", "cpu:cpu-0,cpu:cpu-total"); + Configure.newInstanceForTestCase(); + + //this protocol tag "cpu=cpu-0" + String protocol = "cpu,cpu=cpu-total,host=vm0.us" + + " usage_user=18.315842078960518,usage_iowait=0,usage_irq=0,usage_softirq=0" + + ",usage_guest=0,usage_system=7.8210894552723635,usage_idle=73.86306846576711" + + ",usage_nice=0,usage_steal=0,usage_guest_nice=0" + + " 1532269780000000000"; + + InfluxSingleLine line = InfluxSingleLine.of(protocol, Configure.getInstance(), System.currentTimeMillis()); + + assertNotNull(line); + } + + @Test + public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tag_filter_matching_case_in_not_condition() { + Configure.newInstanceForTestCase(); + System.setProperty("input_telegraf_$cpu$_counter_mappings", "usage_user:tg-$cpu$-user:$cpu$ user:%:false" + ",usage_system:tg-$cpu$-sys:$cpu$ sys:%:false"); + System.setProperty("input_telegraf_$cpu$_objType_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$cpu$_objName_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$cpu$_host_tag", "host"); + //tag filter => cpu:cpu-total,cpu:cpu2 + System.setProperty("input_telegraf_$cpu$_tag_filter", "cpu:!cpu-0"); + Configure.newInstanceForTestCase(); + + //this protocol tag "cpu=cpu-0" + String protocol = "cpu,cpu=cpu-total,host=vm0.us" + + " usage_user=18.315842078960518,usage_iowait=0,usage_irq=0,usage_softirq=0" + + ",usage_guest=0,usage_system=7.8210894552723635,usage_idle=73.86306846576711" + + ",usage_nice=0,usage_steal=0,usage_guest_nice=0" + + " 1532269780000000000"; + + InfluxSingleLine line = InfluxSingleLine.of(protocol, Configure.getInstance(), System.currentTimeMillis()); + + assertNotNull(line); + } + + @Test + @Ignore public void perf_test() { String metric = "mem,host=GunMac.skbroadband,region=seoul used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i,slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i,active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521 1532269780000000000"; diff --git a/scouter.webapp/pom.xml b/scouter.webapp/pom.xml index f763676ab..fbe43ce83 100644 --- a/scouter.webapp/pom.xml +++ b/scouter.webapp/pom.xml @@ -5,7 +5,7 @@ scouter-parent io.github.scouter-project - 1.9.0 + 1.9.1.SNAPSHOT 4.0.0 From 60b0ab691a59d7975de8e248efe2bc2e4fdfa428 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Mon, 30 Jul 2018 22:22:46 +0900 Subject: [PATCH 06/53] [client] telegraf config also can be edited in the config edit popup. --- .../configuration/views/ConfigureView.java | 1328 +++++++++-------- 1 file changed, 712 insertions(+), 616 deletions(-) diff --git a/scouter.client/src/scouter/client/configuration/views/ConfigureView.java b/scouter.client/src/scouter/client/configuration/views/ConfigureView.java index 66939671e..5e5f21e2b 100644 --- a/scouter.client/src/scouter/client/configuration/views/ConfigureView.java +++ b/scouter.client/src/scouter/client/configuration/views/ConfigureView.java @@ -1,8 +1,8 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2015 the original author or authors. * @https://github.com/scouter-project/scouter * - * Licensed under the Apache License, Version 2.0 (the "License"); + * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * @@ -12,7 +12,7 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License. + * limitations under the License. * */ package scouter.client.configuration.views; @@ -22,7 +22,14 @@ import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.viewers.*; +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.ColumnLabelProvider; +import org.eclipse.jface.viewers.ColumnWeightData; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.TableViewerColumn; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.window.DefaultToolTip; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; @@ -31,13 +38,29 @@ import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; -import org.eclipse.swt.events.*; +import org.eclipse.swt.events.KeyAdapter; +import org.eclipse.swt.events.KeyEvent; +import org.eclipse.swt.events.KeyListener; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.MouseAdapter; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.MouseListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.*; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.swt.widgets.TableItem; +import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; import scouter.client.Images; @@ -49,7 +72,11 @@ import scouter.client.server.Server; import scouter.client.server.ServerManager; import scouter.client.sorter.ColumnLabelSorter; -import scouter.client.util.*; +import scouter.client.util.ColoringWord; +import scouter.client.util.ConsoleProxy; +import scouter.client.util.CustomLineStyleListener; +import scouter.client.util.ExUtil; +import scouter.client.util.ImageUtil; import scouter.lang.conf.ValueType; import scouter.lang.pack.MapPack; import scouter.lang.value.ListValue; @@ -57,617 +84,686 @@ import scouter.util.CastUtil; import scouter.util.StringUtil; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; import java.util.stream.Collectors; public class ConfigureView extends ViewPart { - public final static String ID = ConfigureView.class.getName(); - - private ArrayList defaultHighlightings; - private HashSet configKeyNames = new HashSet<>(); - - private StyledText text; - private String content; - private int serverId; - private int objHash; - private String displayName; - - private volatile String selectedText = ""; - private volatile long selectedTime = 0L; - private volatile int selectedX = 0; - private volatile int selectedY = 0; - - Composite listComp; - TableViewer viewer; - Table table; - Text searchTxt; - - TableColumnLayout tableColumnLayout; - - private Clipboard clipboard = new Clipboard(null); - - CustomLineStyleListener listener; - - boolean devMode; - - HashMap descMap = new HashMap(); - HashMap valueTypeMap = new HashMap(); - - public void createPartControl(Composite parent) { - parent.setLayout(new FillLayout()); - SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL); - sashForm.SASH_WIDTH = 1; - initialStyledText(sashForm); - listComp = new Composite(sashForm, SWT.NONE); - listComp.setLayout(new GridLayout(1, true)); - - Composite searchComp = new Composite(listComp, SWT.NONE); - searchComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - - searchComp.setLayout(new GridLayout(2, false)); - - Label searchLabel = new Label(searchComp, SWT.BORDER); - searchLabel.setText("Filter : "); - searchTxt = new Text(searchComp, SWT.BORDER); - - searchTxt.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - searchTxt.setToolTipText("Search Key/Value"); - searchTxt.addMouseListener(new MouseListener() { - int clicked; - public void mouseUp(MouseEvent arg0) { - } - public void mouseDown(MouseEvent arg0) { - clicked++; - if (clicked == 10) { - devMode = true; - viewer.refresh(); - } - } - public void mouseDoubleClick(MouseEvent arg0) { - } - }); - searchTxt.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - String searchText = searchTxt.getText(); - if (StringUtil.isEmpty(searchText)) { - viewer.setInput(configList); - } else { - searchText = searchText.toLowerCase(); - List tempList = new ArrayList(); - for (ConfObject data : configList) { - String name = data.key.toLowerCase(); - String value = data.value.toLowerCase(); - if (name.contains(searchText) || value.contains(searchText)) { - tempList.add(data); - } - } - viewer.setInput(tempList); - } - } - }); - - Composite tableComp = new Composite(listComp, SWT.NONE); - tableComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - tableColumnLayout = new TableColumnLayout(); - tableComp.setLayout(tableColumnLayout); - viewer = new TableViewer(tableComp, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.H_SCROLL); - createColumns(); - table = viewer.getTable(); - table.setHeaderVisible(true); - table.setLinesVisible(true); - viewer.setContentProvider(new ArrayContentProvider()); - viewer.setComparator(new ColumnLabelSorter(viewer)); - viewer.addFilter(filter); - final DefaultToolTip toolTip = new DefaultToolTip(table, DefaultToolTip.RECREATE, true); - toolTip.setFont(new Font(null, "Arial", 11, SWT.BOLD)); - //toolTip.setForegroundColor(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); - toolTip.setBackgroundColor(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); - table.addMouseListener(new MouseListener() { - public void mouseUp(MouseEvent e) { - } - - public void mouseDown(MouseEvent e) { - toolTip.hide(); - StructuredSelection sel = (StructuredSelection) viewer.getSelection(); - Object o = sel.getFirstElement(); - if (o instanceof ConfObject) { - String configName = ((ConfObject) o).key; - String desc = descMap.get(configName); - if (StringUtil.isNotEmpty(desc)) { - toolTip.setText(desc); - toolTip.show(new Point(e.x + 10, e.y + 20)); - } - } - } - public void mouseDoubleClick(MouseEvent e) { - StructuredSelection selection = (StructuredSelection)viewer.getSelection(); - if(selection == null) - return; - ConfObject confObject = (ConfObject)selection.getFirstElement(); - if(confObject != null){ - String configText = text.getText(); - if(configText == null || configText.indexOf(confObject.key) >=0 ){ - return; - } - String desc = descMap.get(confObject.key); - if(StringUtil.isNotEmpty(desc)) { - desc = desc.replace("\n", "\n#"); - text.setText(configText + "\n\n" + "#" + desc); - } - text.setText(text.getText() + "\n" + confObject.key + "=" + confObject.value); - } - } - }); - - table.addKeyListener(new KeyAdapter() { - public void keyPressed(KeyEvent e) { - if(e.stateMask == SWT.CTRL || e.stateMask == SWT.COMMAND){ - if (e.keyCode == 'c' || e.keyCode == 'C') { - TableItem[] items = table.getSelection(); - if (items == null || items.length < 1) { - return; - } - StringBuffer sb = new StringBuffer(); - for (TableItem item : items) { - String desc = descMap.get(item.getText(0)); - if(StringUtil.isNotEmpty(desc)) { - sb.append("#").append(desc.replace("\n", "\n#")).append("\n"); - } - sb.append(item.getText(0)); - sb.append("="); - sb.append(item.getText(1)); - sb.append("\n"); - } - clipboard.setContents(new Object[] {sb.toString()}, new Transfer[] {TextTransfer.getInstance()}); - } - } - } - }); - - Label bottomLabel = new Label(listComp, SWT.BORDER); - bottomLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - bottomLabel.setFont(new Font(null, "Arial", 11, SWT.BOLD | SWT.ITALIC)); - - bottomLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); - bottomLabel.setText(new StringBuilder() - .append(" [Click] for tooltip\n") - .append(" [Double-Click] for copy && paste (or ctl+C)") - .toString()); - - sashForm.setWeights(new int[] {1, 1}); - sashForm.setMaximizedControl(null); - initialToolBar(); - } - - public void setInput(int serverId){ - this.serverId = serverId; - Server server = ServerManager.getInstance().getServer(serverId); - if (server != null) { - this.displayName = server.getName(); - setPartName("Config Server[" + server.getName() + "]"); - loadConfig(RequestCmd.GET_CONFIGURE_SERVER, null); - loadConfigList(RequestCmd.LIST_CONFIGURE_SERVER, null); - loadConfigDesc(new MapPack()); - loadConfigValueType(new MapPack()); - } - } - - public void setInput(int serverId, int objHash){ - this.serverId = serverId; - this.objHash = objHash; - Server server = ServerManager.getInstance().getServer(serverId); - if (server != null) { - this.displayName = TextProxy.object.getText(objHash); - setPartName("Config Agent[" + TextProxy.object.getText(objHash) + "]"); - MapPack param = new MapPack(); - param.put("objHash", objHash); - loadConfig(RequestCmd.GET_CONFIGURE_WAS, param); - loadConfigList(RequestCmd.LIST_CONFIGURE_WAS, param); - loadConfigDesc(param); - loadConfigValueType(param); - } - } - - private void initialStyledText(Composite parent) { - Composite comp = new Composite(parent, SWT.NONE); - comp.setLayout(new GridLayout(1, true)); - - text = new StyledText(comp, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); - text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - listener = new CustomLineStyleListener(true, defaultHighlightings, false); - text.addLineStyleListener(listener); - text.addKeyListener(new KeyListener() { - public void keyReleased(KeyEvent e) { - } - public void keyPressed(KeyEvent e) { - if(e.stateMask == SWT.CTRL || e.stateMask == SWT.COMMAND){ - if(e.keyCode == 's' || e.keyCode == 'S'){ - saveConfigurations(); - }else if(e.keyCode == 'a' || e.keyCode == 'A'){ - text.selectAll(); - } - } - } - }); - text.addMouseListener(new MouseAdapter() { - @Override - public void mouseDoubleClick(MouseEvent e) { - if (selectedTime > System.currentTimeMillis() - 1500) { - String contents = text.getText(); - int start = selectedX; - int end = selectedY; - while(start > 0) { - char c = contents.charAt(--start); - if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_' || c == '-' || c == '$') { - //expand backward - } else { - start++; - break; - } - } - while(end < contents.length()) { - char c = contents.charAt(end++); - if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_' || c == '-' || c == '$') { - //expand ahead - } else { - end--; - break; - } - } - selectedX = start; - selectedY = end; - selectedText = contents.substring(start, end); - text.setSelection(start, end); - - if (configKeyNames.contains(selectedText)) { - String fullText = text.getText(); - String textToIt = fullText.substring(0, selectedX); - int lastIndexOfLineBreakToIt = Math.max(textToIt.lastIndexOf('\n'), textToIt.lastIndexOf('\r')); - - if (lastIndexOfLineBreakToIt >= 0) { - if(fullText.charAt(lastIndexOfLineBreakToIt+1) == '#') { - return; - } - } else { - if (textToIt.length() > 0 && textToIt.charAt(0) == '#') { - return; - } - } - - String value = fullText.substring(selectedY); - int startPos = value.indexOf('=')+1; - int npos = value.indexOf('\n'); - int rpos = value.indexOf('\r'); - int lineEndPos = (npos >= 0 && rpos >= 0) ? Math.min(npos, rpos) : Math.max(npos, rpos); - - if (lineEndPos >= 0) { - value = value.substring(startPos, lineEndPos); - } else { - value = value.substring(startPos); - } - - final String valuef = value; - ExUtil.exec(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().getDisplay(), () -> { - ConfigureItemDialog dialog = new ConfigureItemDialog(parent.getShell(), selectedText, valuef, displayName, - descMap.get(selectedText), valueTypeMap.get(selectedText), objHash == 0 ? true : false, objHash); - if (dialog.open() == Window.OK) { - setTheConfig(selectedText, dialog.getValue(), dialog.getApplyScope()); - } - }); - } - } - } - }); - text.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if(e.x == e.y) return; - selectedText = text.getText(e.x, e.y-1); - selectedTime = System.currentTimeMillis(); - selectedX = e.x; - selectedY = e.y; - } - }); - - Label bottomLabel = new Label(comp, SWT.BORDER); - bottomLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - bottomLabel.setFont(new Font(null, "Arial", 11, SWT.BOLD | SWT.ITALIC)); - - bottomLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); - bottomLabel.setText(new StringBuilder() - .append(" [Double-Click] the config KEY for popup editor\n") - .append(" ") - .toString()); - } - - private void setTheConfig(String confKey, String confValue, ConfApplyScopeEnum applyScope) { - String _confValue = confValue; - if ("null".equals(_confValue)) { - _confValue = ""; - } - - String content = text.getText(); - String expression = "(?m)^" + confKey + "\\s*=.*\\n?"; - String replacement = confKey + "=" + _confValue + "\n"; - content = content.replaceAll(expression, replacement); - text.setText(content); - - if (objHash == 0) { //server - return; - } - - ExUtil.exec(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().getDisplay(), () -> { - String objType = AgentModelThread.getInstance().getAgentObject(objHash).getObjType(); - Map resultMap = ConfigureFileHandleUtil.applyConfig(applyScope, confKey, confValue, objType, serverId); - - if(resultMap == null) { - return; - } - if (resultMap.values().contains(Boolean.FALSE)) { - new EditableMessageDialog().show("Saved with Warning!" - , "Configuration saving is partially success.\n\n" - + resultMap.entrySet().stream() - .map(e -> " - " + e.getKey() + " : " + (e.getValue() ? "success" : "fail")) - .collect(Collectors.joining("\n")) - - ); - } else { - new EditableMessageDialog().show("Saved all successfully." - , "Configuration saving is done.\n\n" - + resultMap.entrySet().stream() - .map(e -> " - " + e.getKey() + " : " + (e.getValue() ? "success" : "fail")) - .collect(Collectors.joining("\n")) - ); - } - }); - } - - private void saveConfigurations(){ - TcpProxy tcp = TcpProxy.getTcpProxy(serverId); - try { - MapPack param = new MapPack(); - param.put("setConfig", text.getText().replaceAll("\\\\", "\\\\\\\\")); - MapPack out = null; - if (objHash == 0) { - out = (MapPack) tcp.getSingle(RequestCmd.SET_CONFIGURE_SERVER, param); - } else { - param.put("objHash", objHash); - out = (MapPack) tcp.getSingle(RequestCmd.SET_CONFIGURE_WAS, param); - } - - if (out != null) { - String config = out.getText("result"); - if("true".equalsIgnoreCase(config)) { - MessageDialog.open(MessageDialog.INFORMATION - , PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell() - , "Success" - , "Configuration saving is done." - , SWT.NONE); - if (objHash == 0) { - loadConfigList(RequestCmd.LIST_CONFIGURE_SERVER, null); - } else { - MapPack param2 = new MapPack(); - param2.put("objHash", objHash); - loadConfigList(RequestCmd.LIST_CONFIGURE_WAS, param2); - } - } else { - MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell() - ,"Error" - , "Configuration saving is failed."); - } - } - } catch(Exception e){ - ConsoleProxy.errorSafe(e.toString()); - } finally { - TcpProxy.putTcpProxy(tcp); - } - } - - private void initialToolBar() { - IToolBarManager man = getViewSite().getActionBars().getToolBarManager(); - man.add(new Action("Save", ImageUtil.getImageDescriptor(Images.save)) { - public void run() { - saveConfigurations(); - } - }); - } - - private void loadConfig(final String requestCmd, final MapPack param) { - ExUtil.asyncRun(new Runnable() { - public void run() { - MapPack mpack = null; - TcpProxy tcp = TcpProxy.getTcpProxy(serverId); - try { - mpack = (MapPack) tcp.getSingle(requestCmd, param); - } finally { - TcpProxy.putTcpProxy(tcp); - } - if (mpack != null) { - ListValue configKey = mpack.getList("configKey"); - - defaultHighlightings = new ArrayList(); - for(int inx = 0 ; configKey != null && inx < configKey.size(); inx++){ - defaultHighlightings.add(new ColoringWord(configKey.getString(inx), SWT.COLOR_BLUE, true)); - configKeyNames.add(configKey.getString(inx)); - } - defaultHighlightings.add(new ColoringWord(";", SWT.COLOR_RED, true)); - - if (objHash == 0) { - content = mpack.getText("serverConfig"); - } else { - content = mpack.getText("agentConfig"); - } - } - ExUtil.exec(text, new Runnable() { - public void run() { - listener.setKeywordArray(defaultHighlightings); - text.setText(content); - } - }); - } - }); - } - - ArrayList configList = new ArrayList(); - - private void loadConfigList(final String requestCmd, final MapPack param) { - ExUtil.asyncRun(new Runnable() { - public void run() { - MapPack pack = null; - TcpProxy tcp = TcpProxy.getTcpProxy(serverId); - try { - pack = (MapPack) tcp.getSingle(requestCmd, param); - } catch (Exception e) { - e.printStackTrace(); - } finally { - TcpProxy.putTcpProxy(tcp); - } - if (pack != null) { - final ListValue keyList = pack.getList("key"); - final ListValue valueList = pack.getList("value"); - final ListValue defaultList = pack.getList("default"); - configList.clear(); - for (int i = 0; i < keyList.size(); i++) { - ConfObject obj = new ConfObject(); - String key = CastUtil.cString(keyList.get(i)); - String value = CastUtil.cString(valueList.get(i)); - String def = CastUtil.cString(defaultList.get(i)); - obj.key = key == null ? "" : key; - obj.value = value == null ? "" : value; - obj.def = def == null ? "" : def; - configList.add(obj); - } - ExUtil.exec(listComp, new Runnable() { - public void run() { - searchTxt.notifyListeners(SWT.Modify, new Event()); - } - }); - } - } - }); - } - - private void loadConfigDesc(final MapPack param) { - ExUtil.asyncRun(new Runnable() { - public void run() { - MapPack pack = null; - TcpProxy tcp = TcpProxy.getTcpProxy(serverId); - try { - pack = (MapPack) tcp.getSingle(RequestCmd.CONFIGURE_DESC, param); - } catch (Exception e) { - e.printStackTrace(); - } finally { - TcpProxy.putTcpProxy(tcp); - } - if (pack != null) { - Iterator keys = pack.keys(); - while (keys.hasNext()) { - String key = keys.next(); - descMap.put(key, pack.getText(key)); - } - } - } - }); - } - - private void loadConfigValueType(final MapPack param) { - ExUtil.asyncRun(new Runnable() { - public void run() { - MapPack pack = null; - TcpProxy tcp = TcpProxy.getTcpProxy(serverId); - try { - pack = (MapPack) tcp.getSingle(RequestCmd.CONFIGURE_VALUE_TYPE, param); - } catch (Exception e) { - e.printStackTrace(); - } finally { - TcpProxy.putTcpProxy(tcp); - } - if (pack != null) { - Iterator keys = pack.keys(); - while (keys.hasNext()) { - String key = keys.next(); - valueTypeMap.put(key, ValueType.of(pack.getInt(key))); - } - } - } - }); - } - - public void setFocus() { - IStatusLineManager slManager= getViewSite().getActionBars().getStatusLineManager(); - slManager.setMessage("CTRL + S : save configurations, CTRL + A : select all text"); - } - - private void createColumns() { - for (ConfEnum column : ConfEnum.values()) { - TableViewerColumn c = createTableViewerColumn(column.getTitle(), column.getWidth(), column.getAlignment(), column.isNumber()); - ColumnLabelProvider labelProvider = null; - switch (column) { - case KEY: - labelProvider = new ColumnLabelProvider() { - public String getText(Object element) { - if (element instanceof ConfObject) { - return ((ConfObject) element).key; - } - return null; - } - }; - break; - case VALUE: - labelProvider = new ColumnLabelProvider() { - public String getText(Object element) { - if (element instanceof ConfObject) { - return ((ConfObject) element).value; - } - return null; - } - }; - break; - case DEFAULT: - labelProvider = new ColumnLabelProvider() { - public String getText(Object element) { - if (element instanceof ConfObject) { - return ((ConfObject) element).def; - } - return null; - } - }; - break; - } - if (labelProvider != null) { - c.setLabelProvider(labelProvider); - } - } - } - - private TableViewerColumn createTableViewerColumn(String title, int width, int alignment, final boolean isNumber) { - final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE); - final TableColumn column = viewerColumn.getColumn(); - column.setText(title); - column.setAlignment(alignment); - tableColumnLayout.setColumnData(column, new ColumnWeightData(30, width, true)); - column.setData("isNumber", isNumber); - column.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - ColumnLabelSorter sorter = (ColumnLabelSorter) viewer.getComparator(); - TableColumn selectedColumn = (TableColumn) e.widget; - sorter.setColumn(selectedColumn); - } - }); - return viewerColumn; - } - - ViewerFilter filter = new ViewerFilter() { - public boolean select(Viewer viewer, Object parent, Object element) { - if (devMode) return true; - if (element instanceof ConfObject) { - if (((ConfObject)element).key.startsWith("_")) { - return false; - } - } - return true; - } - }; + public final static String ID = ConfigureView.class.getName(); + + private ArrayList defaultHighlightings; + private HashSet configKeyNames = new HashSet<>(); + + private StyledText text; + private String content; + private int serverId; + private int objHash; + private String displayName; + + private volatile String selectedText = ""; + private volatile long selectedTime = 0L; + private volatile int selectedX = 0; + private volatile int selectedY = 0; + + Composite listComp; + TableViewer viewer; + Table table; + Text searchTxt; + + TableColumnLayout tableColumnLayout; + + private Clipboard clipboard = new Clipboard(null); + + CustomLineStyleListener listener; + + boolean devMode; + + HashMap descMap = new HashMap(); + HashMap valueTypeMap = new HashMap(); + + public void createPartControl(Composite parent) { + parent.setLayout(new FillLayout()); + SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL); + sashForm.SASH_WIDTH = 1; + initialStyledText(sashForm); + listComp = new Composite(sashForm, SWT.NONE); + listComp.setLayout(new GridLayout(1, true)); + + Composite searchComp = new Composite(listComp, SWT.NONE); + searchComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + + searchComp.setLayout(new GridLayout(2, false)); + + Label searchLabel = new Label(searchComp, SWT.BORDER); + searchLabel.setText("Filter : "); + searchTxt = new Text(searchComp, SWT.BORDER); + + searchTxt.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + searchTxt.setToolTipText("Search Key/Value"); + searchTxt.addMouseListener(new MouseListener() { + int clicked; + + public void mouseUp(MouseEvent arg0) { + } + + public void mouseDown(MouseEvent arg0) { + clicked++; + if (clicked == 10) { + devMode = true; + viewer.refresh(); + } + } + + public void mouseDoubleClick(MouseEvent arg0) { + } + }); + searchTxt.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + String searchText = searchTxt.getText(); + if (StringUtil.isEmpty(searchText)) { + viewer.setInput(configList); + } else { + searchText = searchText.toLowerCase(); + List tempList = new ArrayList(); + for (ConfObject data : configList) { + String name = data.key.toLowerCase(); + String value = data.value.toLowerCase(); + if (name.contains(searchText) || value.contains(searchText)) { + tempList.add(data); + } + } + viewer.setInput(tempList); + } + } + }); + + Composite tableComp = new Composite(listComp, SWT.NONE); + tableComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + tableColumnLayout = new TableColumnLayout(); + tableComp.setLayout(tableColumnLayout); + viewer = new TableViewer(tableComp, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.H_SCROLL); + createColumns(); + table = viewer.getTable(); + table.setHeaderVisible(true); + table.setLinesVisible(true); + viewer.setContentProvider(new ArrayContentProvider()); + viewer.setComparator(new ColumnLabelSorter(viewer)); + viewer.addFilter(filter); + final DefaultToolTip toolTip = new DefaultToolTip(table, DefaultToolTip.RECREATE, true); + toolTip.setFont(new Font(null, "Arial", 11, SWT.BOLD)); + //toolTip.setForegroundColor(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); + toolTip.setBackgroundColor(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); + table.addMouseListener(new MouseListener() { + public void mouseUp(MouseEvent e) { + } + + public void mouseDown(MouseEvent e) { + toolTip.hide(); + StructuredSelection sel = (StructuredSelection) viewer.getSelection(); + Object o = sel.getFirstElement(); + if (o instanceof ConfObject) { + String configName = ((ConfObject) o).key; + String desc = descMap.get(configName); + if (StringUtil.isNotEmpty(desc)) { + toolTip.setText(desc); + toolTip.show(new Point(e.x + 10, e.y + 20)); + } + } + } + + public void mouseDoubleClick(MouseEvent e) { + StructuredSelection selection = (StructuredSelection) viewer.getSelection(); + if (selection == null) + return; + ConfObject confObject = (ConfObject) selection.getFirstElement(); + if (confObject != null) { + String configText = text.getText(); + if (configText == null || configText.indexOf(confObject.key) >= 0) { + return; + } + String desc = descMap.get(confObject.key); + if (StringUtil.isNotEmpty(desc)) { + desc = desc.replace("\n", "\n#"); + text.setText(configText + "\n\n" + "#" + desc); + } + text.setText(text.getText() + "\n" + confObject.key + "=" + confObject.value); + } + } + }); + + table.addKeyListener(new KeyAdapter() { + public void keyPressed(KeyEvent e) { + if (e.stateMask == SWT.CTRL || e.stateMask == SWT.COMMAND) { + if (e.keyCode == 'c' || e.keyCode == 'C') { + TableItem[] items = table.getSelection(); + if (items == null || items.length < 1) { + return; + } + StringBuffer sb = new StringBuffer(); + for (TableItem item : items) { + String desc = descMap.get(item.getText(0)); + if (StringUtil.isNotEmpty(desc)) { + sb.append("#").append(desc.replace("\n", "\n#")).append("\n"); + } + sb.append(item.getText(0)); + sb.append("="); + sb.append(item.getText(1)); + sb.append("\n"); + } + clipboard.setContents(new Object[]{sb.toString()}, new Transfer[]{TextTransfer.getInstance()}); + } + } + } + }); + + Label bottomLabel = new Label(listComp, SWT.BORDER); + bottomLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + bottomLabel.setFont(new Font(null, "Arial", 11, SWT.BOLD | SWT.ITALIC)); + + bottomLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); + bottomLabel.setText(new StringBuilder() + .append(" [Click] for tooltip\n") + .append(" [Double-Click] for copy && paste (or ctl+C)") + .toString()); + + sashForm.setWeights(new int[]{1, 1}); + sashForm.setMaximizedControl(null); + initialToolBar(); + } + + public void setInput(int serverId) { + this.serverId = serverId; + Server server = ServerManager.getInstance().getServer(serverId); + if (server != null) { + this.displayName = server.getName(); + setPartName("Config Server[" + server.getName() + "]"); + loadConfig(RequestCmd.GET_CONFIGURE_SERVER, null); + loadConfigList(RequestCmd.LIST_CONFIGURE_SERVER, null); + loadConfigDesc(new MapPack()); + loadConfigValueType(new MapPack()); + } + } + + public void setInput(int serverId, int objHash) { + this.serverId = serverId; + this.objHash = objHash; + Server server = ServerManager.getInstance().getServer(serverId); + if (server != null) { + this.displayName = TextProxy.object.getText(objHash); + setPartName("Config Agent[" + TextProxy.object.getText(objHash) + "]"); + MapPack param = new MapPack(); + param.put("objHash", objHash); + loadConfig(RequestCmd.GET_CONFIGURE_WAS, param); + loadConfigList(RequestCmd.LIST_CONFIGURE_WAS, param); + loadConfigDesc(param); + loadConfigValueType(param); + } + } + + private void initialStyledText(Composite parent) { + Composite comp = new Composite(parent, SWT.NONE); + comp.setLayout(new GridLayout(1, true)); + + text = new StyledText(comp, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); + text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + listener = new CustomLineStyleListener(true, defaultHighlightings, false); + text.addLineStyleListener(listener); + text.addKeyListener(new KeyListener() { + public void keyReleased(KeyEvent e) { + } + + public void keyPressed(KeyEvent e) { + if (e.stateMask == SWT.CTRL || e.stateMask == SWT.COMMAND) { + if (e.keyCode == 's' || e.keyCode == 'S') { + saveConfigurations(); + } else if (e.keyCode == 'a' || e.keyCode == 'A') { + text.selectAll(); + } + } + } + }); + text.addMouseListener(new MouseAdapter() { + @Override + public void mouseDoubleClick(MouseEvent e) { + if (selectedTime > System.currentTimeMillis() - 1500) { + String contents = text.getText(); + int start = selectedX; + int end = selectedY; + while (start > 0) { + char c = contents.charAt(--start); + if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_' || c == '-' || c == '$') { + //expand backward + } else { + start++; + break; + } + } + while (end < contents.length()) { + char c = contents.charAt(end++); + if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_' || c == '-' || c == '$') { + //expand ahead + } else { + end--; + break; + } + } + selectedX = start; + selectedY = end; + selectedText = contents.substring(start, end); + text.setSelection(start, end); + + if (configKeyContains(selectedText)) { + String fullText = text.getText(); + String textToIt = fullText.substring(0, selectedX); + int lastIndexOfLineBreakToIt = Math.max(textToIt.lastIndexOf('\n'), textToIt.lastIndexOf('\r')); + + if (lastIndexOfLineBreakToIt >= 0) { + if (fullText.charAt(lastIndexOfLineBreakToIt + 1) == '#') { + return; + } + } else { + if (textToIt.length() > 0 && textToIt.charAt(0) == '#') { + return; + } + } + + String value = fullText.substring(selectedY); + int startPos = value.indexOf('=') + 1; + int npos = value.indexOf('\n'); + int rpos = value.indexOf('\r'); + int lineEndPos = (npos >= 0 && rpos >= 0) ? Math.min(npos, rpos) : Math.max(npos, rpos); + + if (lineEndPos >= 0) { + value = value.substring(startPos, lineEndPos); + } else { + value = value.substring(startPos); + } + + final String valuef = value; + ExUtil.exec(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().getDisplay(), () -> { + ConfigureItemDialog dialog = new ConfigureItemDialog(parent.getShell(), selectedText, valuef, displayName, + getInDescMap(selectedText), getInValueTypeMap(selectedText), objHash == 0 ? true : false, objHash); + if (dialog.open() == Window.OK) { + setTheConfig(selectedText, dialog.getValue(), dialog.getApplyScope()); + } + }); + } + } + } + }); + text.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (e.x == e.y) return; + selectedText = text.getText(e.x, e.y - 1); + selectedTime = System.currentTimeMillis(); + selectedX = e.x; + selectedY = e.y; + } + }); + + Label bottomLabel = new Label(comp, SWT.BORDER); + bottomLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + bottomLabel.setFont(new Font(null, "Arial", 11, SWT.BOLD | SWT.ITALIC)); + + bottomLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); + bottomLabel.setText(new StringBuilder() + .append(" [Double-Click] the config KEY for popup editor\n") + .append(" ") + .toString()); + } + + private boolean configKeyContains(String text) { + if (configKeyNames.contains(text)) { + return true; + } + String pureText = removeVariableString(text); + for (String key : configKeyNames) { + if (removeVariableString(key).equals(pureText)) { + return true; + } + } + return false; + } + + private String getInDescMap(String text) { + String desc = descMap.get(text); + if (desc == null) { + desc = descMap.get(removeVariableString(text)); + } + return desc; + } + + private ValueType getInValueTypeMap(String text) { + ValueType valueType = valueTypeMap.get(text); + if (valueType == null) { + valueType = valueTypeMap.get(removeVariableString(text)); + } + return valueType; + } + + private String removeVariableString(String text) { + StringBuilder resultBuilder = new StringBuilder(text.length()); + char[] org = text.toCharArray(); + boolean sink = false; + for (int i = 0; i < org.length; i++) { + switch(org[i]) { + case '$': + sink = !sink; + break; + default: + if (!sink) { + resultBuilder.append(org[i]); + } + break; + } + + } + return resultBuilder.toString(); + } + + private void setTheConfig(String confKey, String confValue, ConfApplyScopeEnum applyScope) { + String _confValue = confValue; + if ("null".equals(_confValue)) { + _confValue = ""; + } + + String content = text.getText(); + String expression = "(?m)^" + confKey.replace("$", "\\$") + "\\s*=.*\\n?"; + String replacement = confKey + "=" + _confValue + "\n"; + try { + content = content.replaceAll(expression, Matcher.quoteReplacement(replacement)); + } catch(Exception e) { + e.printStackTrace(); + } + text.setText(content); + + if (objHash == 0) { //server + return; + } + + ExUtil.exec(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().getDisplay(), () -> { + String objType = AgentModelThread.getInstance().getAgentObject(objHash).getObjType(); + Map resultMap = ConfigureFileHandleUtil.applyConfig(applyScope, confKey, confValue, objType, serverId); + + if (resultMap == null) { + return; + } + if (resultMap.values().contains(Boolean.FALSE)) { + new EditableMessageDialog().show("Saved with Warning!" + , "Configuration saving is partially success.\n\n" + + resultMap.entrySet().stream() + .map(e -> " - " + e.getKey() + " : " + (e.getValue() ? "success" : "fail")) + .collect(Collectors.joining("\n")) + + ); + } else { + new EditableMessageDialog().show("Saved all successfully." + , "Configuration saving is done.\n\n" + + resultMap.entrySet().stream() + .map(e -> " - " + e.getKey() + " : " + (e.getValue() ? "success" : "fail")) + .collect(Collectors.joining("\n")) + ); + } + }); + } + + private void saveConfigurations() { + TcpProxy tcp = TcpProxy.getTcpProxy(serverId); + try { + MapPack param = new MapPack(); + param.put("setConfig", text.getText().replaceAll("\\\\", "\\\\\\\\")); + MapPack out = null; + if (objHash == 0) { + out = (MapPack) tcp.getSingle(RequestCmd.SET_CONFIGURE_SERVER, param); + } else { + param.put("objHash", objHash); + out = (MapPack) tcp.getSingle(RequestCmd.SET_CONFIGURE_WAS, param); + } + + if (out != null) { + String config = out.getText("result"); + if ("true".equalsIgnoreCase(config)) { + MessageDialog.open(MessageDialog.INFORMATION + , PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell() + , "Success" + , "Configuration saving is done." + , SWT.NONE); + if (objHash == 0) { + loadConfigList(RequestCmd.LIST_CONFIGURE_SERVER, null); + } else { + MapPack param2 = new MapPack(); + param2.put("objHash", objHash); + loadConfigList(RequestCmd.LIST_CONFIGURE_WAS, param2); + } + } else { + MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell() + , "Error" + , "Configuration saving is failed."); + } + } + } catch (Exception e) { + ConsoleProxy.errorSafe(e.toString()); + } finally { + TcpProxy.putTcpProxy(tcp); + } + } + + private void initialToolBar() { + IToolBarManager man = getViewSite().getActionBars().getToolBarManager(); + man.add(new Action("Save", ImageUtil.getImageDescriptor(Images.save)) { + public void run() { + saveConfigurations(); + } + }); + } + + private void loadConfig(final String requestCmd, final MapPack param) { + ExUtil.asyncRun(new Runnable() { + public void run() { + MapPack mpack = null; + TcpProxy tcp = TcpProxy.getTcpProxy(serverId); + try { + mpack = (MapPack) tcp.getSingle(requestCmd, param); + } finally { + TcpProxy.putTcpProxy(tcp); + } + if (mpack != null) { + ListValue configKey = mpack.getList("configKey"); + + defaultHighlightings = new ArrayList(); + for (int inx = 0; configKey != null && inx < configKey.size(); inx++) { + defaultHighlightings.add(new ColoringWord(configKey.getString(inx), SWT.COLOR_BLUE, true)); + configKeyNames.add(configKey.getString(inx)); + } + defaultHighlightings.add(new ColoringWord(";", SWT.COLOR_RED, true)); + + if (objHash == 0) { + content = mpack.getText("serverConfig"); + } else { + content = mpack.getText("agentConfig"); + } + } + ExUtil.exec(text, new Runnable() { + public void run() { + listener.setKeywordArray(defaultHighlightings); + text.setText(content); + } + }); + } + }); + } + + ArrayList configList = new ArrayList(); + + private void loadConfigList(final String requestCmd, final MapPack param) { + ExUtil.asyncRun(new Runnable() { + public void run() { + MapPack pack = null; + TcpProxy tcp = TcpProxy.getTcpProxy(serverId); + try { + pack = (MapPack) tcp.getSingle(requestCmd, param); + } catch (Exception e) { + e.printStackTrace(); + } finally { + TcpProxy.putTcpProxy(tcp); + } + if (pack != null) { + final ListValue keyList = pack.getList("key"); + final ListValue valueList = pack.getList("value"); + final ListValue defaultList = pack.getList("default"); + configList.clear(); + for (int i = 0; i < keyList.size(); i++) { + ConfObject obj = new ConfObject(); + String key = CastUtil.cString(keyList.get(i)); + String value = CastUtil.cString(valueList.get(i)); + String def = CastUtil.cString(defaultList.get(i)); + obj.key = key == null ? "" : key; + obj.value = value == null ? "" : value; + obj.def = def == null ? "" : def; + configList.add(obj); + } + ExUtil.exec(listComp, new Runnable() { + public void run() { + searchTxt.notifyListeners(SWT.Modify, new Event()); + } + }); + } + } + }); + } + + private void loadConfigDesc(final MapPack param) { + ExUtil.asyncRun(new Runnable() { + public void run() { + MapPack pack = null; + TcpProxy tcp = TcpProxy.getTcpProxy(serverId); + try { + pack = (MapPack) tcp.getSingle(RequestCmd.CONFIGURE_DESC, param); + } catch (Exception e) { + e.printStackTrace(); + } finally { + TcpProxy.putTcpProxy(tcp); + } + if (pack != null) { + Iterator keys = pack.keys(); + while (keys.hasNext()) { + String key = keys.next(); + descMap.put(key, pack.getText(key)); + if (key.contains("$")) { + descMap.put(removeVariableString(key), pack.getText(key)); + } + } + } + } + }); + } + + private void loadConfigValueType(final MapPack param) { + ExUtil.asyncRun(new Runnable() { + public void run() { + MapPack pack = null; + TcpProxy tcp = TcpProxy.getTcpProxy(serverId); + try { + pack = (MapPack) tcp.getSingle(RequestCmd.CONFIGURE_VALUE_TYPE, param); + } catch (Exception e) { + e.printStackTrace(); + } finally { + TcpProxy.putTcpProxy(tcp); + } + if (pack != null) { + Iterator keys = pack.keys(); + while (keys.hasNext()) { + String key = keys.next(); + valueTypeMap.put(key, ValueType.of(pack.getInt(key))); + if (key.contains("$")) { + valueTypeMap.put(removeVariableString(key), ValueType.of(pack.getInt(key))); + } + } + } + } + }); + } + + public void setFocus() { + IStatusLineManager slManager = getViewSite().getActionBars().getStatusLineManager(); + slManager.setMessage("CTRL + S : save configurations, CTRL + A : select all text"); + } + + private void createColumns() { + for (ConfEnum column : ConfEnum.values()) { + TableViewerColumn c = createTableViewerColumn(column.getTitle(), column.getWidth(), column.getAlignment(), column.isNumber()); + ColumnLabelProvider labelProvider = null; + switch (column) { + case KEY: + labelProvider = new ColumnLabelProvider() { + public String getText(Object element) { + if (element instanceof ConfObject) { + return ((ConfObject) element).key; + } + return null; + } + }; + break; + case VALUE: + labelProvider = new ColumnLabelProvider() { + public String getText(Object element) { + if (element instanceof ConfObject) { + return ((ConfObject) element).value; + } + return null; + } + }; + break; + case DEFAULT: + labelProvider = new ColumnLabelProvider() { + public String getText(Object element) { + if (element instanceof ConfObject) { + return ((ConfObject) element).def; + } + return null; + } + }; + break; + } + if (labelProvider != null) { + c.setLabelProvider(labelProvider); + } + } + } + + private TableViewerColumn createTableViewerColumn(String title, int width, int alignment, final boolean isNumber) { + final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE); + final TableColumn column = viewerColumn.getColumn(); + column.setText(title); + column.setAlignment(alignment); + tableColumnLayout.setColumnData(column, new ColumnWeightData(30, width, true)); + column.setData("isNumber", isNumber); + column.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + ColumnLabelSorter sorter = (ColumnLabelSorter) viewer.getComparator(); + TableColumn selectedColumn = (TableColumn) e.widget; + sorter.setColumn(selectedColumn); + } + }); + return viewerColumn; + } + + ViewerFilter filter = new ViewerFilter() { + public boolean select(Viewer viewer, Object parent, Object element) { + if (devMode) return true; + if (element instanceof ConfObject) { + if (((ConfObject) element).key.startsWith("_")) { + return false; + } + } + return true; + } + }; } From 60870b4084dc6f8a7b2a148fa276e9ba23b6d510 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Mon, 30 Jul 2018 22:55:45 +0900 Subject: [PATCH 07/53] [client] telegraf config highlighting. --- .../configuration/views/ConfigureView.java | 10 ++++-- .../client/util/CustomLineStyleListener.java | 35 ++++++++++++++++--- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/scouter.client/src/scouter/client/configuration/views/ConfigureView.java b/scouter.client/src/scouter/client/configuration/views/ConfigureView.java index 5e5f21e2b..c2c958fd0 100644 --- a/scouter.client/src/scouter/client/configuration/views/ConfigureView.java +++ b/scouter.client/src/scouter/client/configuration/views/ConfigureView.java @@ -97,6 +97,7 @@ public class ConfigureView extends ViewPart { public final static String ID = ConfigureView.class.getName(); private ArrayList defaultHighlightings; + private ArrayList defaultTaggedHighlightings; private HashSet configKeyNames = new HashSet<>(); private StyledText text; @@ -312,7 +313,7 @@ private void initialStyledText(Composite parent) { text = new StyledText(comp, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - listener = new CustomLineStyleListener(true, defaultHighlightings, false); + listener = new CustomLineStyleListener(true, defaultHighlightings, defaultTaggedHighlightings, false); text.addLineStyleListener(listener); text.addKeyListener(new KeyListener() { public void keyReleased(KeyEvent e) { @@ -448,7 +449,7 @@ private ValueType getInValueTypeMap(String text) { return valueType; } - private String removeVariableString(String text) { + public static String removeVariableString(String text) { StringBuilder resultBuilder = new StringBuilder(text.length()); char[] org = text.toCharArray(); boolean sink = false; @@ -578,8 +579,12 @@ public void run() { ListValue configKey = mpack.getList("configKey"); defaultHighlightings = new ArrayList(); + defaultTaggedHighlightings = new ArrayList(); for (int inx = 0; configKey != null && inx < configKey.size(); inx++) { defaultHighlightings.add(new ColoringWord(configKey.getString(inx), SWT.COLOR_BLUE, true)); + if (configKey.getString(inx).contains("$")) { + defaultTaggedHighlightings.add(new ColoringWord(removeVariableString(configKey.getString(inx)), SWT.COLOR_BLUE, true)); + } configKeyNames.add(configKey.getString(inx)); } defaultHighlightings.add(new ColoringWord(";", SWT.COLOR_RED, true)); @@ -593,6 +598,7 @@ public void run() { ExUtil.exec(text, new Runnable() { public void run() { listener.setKeywordArray(defaultHighlightings); + listener.setTaggedKeywordArray(defaultTaggedHighlightings); text.setText(content); } }); diff --git a/scouter.client/src/scouter/client/util/CustomLineStyleListener.java b/scouter.client/src/scouter/client/util/CustomLineStyleListener.java index 08f73b46d..902a5b94b 100644 --- a/scouter.client/src/scouter/client/util/CustomLineStyleListener.java +++ b/scouter.client/src/scouter/client/util/CustomLineStyleListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2015 the original author or authors. * @https://github.com/scouter-project/scouter * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,15 +17,16 @@ */ package scouter.client.util; -import java.util.ArrayList; -import java.util.LinkedList; - import org.eclipse.swt.SWT; import org.eclipse.swt.custom.LineStyleEvent; import org.eclipse.swt.custom.LineStyleListener; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.widgets.Display; +import scouter.client.configuration.views.ConfigureView; + +import java.util.ArrayList; +import java.util.LinkedList; public class CustomLineStyleListener implements LineStyleListener{ @@ -34,6 +35,7 @@ public class CustomLineStyleListener implements LineStyleListener{ boolean isConfig; Display display; ArrayList keywordArray; + ArrayList taggedKeywordArray; boolean keywordBold; boolean searchBold; @@ -45,6 +47,15 @@ public CustomLineStyleListener(boolean isConfig, ArrayList keyword this.keywordArray = keywordArray; this.keywordBold = keywordBold; } + + public CustomLineStyleListener(boolean isConfig, ArrayList keywordArray, + ArrayList taggedKeywordArray, boolean keywordBold) { + super(); + this.isConfig = isConfig; + this.keywordArray = keywordArray; + this.taggedKeywordArray = taggedKeywordArray; + this.keywordBold = keywordBold; + } public CustomLineStyleListener(Display display, boolean isConfig, ArrayList keywordArray, boolean keywordBold) { super(); @@ -67,6 +78,10 @@ public void setKeywordArray(ArrayList keywordArray) { this.keywordArray = keywordArray; } + public void setTaggedKeywordArray(ArrayList taggedKeywordArray) { + this.taggedKeywordArray = taggedKeywordArray; + } + public void setSearchString(String searchString){ this.searchString = searchString; } @@ -95,6 +110,18 @@ public void lineGetStyle(LineStyleEvent event) { } } if(isConfig){ + //taggedKeyword map을 루프를 돌며 $xx$를 뺀 넘과 같으면 하일라이트. 길이는 뭐.. 음. word.length + (원본 - $$ 제거의 차이) + if (taggedKeywordArray != null) { + for (ColoringWord word : taggedKeywordArray) { + String normalizedLine = ConfigureView.removeVariableString(line); + int pos = normalizedLine.indexOf(word.getWord()); + if (pos >= 0) { + int len = word.getWord().length() + (line.length() - normalizedLine.length()); + list.add(getDefaultHighlightStyle(event.lineOffset + pos, len, Display.getCurrent().getSystemColor(word.getColor()), word.isBold())); + } + } + } + if(line.startsWith("#")){ list.add(getDefaultHighlightStyle(event.lineOffset, line.length(), Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GREEN), false)); } From c5f33a30521e2f7c6618276ea5f4ca13aa4d7d31 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Tue, 31 Jul 2018 18:09:38 +0900 Subject: [PATCH 08/53] [client] telegraf config highlighting. --- .../src/scouter/client/util/CustomLineStyleListener.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scouter.client/src/scouter/client/util/CustomLineStyleListener.java b/scouter.client/src/scouter/client/util/CustomLineStyleListener.java index 902a5b94b..86f1dc6ff 100644 --- a/scouter.client/src/scouter/client/util/CustomLineStyleListener.java +++ b/scouter.client/src/scouter/client/util/CustomLineStyleListener.java @@ -110,13 +110,14 @@ public void lineGetStyle(LineStyleEvent event) { } } if(isConfig){ - //taggedKeyword map을 루프를 돌며 $xx$를 뺀 넘과 같으면 하일라이트. 길이는 뭐.. 음. word.length + (원본 - $$ 제거의 차이) if (taggedKeywordArray != null) { for (ColoringWord word : taggedKeywordArray) { - String normalizedLine = ConfigureView.removeVariableString(line); - int pos = normalizedLine.indexOf(word.getWord()); + String[] keywords = line.split("="); + String normalizedKeyword = ConfigureView.removeVariableString(keywords[0]); + int pos = normalizedKeyword.indexOf(word.getWord()); if (pos >= 0) { - int len = word.getWord().length() + (line.length() - normalizedLine.length()); + //int len = word.getWord().length() + (line.length() - normalizedKeyword.length()); + int len = keywords[0].length(); list.add(getDefaultHighlightStyle(event.lineOffset + pos, len, Display.getCurrent().getSystemColor(word.getColor()), word.isBold())); } } From 5b0d1d2e2dffb456dd9c2f04add5115dbc230fcd Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Wed, 1 Aug 2018 19:07:31 +0900 Subject: [PATCH 09/53] [client] telegraf host tag defaults host --- .../src/main/java/scouter/server/TgMeasurementConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java b/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java index b0dbde5d3..e495dc228 100644 --- a/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java +++ b/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java @@ -41,7 +41,7 @@ public class TgMeasurementConfig { private List objTypeAppendTags = new ArrayList(); private String objNameBase = TG; private List objNameAppendTags = new ArrayList(); - private String hostTag; + private String hostTag = "host"; private Map hostMapping = new HashMap(); private Map> tagFilter = new HashMap>(); From 3a2133fc09c52d3b6f04a6f75d8334e96f45ad64 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Wed, 1 Aug 2018 21:14:36 +0900 Subject: [PATCH 10/53] [webapp] add counter-model API --- .../scouter/lang/counters/CounterEngine.java | 8 ++ .../client/model/AgentModelThread.java | 12 ++- .../webapp/framework/client/net/LoginMgr.java | 28 ++--- .../framework/client/server/Server.java | 4 + .../layer/controller/InfoController.java | 16 +++ .../model/countermodel/CounterData.java | 36 +++++++ .../model/countermodel/CounterModelData.java | 100 ++++++++++++++++++ .../webapp/model/countermodel/FamilyData.java | 43 ++++++++ .../model/countermodel/ObjectTypeData.java | 34 ++++++ 9 files changed, 264 insertions(+), 17 deletions(-) create mode 100644 scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/CounterData.java create mode 100644 scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/CounterModelData.java create mode 100644 scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/FamilyData.java create mode 100644 scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/ObjectTypeData.java diff --git a/scouter.common/src/main/java/scouter/lang/counters/CounterEngine.java b/scouter.common/src/main/java/scouter/lang/counters/CounterEngine.java index 45777b3dc..4eee1bc7c 100644 --- a/scouter.common/src/main/java/scouter/lang/counters/CounterEngine.java +++ b/scouter.common/src/main/java/scouter/lang/counters/CounterEngine.java @@ -525,6 +525,14 @@ public Family addFamily(Family family) { public String[] getFamilyNames() { return familyMap.keyArray(); } + + public StringKeyLinkedMap getRawObjectTypeMap() { + return objTypeMap; + } + + public StringKeyLinkedMap getRawFamilyMap() { + return familyMap; + } public static void main(String[] args) { diff --git a/scouter.webapp/src/main/java/scouterx/webapp/framework/client/model/AgentModelThread.java b/scouter.webapp/src/main/java/scouterx/webapp/framework/client/model/AgentModelThread.java index c6a335b31..521fd5ff8 100644 --- a/scouter.webapp/src/main/java/scouterx/webapp/framework/client/model/AgentModelThread.java +++ b/scouter.webapp/src/main/java/scouterx/webapp/framework/client/model/AgentModelThread.java @@ -22,6 +22,7 @@ import scouter.lang.value.ListValue; import scouter.net.RequestCmd; import scouter.util.ThreadUtil; +import scouterx.webapp.framework.client.net.LoginMgr; import scouterx.webapp.framework.client.net.TcpProxy; import scouterx.webapp.framework.client.server.Server; import scouterx.webapp.framework.client.server.ServerManager; @@ -63,7 +64,7 @@ public void run() { while (brun) { fetchObjectList(); for (int i = 0; i < 20 && brun; i++) { - ThreadUtil.sleep(100); + ThreadUtil.sleep(500); } } } @@ -72,7 +73,7 @@ public synchronized void fetchObjectList() { Map tempAgentMap = new HashMap(); ArrayList objectPackList = new ArrayList(); boolean existUnknownType = false; - existServerset.clear(); + existServerSet.clear(); Set serverIdSet = ServerManager.getInstance().getOpenServerIdList(); if (serverIdSet.size() > 0) { Integer[] serverIds = serverIdSet.toArray(new Integer[serverIdSet.size()]); @@ -81,6 +82,7 @@ public synchronized void fetchObjectList() { if (server.isOpen() == false || server.getSession() == 0) { continue; } + LoginMgr.refreshCounterEngine(server); CounterEngine counterEngine = server.getCounterEngine(); TcpProxy proxy = TcpProxy.getTcpProxy(serverId); try { @@ -109,7 +111,7 @@ public synchronized void fetchObjectList() { } } if (agentList.size() > 0) { - existServerset.add(serverId); + existServerSet.add(serverId); } } catch (Exception e) { e.printStackTrace(); @@ -124,10 +126,10 @@ public synchronized void fetchObjectList() { this.existUnknownType = existUnknownType; } - private Set existServerset = new HashSet(); + private Set existServerSet = new HashSet(); public Set existServerSet() { - return existServerset; + return existServerSet; } public AgentObject getAgentObject(int objHash) { diff --git a/scouter.webapp/src/main/java/scouterx/webapp/framework/client/net/LoginMgr.java b/scouter.webapp/src/main/java/scouterx/webapp/framework/client/net/LoginMgr.java index 95ad00dfe..aa40b087b 100644 --- a/scouter.webapp/src/main/java/scouterx/webapp/framework/client/net/LoginMgr.java +++ b/scouter.webapp/src/main/java/scouterx/webapp/framework/client/net/LoginMgr.java @@ -88,17 +88,7 @@ public static LoginRequest loginInternal(Server server, String user, String encP server.getConnectionPool().initPool(server.getId()); server.setOpen(true); - CounterEngine counterEngine = server.getCounterEngine(); - MapPack m = getCounterXmlServer(server); - if (m != null) { - counterEngine.clear(); - Value v1 = m.get("default"); - counterEngine.parse(((BlobValue)v1).value); - v1 = m.get("custom"); - if (v1 != null) { - counterEngine.parse(((BlobValue)v1).value); - } - } + refreshCounterEngine(server); result.success = true; } } catch(Exception e){ @@ -108,7 +98,7 @@ public static LoginRequest loginInternal(Server server, String user, String encP } return result; } - + public static MapPack getCounterXmlServer(Server server) { TcpProxy tcp = TcpProxy.getTcpProxy(server); Pack p = null; @@ -122,5 +112,19 @@ public static MapPack getCounterXmlServer(Server server) { } return (MapPack) p; } + + public static void refreshCounterEngine(Server server) { + CounterEngine counterEngine = new CounterEngine(); + MapPack m = getCounterXmlServer(server); + if (m != null) { + Value v1 = m.get("default"); + counterEngine.parse(((BlobValue)v1).value); + v1 = m.get("custom"); + if (v1 != null) { + counterEngine.parse(((BlobValue)v1).value); + } + server.setCounterEngine(counterEngine); + } + } } diff --git a/scouter.webapp/src/main/java/scouterx/webapp/framework/client/server/Server.java b/scouter.webapp/src/main/java/scouterx/webapp/framework/client/server/Server.java index 5342ddf87..bf13ad7a9 100644 --- a/scouter.webapp/src/main/java/scouterx/webapp/framework/client/server/Server.java +++ b/scouter.webapp/src/main/java/scouterx/webapp/framework/client/server/Server.java @@ -192,6 +192,10 @@ public String getEmail() { public CounterEngine getCounterEngine() { return counterEngine; } + + public void setCounterEngine(CounterEngine counterEngine) { + this.counterEngine = counterEngine; + } public long getUsedMemory() { return usedMemory; diff --git a/scouter.webapp/src/main/java/scouterx/webapp/layer/controller/InfoController.java b/scouter.webapp/src/main/java/scouterx/webapp/layer/controller/InfoController.java index a263ec0b2..e9664fbe1 100644 --- a/scouter.webapp/src/main/java/scouterx/webapp/layer/controller/InfoController.java +++ b/scouter.webapp/src/main/java/scouterx/webapp/layer/controller/InfoController.java @@ -20,7 +20,9 @@ import io.swagger.annotations.Api; import scouterx.webapp.framework.annotation.NoAuth; +import scouterx.webapp.framework.client.server.Server; import scouterx.webapp.framework.client.server.ServerManager; +import scouterx.webapp.model.countermodel.CounterModelData; import scouterx.webapp.view.CommonResultView; import scouterx.webapp.view.ServerView; @@ -29,6 +31,7 @@ import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import java.util.List; import java.util.stream.Collectors; @@ -56,4 +59,17 @@ public CommonResultView> retrieveServers() { return CommonResultView.success(serverList); } + + /** + * get counter information + * + */ + @GET @Path("/counter-model") + @Consumes(MediaType.APPLICATION_JSON) + public CommonResultView retrieveCounterModel(@QueryParam("serverId") int serverId) { + Server server = ServerManager.getInstance().getServerIfNullDefault(serverId); + CounterModelData counterModelData = CounterModelData.of(server.getCounterEngine()); + + return CommonResultView.success(counterModelData); + } } diff --git a/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/CounterData.java b/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/CounterData.java new file mode 100644 index 000000000..b527de538 --- /dev/null +++ b/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/CounterData.java @@ -0,0 +1,36 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouterx.webapp.model.countermodel; + +import lombok.Builder; +import lombok.Getter; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 8. 1. + */ +@Getter +@Builder +public class CounterData { + String name; + String displayName; + String unit; + boolean totalizable; + String icon; + boolean isMaster; +} diff --git a/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/CounterModelData.java b/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/CounterModelData.java new file mode 100644 index 000000000..071ae1a04 --- /dev/null +++ b/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/CounterModelData.java @@ -0,0 +1,100 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouterx.webapp.model.countermodel; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import scouter.lang.Counter; +import scouter.lang.Family; +import scouter.lang.ObjectType; +import scouter.lang.counters.CounterEngine; +import scouter.util.StringKeyLinkedMap; + +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 8. 1. + */ +@Getter +@NoArgsConstructor +public class CounterModelData { + List families; + List objTypes; + + public static CounterModelData of(CounterEngine engine) { + CounterModelData counterModelData = new CounterModelData(); + counterModelData.families = makeFamilies(engine); + counterModelData.objTypes = makeObjTypes(engine); + + return counterModelData; + } + + private static List makeFamilies(CounterEngine engine) { + List families = new ArrayList<>(); + StringKeyLinkedMap familyMap = engine.getRawFamilyMap(); + Enumeration familyEnumeration = familyMap.values(); + + while (familyEnumeration.hasMoreElements()) { + Family family = familyEnumeration.nextElement(); + FamilyData familyData = new FamilyData(family.getName()); + + for (Counter counter : family.listCounters()) { + boolean isMasterCounter = false; + if (counter.getName().equals(family.getMaster())) { + isMasterCounter = true; + } + + CounterData counterData = CounterData.builder() + .name(counter.getName()) + .displayName(counter.getDisplayName()) + .unit(counter.getUnit()) + .totalizable(counter.isTotal()) + .icon(counter.getIcon()) + .isMaster(isMasterCounter).build(); + + familyData.addCounterData(counterData); + } + families.add(familyData); + } + + return families; + } + + private static List makeObjTypes(CounterEngine engine) { + List objTypes = new ArrayList<>(); + StringKeyLinkedMap objTypeMap = engine.getRawObjectTypeMap(); + Enumeration objTypeEnumeration = objTypeMap.values(); + + while (objTypeEnumeration.hasMoreElements()) { + ObjectType objType = objTypeEnumeration.nextElement(); + ObjectTypeData objectTypeData = ObjectTypeData.builder() + .name(objType.getName()) + .displayName(objType.getDisplayName()) + .familyName(objType.getFamily().getName()) + .isSubObject(objType.isSubObject()) + .build(); + + objTypes.add(objectTypeData); + } + + return objTypes; + } +} diff --git a/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/FamilyData.java b/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/FamilyData.java new file mode 100644 index 000000000..bf71a743f --- /dev/null +++ b/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/FamilyData.java @@ -0,0 +1,43 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouterx.webapp.model.countermodel; + +import lombok.Getter; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 8. 1. + */ +@Getter +@Setter +public class FamilyData { + String name; + List counters = new ArrayList<>(); + + public FamilyData(String name) { + this.name = name; + } + + public void addCounterData(CounterData counterData) { + counters.add(counterData); + } +} diff --git a/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/ObjectTypeData.java b/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/ObjectTypeData.java new file mode 100644 index 000000000..9dcc12e5b --- /dev/null +++ b/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/ObjectTypeData.java @@ -0,0 +1,34 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouterx.webapp.model.countermodel; + +import lombok.Builder; +import lombok.Getter; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 8. 1. + */ +@Getter +@Builder +public class ObjectTypeData { + String name; + String familyName; + String displayName; + boolean isSubObject; +} From af035bdc856a35b5604aa359d5f83a2b056d808c Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Wed, 1 Aug 2018 21:19:20 +0900 Subject: [PATCH 11/53] [webapp] add counter-model API --- .../scouterx/webapp/model/countermodel/CounterModelData.java | 1 + .../java/scouterx/webapp/model/countermodel/ObjectTypeData.java | 1 + 2 files changed, 2 insertions(+) diff --git a/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/CounterModelData.java b/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/CounterModelData.java index 071ae1a04..32cca5ea2 100644 --- a/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/CounterModelData.java +++ b/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/CounterModelData.java @@ -90,6 +90,7 @@ private static List makeObjTypes(CounterEngine engine) { .displayName(objType.getDisplayName()) .familyName(objType.getFamily().getName()) .isSubObject(objType.isSubObject()) + .icon(objType.getIcon()) .build(); objTypes.add(objectTypeData); diff --git a/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/ObjectTypeData.java b/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/ObjectTypeData.java index 9dcc12e5b..ae87527f5 100644 --- a/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/ObjectTypeData.java +++ b/scouter.webapp/src/main/java/scouterx/webapp/model/countermodel/ObjectTypeData.java @@ -30,5 +30,6 @@ public class ObjectTypeData { String name; String familyName; String displayName; + String icon; boolean isSubObject; } From 96eb4cb9b33e72146f95dcd174adb7fcca193431 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Wed, 1 Aug 2018 21:55:22 +0900 Subject: [PATCH 12/53] [server] add the option to set object type icon on a telegraf input config. --- .../main/java/scouter/server/Configure.java | 22 +++++++++++++++++-- .../scouter/server/TgMeasurementConfig.java | 9 ++++++++ .../http/handler/TelegrafInputHandler.java | 2 +- .../server/http/model/InfluxSingleLine.java | 6 +++++ 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/scouter.server/src/main/java/scouter/server/Configure.java b/scouter.server/src/main/java/scouter/server/Configure.java index bd59789bd..6dc359342 100644 --- a/scouter.server/src/main/java/scouter/server/Configure.java +++ b/scouter.server/src/main/java/scouter/server/Configure.java @@ -66,6 +66,8 @@ public class Configure extends Thread { private static final String TELEGRAF_INPUT_MEASUREMENT_COUNTER_MAPPINGS_POSTFIX = "_counter_mappings"; private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_BASE_POSTFIX = "_objType_base"; private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_APPEND_TAGS_POSTFIX = "_objType_append_tags"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_ICON_POSTFIX = "_objType_icon"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_BASE_POSTFIX = "_objName_base"; private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_APPEND_TAGS_POSTFIX = "_objName_append_tags"; private static final String TELEGRAF_INPUT_MEASUREMENT_HOST_TAG_POSTFIX = "_host_tag"; @@ -365,6 +367,7 @@ public final static synchronized Configure newInstanceForTestCase() { "$measurement$ is a variable to the measurement name of the line protocol.\n" + "eg) input_telegraf_$redis_keyspace$_enabled=true") public boolean input_telegraf_$measurement$_enabled = true; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + "print telegraf line protocol of the $measurement$ to STDOUT") public boolean input_telegraf_$measurement$_debug_enabled = false; @@ -375,6 +378,7 @@ public final static synchronized Configure newInstanceForTestCase() { "It also have not(!) condition. eg) cpu:!cpu-total") @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) public String input_telegraf_$measurement$_tag_filter = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + "which fields of $measurement$ are mapped to scouter's counter.\n" + "format: {line-protocol field name}:{scouter counter name}:{display name?}:{unit?}:{hasTotal?}\n" + @@ -385,26 +389,36 @@ public final static synchronized Configure newInstanceForTestCase() { "eg)cpu:cpu-$cpu-no$ -- this example shows counter definition with tag value.") @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) public String input_telegraf_$measurement$_counter_mappings = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + "define an objectType prefix. objectType is defined with some tags.\n" + "see input_telegraf_$measurement$_objType_append_tags option.") public String input_telegraf_$measurement$_objType_base = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + "this tags's value is appended to objType_base.\nIt can have multiple values. eg)tag1,tag2") @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) public String input_telegraf_$measurement$_objType_append_tags = ""; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "this tags's value is object type's icon file name that the scouter client have. eg)redis") + public String input_telegraf_$measurement$_objType_icon = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + "define an objectName prefix. objectName is defined with some tags.\n" + "see input_telegraf_$measurement$_objName_append_tags option.") public String input_telegraf_$measurement$_objName_base = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + "this tags's value is appended to objName_base.\n" + "It can have multiple values. eg)tag1,tag2") @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) public String input_telegraf_$measurement$_objName_append_tags = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + "tag name to define host") - public String input_telegraf_$measurement$_host_tag = ""; + public String input_telegraf_$measurement$_host_tag = "host"; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + "which host value defined with $measurement$_host_tag option is mapped to scouter's host.\n" + "It can have multiple values. eg)hostValue1:scouterHost1,hostValue2:scouterHost2") @@ -628,9 +642,10 @@ private void apply() { this.input_telegraf_$measurement$_counter_mappings = getValue("input_telegraf_$measurement$_counter_mappings", ""); this.input_telegraf_$measurement$_objType_base = getValue("input_telegraf_$measurement$_objType_base", ""); this.input_telegraf_$measurement$_objType_append_tags = getValue("input_telegraf_$measurement$_objType_append_tags", ""); + this.input_telegraf_$measurement$_objType_icon = getValue("input_telegraf_$measurement$_objType_icon", ""); this.input_telegraf_$measurement$_objName_base = getValue("input_telegraf_$measurement$_objName_base", ""); this.input_telegraf_$measurement$_objName_append_tags = getValue("input_telegraf_$measurement$_objName_append_tags", ""); - this.input_telegraf_$measurement$_host_tag = getValue("input_telegraf_$measurement$_host_tag", ""); + this.input_telegraf_$measurement$_host_tag = getValue("input_telegraf_$measurement$_host_tag", "host"); this.input_telegraf_$measurement$_host_mappings = getValue("input_telegraf_$measurement$_host_mappings", ""); ConfObserver.exec(); @@ -737,6 +752,9 @@ protected void applyTelegrafInputConfig() { } tConfig.setObjTypeAppendTags(Arrays.asList(tags)); + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_ICON_POSTFIX.equals(postfix)) { + tConfig.setObjTypeIcon(value); + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_BASE_POSTFIX.equals(postfix)) { tConfig.setObjNameBase(value); diff --git a/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java b/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java index e495dc228..1885424e9 100644 --- a/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java +++ b/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java @@ -39,6 +39,7 @@ public class TgMeasurementConfig { private Map counterMapping = new HashMap(); private String objTypeBase = TG; private List objTypeAppendTags = new ArrayList(); + private String objTypeIcon = ""; private String objNameBase = TG; private List objNameAppendTags = new ArrayList(); private String hostTag = "host"; @@ -89,6 +90,14 @@ public void setObjTypeAppendTags(List objTypeAppendTags) { this.objTypeAppendTags = objTypeAppendTags; } + public String getObjTypeIcon() { + return objTypeIcon; + } + + public void setObjTypeIcon(String objTypeIcon) { + this.objTypeIcon = objTypeIcon; + } + public String getObjNameBase() { return objNameBase; } diff --git a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java index a985f8100..a15ce184a 100644 --- a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java +++ b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java @@ -199,7 +199,7 @@ private void registerNewObjType0(InfluxSingleLine line) { ObjectType objectType = new ObjectType(); objectType.setName(objTypeName); objectType.setDisplayName(objTypeName); - objectType.setIcon(""); + objectType.setIcon(line.getObjTypeIcon()); Family family = new Family(); objectType.setFamily(family); diff --git a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java index d8f4b43f4..a24a1dd3f 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java +++ b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java @@ -40,6 +40,7 @@ public class InfluxSingleLine { private String measurement; private String host; private String objType; + private String objTypeIcon; private String objName; private int objHash; long receivedTime; @@ -63,6 +64,7 @@ private InfluxSingleLine(TgMeasurementConfig tConfig, this.timestampOrigin = timestampOrigin; this.host = tConfig.toHost(tags); this.objType = tConfig.toObjType(tags); + this.objTypeIcon = tConfig.getObjTypeIcon(); this.objName = tConfig.toObjName(host, tags); this.objHash = HashUtil.hash(objName); this.debug = debug; @@ -258,6 +260,10 @@ public String getObjType() { return objType; } + public String getObjTypeIcon() { + return objTypeIcon; + } + public String getObjName() { return objName; } From 652458f33dda132d2b6f8e3c2fc7b4e2caa768e5 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Sun, 5 Aug 2018 13:28:04 +0900 Subject: [PATCH 13/53] [agent.java] bug fix - the bug when the option fullstack on sql error is activated, scouter miss shows as thread is always on running. --- .../main/java/scouter/agent/summary/ServiceSummary.java | 3 +++ .../src/main/java/scouter/agent/trace/TraceApiCall.java | 8 ++++---- .../src/main/java/scouter/agent/trace/TraceMain.java | 8 ++++---- .../src/main/java/scouter/agent/trace/TraceSQL.java | 8 ++++---- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/scouter.agent.java/src/main/java/scouter/agent/summary/ServiceSummary.java b/scouter.agent.java/src/main/java/scouter/agent/summary/ServiceSummary.java index 13f24bfe2..c76afcae1 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/summary/ServiceSummary.java +++ b/scouter.agent.java/src/main/java/scouter/agent/summary/ServiceSummary.java @@ -72,6 +72,9 @@ public void process(XLogPack p) { public ErrorData process(Throwable thr, int message, int service, long txid, int sql, int api) { if (conf.summary_enabled == false) return null; + if (thr == null) + return null; + String errName = thr.getClass().getName(); int errHash = DataProxy.sendError(errName); diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java index f4c771240..e8ca4ee3c 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java @@ -147,11 +147,11 @@ public static void endApicall(Object stat, Object returnValue, Throwable thr) { StringBuffer sb = new StringBuffer(); sb.append(msg).append("\n"); ThreadUtil.getStackTrace(sb, thr, conf.profile_fullstack_max_lines); - thr = thr.getCause(); - while (thr != null) { + Throwable cause = thr.getCause(); + while (cause != null) { sb.append("\nCause...\n"); - ThreadUtil.getStackTrace(sb, thr, conf.profile_fullstack_max_lines); - thr = thr.getCause(); + ThreadUtil.getStackTrace(sb, cause, conf.profile_fullstack_max_lines); + cause = cause.getCause(); } msg = sb.toString(); } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java index d427f94bf..d8e3e7b65 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java @@ -1527,11 +1527,11 @@ public static void endSendRedisCommand(byte[] cmd, byte[][] args, Object localCo StringBuffer sb = new StringBuffer(); sb.append(msg).append("\n"); ThreadUtil.getStackTrace(sb, thr, conf.profile_fullstack_max_lines); - thr = thr.getCause(); - while (thr != null) { + Throwable cause = thr.getCause(); + while (cause != null) { sb.append("\nCause...\n"); - ThreadUtil.getStackTrace(sb, thr, conf.profile_fullstack_max_lines); - thr = thr.getCause(); + ThreadUtil.getStackTrace(sb, cause, conf.profile_fullstack_max_lines); + cause = cause.getCause(); } msg = sb.toString(); } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceSQL.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceSQL.java index 6dd83f3db..32ef7f142 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceSQL.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceSQL.java @@ -238,11 +238,11 @@ public static void end(Object stat, Throwable thr, int updatedCount) { StringBuffer sb = new StringBuffer(); sb.append(msg).append("\n"); ThreadUtil.getStackTrace(sb, thr, conf.profile_fullstack_max_lines); - thr = thr.getCause(); - while (thr != null) { + Throwable cause = thr.getCause(); + while (cause != null) { sb.append("\nCause...\n"); - ThreadUtil.getStackTrace(sb, thr, conf.profile_fullstack_max_lines); - thr = thr.getCause(); + ThreadUtil.getStackTrace(sb, cause, conf.profile_fullstack_max_lines); + cause = cause.getCause(); } msg = sb.toString(); } From 9facf4ac1b4207a50d148a2c50eac86730cfce4a Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Sun, 5 Aug 2018 15:26:42 +0900 Subject: [PATCH 14/53] [webapp] refactoring --- .../client/thread/ServerSessionObserver.java | 54 ++++++++++--------- .../client/thread/XLogRetrieveThread.java | 48 +++++++++-------- 2 files changed, 55 insertions(+), 47 deletions(-) diff --git a/scouter.webapp/src/main/java/scouterx/webapp/framework/client/thread/ServerSessionObserver.java b/scouter.webapp/src/main/java/scouterx/webapp/framework/client/thread/ServerSessionObserver.java index d669ed090..7c0b3d51a 100644 --- a/scouter.webapp/src/main/java/scouterx/webapp/framework/client/thread/ServerSessionObserver.java +++ b/scouter.webapp/src/main/java/scouterx/webapp/framework/client/thread/ServerSessionObserver.java @@ -52,29 +52,20 @@ public synchronized static void load() { public void run() { ThreadUtil.sleep(CHECK_INTERVAL); while (true) { - try { - Set idSet = ServerManager.getInstance().getOpenServerIdList(); - for (int serverId : idSet) { - Server server = ServerManager.getInstance().getServer(serverId); - if (server == null) { - continue; - } - if (server.getSession() == 0) { - LoginRequest result = LoginMgr.login(server); - if (result.success) { - log.info("Success re-login to {}", server.getName()); - } else { - log.error("Failed re-login to {} : {}", server.getName(), result.getErrorMessage()); - } - } - } + process(); + ThreadUtil.sleep(CHECK_INTERVAL); + } + } - Set closedSet = ServerManager.getInstance().getClosedServerIdList(); - for (int serverId : closedSet) { - Server server = ServerManager.getInstance().getServer(serverId); - if (server == null) { - continue; - } + private void process() { + try { + Set idSet = ServerManager.getInstance().getOpenServerIdList(); + for (int serverId : idSet) { + Server server = ServerManager.getInstance().getServer(serverId); + if (server == null) { + continue; + } + if (server.getSession() == 0) { LoginRequest result = LoginMgr.login(server); if (result.success) { log.info("Success re-login to {}", server.getName()); @@ -82,10 +73,23 @@ public void run() { log.error("Failed re-login to {} : {}", server.getName(), result.getErrorMessage()); } } - } catch (Throwable t) { - t.printStackTrace(); } - ThreadUtil.sleep(CHECK_INTERVAL); + + Set closedSet = ServerManager.getInstance().getClosedServerIdList(); + for (int serverId : closedSet) { + Server server = ServerManager.getInstance().getServer(serverId); + if (server == null) { + continue; + } + LoginRequest result = LoginMgr.login(server); + if (result.success) { + log.info("Success re-login to {}", server.getName()); + } else { + log.error("Failed re-login to {} : {}", server.getName(), result.getErrorMessage()); + } + } + } catch (Throwable t) { + t.printStackTrace(); } } } diff --git a/scouter.webapp/src/main/java/scouterx/webapp/framework/client/thread/XLogRetrieveThread.java b/scouter.webapp/src/main/java/scouterx/webapp/framework/client/thread/XLogRetrieveThread.java index 981367e31..69fecd175 100644 --- a/scouter.webapp/src/main/java/scouterx/webapp/framework/client/thread/XLogRetrieveThread.java +++ b/scouter.webapp/src/main/java/scouterx/webapp/framework/client/thread/XLogRetrieveThread.java @@ -62,33 +62,37 @@ public XLogRetrieveThread(Server server) { public void run() { while (true) { ThreadUtil.sleep(CHECK_INTERVAL); - if (server.isOpen() == false || server.getSession() == 0) { - continue; - } + process(); + } + } - try { - RealTimeXLogRequest realTimeXLogRequest = new RealTimeXLogRequest(loop, index, server.getId(), Collections.emptySet()); - xLogConsumer.handleRealTimeXLog(realTimeXLogRequest, in -> { - Pack p = in.readPack(); - if (p.getPackType() == PackEnum.MAP) { //meta data arrive ahead of xlog pack - MapPack metaPack = (MapPack) p; - index = metaPack.getInt(ParamConstant.OFFSET_INDEX); - loop = metaPack.getInt(ParamConstant.OFFSET_LOOP); - } else { - xLogLoopCache.add((XLogPack) p); - } - }); + private void process() { + if (server.isOpen() == false || server.getSession() == 0) { + return; + } - } catch (Throwable t) { - if (t.getMessage() != null && t.getMessage().equals(lastError) && System.currentTimeMillis() < (lastTime + EXEPTION_IGNORE_TIME)) { - //ignore + try { + RealTimeXLogRequest realTimeXLogRequest = new RealTimeXLogRequest(loop, index, server.getId(), Collections.emptySet()); + xLogConsumer.handleRealTimeXLog(realTimeXLogRequest, in -> { + Pack p = in.readPack(); + if (p.getPackType() == PackEnum.MAP) { //meta data arrive ahead of xlog pack + MapPack metaPack = (MapPack) p; + index = metaPack.getInt(ParamConstant.OFFSET_INDEX); + loop = metaPack.getInt(ParamConstant.OFFSET_LOOP); } else { - lastError = t.getMessage(); - lastTime = System.currentTimeMillis(); - log.error("[XLogThread] at {}, error:{}", server, t.getMessage()); + xLogLoopCache.add((XLogPack) p); } - continue; + }); + + } catch (Throwable t) { + if (t.getMessage() != null && t.getMessage().equals(lastError) && System.currentTimeMillis() < (lastTime + EXEPTION_IGNORE_TIME)) { + //ignore + } else { + lastError = t.getMessage(); + lastTime = System.currentTimeMillis(); + log.error("[XLogThread] at {}, error:{}", server, t.getMessage()); } + return; } } } From 3c1571b5dd3876f906766a9b9cd1db3e413c6f90 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Tue, 7 Aug 2018 18:36:45 +0900 Subject: [PATCH 15/53] [topology support] on working. --- .../counter/CounterExecutingManager.java | 193 ++++++++++++------ .../counter/InteractionCounterBasket.java | 48 +++++ .../counter/anotation/InteractionCounter.java | 27 +++ .../agent/counter/meter/MeterInteraction.java | 130 ++++++++++++ .../meter/MeterInteractionManager.java | 161 +++++++++++++++ .../agent/counter/task/InteractionPerf.java | 47 +++++ .../scouter/agent/netio/data/DataProxy.java | 5 +- .../lang/counters/CounterConstants.java | 6 + .../lang/pack/InteractionPerfCounterPack.java | 134 ++++++++++++ .../main/java/scouter/lang/pack/PackEnum.java | 1 + 10 files changed, 692 insertions(+), 60 deletions(-) create mode 100644 scouter.agent.java/src/main/java/scouter/agent/counter/InteractionCounterBasket.java create mode 100644 scouter.agent.java/src/main/java/scouter/agent/counter/anotation/InteractionCounter.java create mode 100644 scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteraction.java create mode 100644 scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteractionManager.java create mode 100644 scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java create mode 100644 scouter.common/src/main/java/scouter/lang/pack/InteractionPerfCounterPack.java diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/CounterExecutingManager.java b/scouter.agent.java/src/main/java/scouter/agent/counter/CounterExecutingManager.java index 28706362a..1923b5014 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/counter/CounterExecutingManager.java +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/CounterExecutingManager.java @@ -15,21 +15,32 @@ * limitations under the License. */ package scouter.agent.counter; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Set; + import scouter.agent.Configure; import scouter.agent.Logger; import scouter.agent.counter.anotation.Counter; +import scouter.agent.counter.anotation.InteractionCounter; import scouter.agent.netio.data.DataProxy; import scouter.lang.pack.PerfCounterPack; import scouter.util.ThreadUtil; import scouter.util.scan.Scanner; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Set; public class CounterExecutingManager extends Thread { + + Configure conf = Configure.getInstance(); private static CounterExecutingManager instance; + private List countStatList = new ArrayList(); + private List interactionCountStatList = new ArrayList(); + + private CounterExecutingManager() { + } + public final static synchronized CounterExecutingManager getInstance() { if (instance == null) { instance = new CounterExecutingManager(); @@ -39,8 +50,7 @@ public final static synchronized CounterExecutingManager getInstance() { } return instance; } - - Configure conf = Configure.getInstance(); + public void run() { while (true) { ThreadUtil.sleep(1000); @@ -48,45 +58,105 @@ public void run() { continue; } long now = System.currentTimeMillis(); - CounterBasket pw = new CounterBasket(); - for (int i = 0; i < taskSec.size(); i++) { - CountStat r = taskSec.get(i); - try { - if (r.counter.interval() <= now - r.xtime) { - r.xtime = now; - r.counter.process(pw); - } - } catch (Throwable t) { - t.printStackTrace(); + gatherAndSendCounter(now); + gatherAndSendInteractionCounter(now); + } + } + + private void gatherAndSendCounter(long now) { + CounterBasket basket = new CounterBasket(); + for (int i = 0; i < countStatList.size(); i++) { + CountStat r = countStatList.get(i); + try { + if (r.counter.interval() <= now - r.xtime) { + r.xtime = now; + r.counter.process(basket); } + } catch (Throwable t) { + t.printStackTrace(); } - // - PerfCounterPack[] pks = pw.getList(); - DataProxy.sendCounter(pks); } + + PerfCounterPack[] packs = basket.getList(); + DataProxy.sendCounter(packs); } - private CounterExecutingManager() { - } - private List taskSec = new ArrayList(); - static class CountStat { - Invocation counter; - long xtime; - CountStat(Invocation counter) { - this.counter = counter; + + private void gatherAndSendInteractionCounter(long now) { + InteractionCounterBasket basket = new InteractionCounterBasket(); + for (int i = 0; i < interactionCountStatList.size(); i++) { + CountStat r = interactionCountStatList.get(i); + try { + if (r.counter.interval() <= now - r.xtime) { + r.xtime = now; + r.counter.process(basket); + } + } catch (Throwable t) { + t.printStackTrace(); + } } + + //TODO Enable after scouter server working +// InteractionPerfCounterPack[] packs = basket.getList(); +// DataProxy.sendCounter(packs); + } + + public void putCounter(Invocation counter) { + countStatList.add(new CountStat(counter)); } - public void put(Invocation counter) { - taskSec.add(new CountStat(counter)); + + public void putInteractionCounter(Invocation counter) { + interactionCountStatList.add(new CountStat(counter)); + } + + public static void load() { + Set defaultTasks = new Scanner("scouter.agent.counter.task").process(); + Set customTasks = new Scanner(System.getProperty("scouter.task")).process(); + defaultTasks.addAll(customTasks); + + int counterCount = 0; + int interactionCounterCount = 0; + Iterator itr = defaultTasks.iterator(); + while (itr.hasNext()) { + try { + Class c = Class.forName(itr.next()); + if (Modifier.isPublic(c.getModifiers()) == false) + continue; + Method[] m = c.getDeclaredMethods(); + for (int i = 0; i < m.length; i++) { + Counter cntAn = m[i].getAnnotation(Counter.class); + if (cntAn != null) { + int interval=cntAn.interval(); + CounterExecutingManager.getInstance().putCounter(new Invocation(c.newInstance(), m[i], interval)); + counterCount++; + } + + InteractionCounter icntAnot = m[i].getAnnotation(InteractionCounter.class); + if (icntAnot != null) { + int interval=icntAnot.interval(); + CounterExecutingManager.getInstance().putInteractionCounter(new Invocation(c.newInstance(), m[i], interval)); + interactionCounterCount++; + } + } + } catch (Throwable t) { + scouter.agent.Logger.println("A112", ThreadUtil.getStackTrace(t)); + } + } + scouter.agent.Logger.println("A113", "Counter Collector Started (#" + counterCount + ")"); + scouter.agent.Logger.println("A113", "InteractionCounter Collector Started (#" + counterCount + ")"); } + + protected static class Invocation { Object object; Method method; long time; + public Invocation(Object object, Method method, long interval) { this.object = object; this.method = method; this.time=interval; } + public void process(CounterBasket pw) throws Throwable { try { method.invoke(object, pw); @@ -94,38 +164,43 @@ public void process(CounterBasket pw) throws Throwable { Logger.println("A111", object.getClass() + " " + method + " " + e); } } + + public void process(InteractionCounterBasket pw) throws Throwable { + try { + method.invoke(object, pw); + } catch (Exception e) { + Logger.println("A111-1", object.getClass() + " " + method + " " + e); + } + } + public long interval() { return this.time; } } - public static void load() { - Set defaultTasks = new Scanner("scouter.agent.counter.task").process(); - Set customTasks = new Scanner(System.getProperty("scouter.task")).process(); - defaultTasks.addAll(customTasks); - - int n = 0; - Iterator itr = defaultTasks.iterator(); - while (itr.hasNext()) { - try { - Class c = Class.forName(itr.next()); - if (Modifier.isPublic(c.getModifiers()) == false) - continue; - Method[] m = c.getDeclaredMethods(); - for (int i = 0; i < m.length; i++) { - Counter mapAn = (Counter) m[i].getAnnotation(Counter.class); - if (mapAn == null) - continue; - int interval=mapAn.interval(); - CounterExecutingManager.getInstance().put(new Invocation(c.newInstance(), m[i], interval)); - n++; - } - } catch (Throwable t) { - scouter.agent.Logger.println("A112", ThreadUtil.getStackTrace(t)); - } + + static class CountStat { + Invocation counter; + long xtime; + + CountStat(Invocation counter) { + this.counter = counter; } - scouter.agent.Logger.println("A113", "Counter Collector Started (#" + n + ")"); - } - public static void main(String[] args) { - load(); } } + + + + + + + + + + + + + + + + + diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/InteractionCounterBasket.java b/scouter.agent.java/src/main/java/scouter/agent/counter/InteractionCounterBasket.java new file mode 100644 index 000000000..ed64a3895 --- /dev/null +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/InteractionCounterBasket.java @@ -0,0 +1,48 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.agent.counter; + +import scouter.agent.Configure; +import scouter.lang.pack.InteractionPerfCounterPack; + +import java.util.HashMap; +import java.util.Map; + +public class InteractionCounterBasket { + + private Map table = new HashMap(); + + public InteractionPerfCounterPack getPack(String objName, String interactionType) { + String key = objName + interactionType; + InteractionPerfCounterPack p = table.get(key); + if (p == null) { + p = new InteractionPerfCounterPack(objName, interactionType); + table.put(key, p); + } + return p; + } + + public InteractionPerfCounterPack getPack(String interactionType) { + return getPack(Configure.getInstance().getObjName(), interactionType); + } + + public InteractionPerfCounterPack[] getList() { + return (InteractionPerfCounterPack[]) table.values().toArray(new InteractionPerfCounterPack[table.size()]); + } +} \ No newline at end of file diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/anotation/InteractionCounter.java b/scouter.agent.java/src/main/java/scouter/agent/counter/anotation/InteractionCounter.java new file mode 100644 index 000000000..f7f4f64f7 --- /dev/null +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/anotation/InteractionCounter.java @@ -0,0 +1,27 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.agent.counter.anotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface InteractionCounter { + int interval() default 2000; //default interval 2000 ms +} \ No newline at end of file diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteraction.java b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteraction.java new file mode 100644 index 000000000..a138c4c59 --- /dev/null +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteraction.java @@ -0,0 +1,130 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.agent.counter.meter; + +import scouter.lang.ref.INT; +import scouter.lang.ref.LONG; +import scouter.util.MeteringUtil; +import scouter.util.MeteringUtil.Handler; + +public class MeterInteraction { + + private String interactionName; + + public MeterInteraction(String interactionName) { + this.interactionName = interactionName; + } + + final static class Bucket { + int count; + long time; + int error; + } + + private MeteringUtil meter = new MeteringUtil() { + protected Bucket create() { + return new Bucket(); + }; + + protected void clear(Bucket o) { + o.count = 0; + o.error = 0; + o.time = 0L; + } + }; + + public String getInteractionName() { + return interactionName; + } + + public synchronized void add(int elapsed, boolean err) { + Bucket b = meter.getCurrentBucket(); + b.count++; + b.time += elapsed; + if (err) { + b.error++; + } + } + + public float getTps(int period) { + final INT sum = new INT(); + period = meter.search(period, new Handler() { + public void process(Bucket b) { + sum.value += b.count; + } + }); + return (float) ((double) sum.value / period); + } + + public int getAvgTime(int period) { + final LONG sum = new LONG(); + final INT cnt = new INT(); + meter.search(period, new Handler() { + public void process(Bucket b) { + sum.value += b.time; + cnt.value += b.count; + + } + }); + return (int) ((cnt.value == 0) ? 0 : sum.value / cnt.value); + } + + public long getSumTime(int period) { + final LONG sum = new LONG(); + period = meter.search(period, new Handler() { + public void process(Bucket b) { + sum.value += b.time; + } + }); + return ((period == 0) ? 0 : sum.value / period); + } + + public int getCount(int period) { + + final INT sum = new INT(); + meter.search(period, new Handler() { + public void process(Bucket b) { + sum.value += b.count; + } + }); + return sum.value; + } + + public int getErrorCount(int period) { + final INT sum = new INT(); + meter.search(period, new Handler() { + public void process(Bucket b) { + sum.value += b.error; + } + }); + return sum.value; + } + + public float getErrorRate(int period) { + final INT cnt = new INT(); + final INT err = new INT(); + meter.search(period, new Handler() { + public void process(Bucket b) { + cnt.value += b.count; + err.value += b.error; + } + }); + return (float) ((cnt.value == 0) ? 0 : (((double) err.value / cnt.value) * 100.0)); + } +} \ No newline at end of file diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteractionManager.java b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteractionManager.java new file mode 100644 index 000000000..9ea3475e1 --- /dev/null +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteractionManager.java @@ -0,0 +1,161 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.agent.counter.meter; + +import org.apache.commons.lang.builder.EqualsBuilder; +import scouter.agent.Configure; +import scouter.util.Pair; +import scouter.util.RequestQueue; +import scouter.util.ThreadUtil; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import static scouter.lang.counters.CounterConstants.INTR_API_INCOMING; +import static scouter.lang.counters.CounterConstants.INTR_API_OUTGOING; +import static scouter.lang.counters.CounterConstants.INTR_DB_CALL; +import static scouter.lang.counters.CounterConstants.INTR_REDIS_CALL; + +public class MeterInteractionManager extends Thread { + + private static MeterInteractionManager instance; + private static Configure conf = Configure.getInstance(); + + private RequestQueue> queue = new RequestQueue>(1024); + + private static Map apiOutgoingMeterMap = new ConcurrentHashMap(); + private static Map apiIncomingMeterMap = new ConcurrentHashMap(); + private static Map dbCallMeterMap = new ConcurrentHashMap(); + private static Map redisCallMeterMap = new ConcurrentHashMap(); + + // private static MeterInteraction redisCallMeter = new MeterInteraction(INTR_REDIS_CALL); + // private static MeterInteraction dbCallMeter = new MeterInteraction(INTR_DB_CALL); + // private static MeterInteraction apiIncomingMeter = new MeterInteraction(INTR_API_INCOMING); + // private static MeterInteraction apiOutgoingMeter = new MeterInteraction(INTR_API_OUTGOING); + + private MeterInteractionManager() { + } + + public final static synchronized MeterInteractionManager getInstance() { + if (instance == null) { + instance = new MeterInteractionManager(); + instance.setDaemon(true); + instance.setName(ThreadUtil.getName(instance)); + instance.start(); + } + return instance; + } + + public void run() { + while (true) { + Pair pair = queue.get(); + //TODO create meter from key - At!! type?? + } + } + + /** + * @return nullable + */ + public MeterInteraction getApiOutgoingMeter(String fromName, String toName) { + Key key = new Key(fromName, toName); + MeterInteraction meter = apiOutgoingMeterMap.get(key); + if (meter == null) { + queue.put(new Pair(INTR_API_OUTGOING, key)); + } + return meter; + } + + /** + * @return nullable + */ + public MeterInteraction getApiIncomingMeter(String fromName, String toName) { + Key key = new Key(fromName, toName); + MeterInteraction meter = apiIncomingMeterMap.get(key); + if (meter == null) { + queue.put(new Pair(INTR_API_INCOMING, key)); + } + return meter; + } + + /** + * @return nullable + */ + public MeterInteraction getDbCallMeter(String fromName, String toName) { + Key key = new Key(fromName, toName); + MeterInteraction meter = dbCallMeterMap.get(key); + if (meter == null) { + queue.put(new Pair(INTR_DB_CALL, key)); + } + return meter; + } + + /** + * @return nullable + */ + public MeterInteraction getRedisCallMeter(String fromName, String toName) { + Key key = new Key(fromName, toName); + MeterInteraction meter = redisCallMeterMap.get(key); + if (meter == null) { + queue.put(new Pair(INTR_REDIS_CALL, key)); + } + return meter; + } + + public Map getApiOutgoingMeterMap() { + return apiOutgoingMeterMap; + } + + public Map getApiIncomingMeterMap() { + return apiIncomingMeterMap; + } + + public Map getDbCallMeterMap() { + return dbCallMeterMap; + } + + public Map getRedisCallMeterMap() { + return redisCallMeterMap; + } + + public static class Key { + private String fromName; + private String toName; + + public Key(String fromName, String toName) { + this.fromName = fromName; + this.toName = toName; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Key key = (Key) o; + return new EqualsBuilder() + .append(fromName, key.fromName) + .append(toName, key.toName) + .isEquals(); + } + + @Override + public int hashCode() { + return fromName.hashCode() ^ toName.hashCode(); + } + } +} \ No newline at end of file diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java b/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java new file mode 100644 index 000000000..e3e17fbe9 --- /dev/null +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java @@ -0,0 +1,47 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.agent.counter.task; + +import scouter.agent.Configure; +import scouter.agent.counter.InteractionCounterBasket; +import scouter.agent.counter.anotation.InteractionCounter; +import scouter.agent.counter.meter.MeterInteraction; +import scouter.agent.counter.meter.MeterInteractionManager; +import scouter.lang.pack.InteractionPerfCounterPack; + +public class InteractionPerf { + + private Configure conf = Configure.getInstance(); + + @InteractionCounter + public void getInteractionCounter(InteractionCounterBasket basket) { + + MeterInteraction apiOutgoingMeter = MeterInteractionManager.getApiOutgoingMeter(); + InteractionPerfCounterPack pack = basket.getPack(apiOutgoingMeter.getInteractionName()); + + int period = 30; + int count = apiOutgoingMeter.getCount(period); + int errorCount = apiOutgoingMeter.getErrorCount(period); + long totalElapsed = apiOutgoingMeter.getSumTime(period); + + + } + + +} diff --git a/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java b/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java index 649862a79..8cf8360fd 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java +++ b/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java @@ -221,7 +221,9 @@ public static void sendProfile(List p, TraceContext x) { // udp.add(pk); sendDirect(pk); } - public static void sendCounter(PerfCounterPack[] p) { + + //only for counterPack & interactionCounterPack + public static void sendCounter(Pack[] p) { // udp.add(p); try { List buff = new ArrayList(); @@ -243,6 +245,7 @@ public static void sendCounter(PerfCounterPack[] p) { } catch (Exception e) { } } + public static void sendHeartBeat(ObjectPack p) { udpCollect.add(p); if (conf._log_udp_object_enabled) { diff --git a/scouter.common/src/main/java/scouter/lang/counters/CounterConstants.java b/scouter.common/src/main/java/scouter/lang/counters/CounterConstants.java index fd2da7e59..423689237 100644 --- a/scouter.common/src/main/java/scouter/lang/counters/CounterConstants.java +++ b/scouter.common/src/main/java/scouter/lang/counters/CounterConstants.java @@ -157,4 +157,10 @@ public class CounterConstants { public static final String BATCH_START = "BatchStart"; public static final String BATCH_END = "BatchEnd"; public static final String BATCH_ENDNOSIGNAL = "BatchEndNoSignal"; + + // interaction counters + public static final String INTR_API_OUTGOING = "INTR_API_OUTGOING"; + public static final String INTR_API_INCOMING = "INTR_API_INCOMING"; + public static final String INTR_DB_CALL = "INTR_DB_CALL"; + public static final String INTR_REDIS_CALL = "INTR_REDIS_CALL"; } diff --git a/scouter.common/src/main/java/scouter/lang/pack/InteractionPerfCounterPack.java b/scouter.common/src/main/java/scouter/lang/pack/InteractionPerfCounterPack.java new file mode 100644 index 000000000..a40ba1702 --- /dev/null +++ b/scouter.common/src/main/java/scouter/lang/pack/InteractionPerfCounterPack.java @@ -0,0 +1,134 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.lang.pack; + +import scouter.io.DataInputX; +import scouter.io.DataOutputX; +import scouter.lang.value.FloatValue; +import scouter.lang.value.MapValue; +import scouter.lang.value.NumberValue; +import scouter.lang.value.Value; + +import java.io.IOException; + +/** + * Object that contains counter information + */ +public class InteractionPerfCounterPack implements Pack { + + /** + * Counter time + */ + public long time; + /** + * Object name + */ + public String objName; + /** + * Interaction type @ CounterConstants + */ + public String interactionType; + + public String fromName; + public String fromTextType; + public String toName; + public String toTextType; + + public int period; + public int count; + public int errorCount; + public long totalElapsed; + + public MapValue customData = new MapValue(); + + public InteractionPerfCounterPack(String objName, String interactionType) { + this.objName = objName; + this.interactionType = interactionType; + } + + public byte getPackType() { + return PackEnum.PERF_COUNTER; + } + + public void write(DataOutputX dout) throws IOException { + dout.writeLong(time); + dout.writeText(objName); + dout.writeText(fromName); + dout.writeText(fromTextType); + dout.writeText(toName); + dout.writeText(toTextType); + dout.writeInt(period); + dout.writeInt(count); + dout.writeInt(errorCount); + dout.writeLong(totalElapsed); + dout.writeValue(customData); + } + + public Pack read(DataInputX din) throws IOException { + this.time = din.readLong(); + this.objName = din.readText(); + this.fromName = din.readText(); + this.fromTextType = din.readText(); + this.toName = din.readText(); + this.toTextType = din.readText(); + this.period = din.readInt(); + this.count = din.readInt(); + this.errorCount = din.readInt(); + this.totalElapsed = din.readLong(); + this.customData = (MapValue) din.readValue(); + return this; + } + + public void putCustom(String key, Object o) { + if (o instanceof Number) { + this.customData.put(key, new FloatValue(((Number) o).floatValue())); + } + } + + public void putCustom(String key, Value value) { + this.customData.put(key, value); + } + + public void addCustom(String key, NumberValue value) { + Value old = this.customData.get(key); + if (old == null) { + this.customData.put(key, value); + } else if (old instanceof NumberValue) { + ((NumberValue) old).add(value); + } + } + + @Override + public String toString() { + return "PerfInteractionCounterPack{" + + "time=" + time + + ", objName='" + objName + '\'' + + ", interactionType='" + interactionType + '\'' + + ", fromName='" + fromName + '\'' + + ", fromTextType='" + fromTextType + '\'' + + ", toName='" + toName + '\'' + + ", toTextType='" + toTextType + '\'' + + ", period=" + period + + ", count=" + count + + ", errorCount=" + errorCount + + ", totalElapsed=" + totalElapsed + + ", customData=" + customData + + '}'; + } +} \ No newline at end of file diff --git a/scouter.common/src/main/java/scouter/lang/pack/PackEnum.java b/scouter.common/src/main/java/scouter/lang/pack/PackEnum.java index 3bf447ca6..28c6143fe 100644 --- a/scouter.common/src/main/java/scouter/lang/pack/PackEnum.java +++ b/scouter.common/src/main/java/scouter/lang/pack/PackEnum.java @@ -41,6 +41,7 @@ public abstract class PackEnum { public final static byte STACK = 62; public final static byte SUMMARY = 63; public final static byte BATCH = 64; + public final static byte PERF_INTERACTION_COUNTER = 65; public final static byte ALERT = 70; public final static byte OBJECT = 80; From a1c1a06967677af77585395c4ab8f1daca4aad73 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Tue, 7 Aug 2018 19:38:30 +0900 Subject: [PATCH 16/53] [server] line protocol unique check --- .../http/handler/TelegrafInputHandler.java | 4 +- .../server/http/model/InfluxSingleLine.java | 61 ++++++++++++++++++- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java index a15ce184a..7ddba3b1d 100644 --- a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java +++ b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java @@ -107,7 +107,7 @@ public void handlerRequest(HttpServletRequest request, HttpServletResponse respo int lineCount = 0; boolean earlyResponse = false; while (true) { - if (lineCount++ > 200) { + if (lineCount++ > 1000) { earlyResponse = true; break; } @@ -122,7 +122,7 @@ public void handlerRequest(HttpServletRequest request, HttpServletResponse respo } if (earlyResponse) { - Logger.println("TG010", "Too many line protocol in payload. fast return working."); + Logger.println("TG010", "[WARN] Too many line protocol in payload. fast return working. some line could be dropped!"); return; } diff --git a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java index a24a1dd3f..c563ff474 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java +++ b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java @@ -95,10 +95,67 @@ private void addNumField(TgMeasurementConfig tConfig, Map.Entry } /** - * line string key is measurement + tag values + * line string key is measurement + tag values + measurement keys */ public static String toLineStringKey(String lineString) { - return lineString.substring(0, lineString.indexOf(' ')); + char[] chars = lineString.toCharArray(); + char sink = '\0'; + int mode = 0; //0: measurement, 1: tags, 2: fields + + StringBuilder lineKey = new StringBuilder(80); + for (int pos = 0; pos < lineString.length(); pos++) { + char c = chars[pos]; + if (mode == 0) { //measurement, tags + if (sink == '\\') { + lineKey.append(c); + sink = '\0'; + + } else { + switch (c) { + case '\\': + sink = '\\'; + break; + case ' ': + lineKey.append(' '); + mode++; + break; + default: + lineKey.append(c); + break; + } + } + + } else if (mode == 1) { //fields + if (sink == '\\') { + lineKey.append(c); + sink = '\0'; + + } else { + switch (c) { + case '\\': + sink = '\\'; + break; + case ' ': + mode++; + break; + case '=': + mode++; + break; + case ',': + mode++; + break; + default: + lineKey.append(c); + break; + } + } + } else { + break; + } + + } + + return lineKey.toString(); } public static InfluxSingleLine of(String lineStr, Configure configure, long receivedTime) { From eccaff824412c9e70cbfc71e532922aefe362ee9 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Thu, 9 Aug 2018 21:39:20 +0900 Subject: [PATCH 17/53] [sever] add telegraf's delta counter type --- .../src/main/java/scouter/lang/DeltaType.java | 29 ++++++++ .../main/java/scouter/server/Configure.java | 14 +++- .../http/handler/TelegrafInputHandler.java | 42 ++++++----- .../server/http/model/CounterProtocol.java | 69 +++++++++++++++++-- .../server/http/model/InfluxSingleLine.java | 42 ++++++++++- .../http/model/NumberValueWithTime.java | 42 +++++++++++ .../server/core/cache/CounterTimeCache.scala | 38 ++++++++++ .../http/model/InfluxSingleLineTest.java | 54 +++++++++++++++ 8 files changed, 302 insertions(+), 28 deletions(-) create mode 100644 scouter.common/src/main/java/scouter/lang/DeltaType.java create mode 100644 scouter.server/src/main/java/scouter/server/http/model/NumberValueWithTime.java create mode 100644 scouter.server/src/main/scala/scouter/server/core/cache/CounterTimeCache.scala diff --git a/scouter.common/src/main/java/scouter/lang/DeltaType.java b/scouter.common/src/main/java/scouter/lang/DeltaType.java new file mode 100644 index 000000000..234a10330 --- /dev/null +++ b/scouter.common/src/main/java/scouter/lang/DeltaType.java @@ -0,0 +1,29 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.lang; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 8. 8. + */ +public enum DeltaType { + NONE, + DELTA, + BOTH, + ; +} diff --git a/scouter.server/src/main/java/scouter/server/Configure.java b/scouter.server/src/main/java/scouter/server/Configure.java index 6dc359342..d82670386 100644 --- a/scouter.server/src/main/java/scouter/server/Configure.java +++ b/scouter.server/src/main/java/scouter/server/Configure.java @@ -17,6 +17,7 @@ package scouter.server; +import scouter.lang.DeltaType; import scouter.lang.conf.ConfigDesc; import scouter.lang.conf.ConfigValueType; import scouter.lang.conf.ConfigValueUtil; @@ -721,7 +722,18 @@ protected void applyTelegrafInputConfig() { CounterProtocol counter = new CounterProtocol(); String[] split = StringUtil.splitByWholeSeparatorPreserveAllTokens(counterMapping, ':'); if (split.length >= 2) { - counterMappingMap.put(split[0], counter); + String originName = split[0]; + String originName0 = originName; + if (originName.charAt(0) == '&') { + if (originName.charAt(1) == '&') { + counter.setDeltaType(DeltaType.BOTH); + originName0 = originName.substring(2); + } else { + counter.setDeltaType(DeltaType.DELTA); + originName0 = originName.substring(1); + } + } + counterMappingMap.put(originName0, counter); counter.setName(split[1]); } if (split.length >= 3) { diff --git a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java index 7ddba3b1d..8297c284b 100644 --- a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java +++ b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java @@ -18,13 +18,10 @@ package scouter.server.http.handler; -import scouter.io.DataOutputX; import scouter.lang.Counter; import scouter.lang.Family; import scouter.lang.ObjectType; -import scouter.lang.pack.Pack; import scouter.lang.value.NumberValue; -import scouter.net.NetCafe; import scouter.server.Configure; import scouter.server.CounterManager; import scouter.server.Logger; @@ -41,6 +38,7 @@ import java.io.IOException; import java.net.InetAddress; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -163,23 +161,29 @@ private boolean hasNewCounterThenRegister(ObjectType objectType, InfluxSingleLin boolean hasNew = false; for (CounterProtocol counterProtocol : numberFields.keySet()) { - Counter counterInternal = objectType.getCounter(counterProtocol.getTaggingName(line.getTags())); - if (counterInternal == null) { + boolean isNewCounter = false; + if (counterProtocol.hasNormalCounter()) { + if (objectType.getCounter(counterProtocol.getTaggedName(line.getTags())) == null) { + isNewCounter = true; + } + } + if (counterProtocol.hasDeltaCounter()) { + if (objectType.getCounter(counterProtocol.getTaggedDelataName(line.getTags())) == null) { + isNewCounter = true; + } + } + + if (isNewCounter) { hasNew = true; - addCounter(objectType, counterProtocol.toNormalCounter(line.getTags())); + for (Counter counter : counterProtocol.toCounters(line.getTags())) { + addCounter(objectType, counter); + } continue; } } return hasNew; } - private static void passToNetDataProcessor(Pack pack, InetAddress addr) throws IOException { - DataOutputX out = new DataOutputX(); - out.write(NetCafe.CAFE); - out.write(new DataOutputX().writePack(pack).toByteArray()); - NetDataProcessor.add(out.toByteArray(), addr); - } - private void registerNewObjType(InfluxSingleLine line) { registerObjTypeQueue.put(line); } @@ -208,11 +212,13 @@ private void registerNewObjType0(InfluxSingleLine line) { Map numberFields = line.getNumberFields(); boolean firstCounter = true; for (CounterProtocol counterProtocol : numberFields.keySet()) { - Counter counter = counterProtocol.toNormalCounter(line.getTags()); - family.addCounter(counter); - if (firstCounter) { - family.setMaster(counter.getName()); - firstCounter = false; + List counters = counterProtocol.toCounters(line.getTags()); + for (Counter counter : counters) { + family.addCounter(counter); + if (firstCounter) { + family.setMaster(counter.getName()); + firstCounter = false; + } } } diff --git a/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java b/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java index e365af6ef..bb3969a9a 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java +++ b/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java @@ -19,6 +19,7 @@ package scouter.server.http.model; import scouter.lang.Counter; +import scouter.lang.DeltaType; import scouter.util.StringUtil; import java.util.ArrayList; @@ -29,6 +30,7 @@ public class CounterProtocol extends Counter { private List nameTags = new ArrayList(); private List displayNameTags = new ArrayList(); + private DeltaType deltaType = DeltaType.NONE; public CounterProtocol() {} @@ -36,6 +38,15 @@ public CounterProtocol(String name) { super(name); } + public void setDeltaType(DeltaType deltaType) { + this.deltaType = deltaType + ; + } + + public DeltaType getDeltaType() { + return deltaType; + } + //TODO test case public void setName(String nameWithTag) { char[] chars = nameWithTag.toCharArray(); @@ -96,15 +107,23 @@ public void setDisplayName(String displayNameWithTag) { } } - public String getTaggingName(Map tagMap) { - return makeValueWithTag(this.getName(), this.nameTags, tagMap); + public String getTaggedName(Map tagMap) { + return generateTaggedName(this.getName(), this.nameTags, tagMap); + } + + public String getTaggedDelataName(Map tagMap) { + return generateTaggedDeltaName(this.getName(), this.nameTags, tagMap); } - public String getTaggingDisplayName(Map tagMap) { - return makeValueWithTag(this.getDisplayName(), this.displayNameTags, tagMap); + public String getTaggedDisplayName(Map tagMap) { + return generateTaggedName(this.getDisplayName(), this.displayNameTags, tagMap); } - private String makeValueWithTag(String name, List tags, Map tagMap) { + private String generateTaggedDeltaName(String name, List tags, Map tagMap) { + return generateTaggedName(name, tags, tagMap) + "_$delta"; + } + + private String generateTaggedName(String name, List tags, Map tagMap) { if (tags == null || tags.size() == 0) { return name; } @@ -126,11 +145,47 @@ private String makeValueWithTag(String name, List tags, Map toCounters(Map tagMap) { + List counters = new ArrayList(); + + if (hasNormalCounter()) { + counters.add(toNormalCounter(tagMap)); + } + + if (hasDeltaCounter()) { + counters.add(toDeltaCounter(tagMap)); + } + return counters; + } + public Counter toNormalCounter(Map tagMap) { + if (!hasNormalCounter()) { + return null; + } Counter normalCounter = this.clone(); - normalCounter.setName(makeValueWithTag(this.getName(), this.nameTags, tagMap)); - normalCounter.setDisplayName(makeValueWithTag(this.getDisplayName(), this.displayNameTags, tagMap)); + normalCounter.setName(generateTaggedName(this.getName(), this.nameTags, tagMap)); + normalCounter.setDisplayName(generateTaggedName(this.getDisplayName(), this.displayNameTags, tagMap)); return normalCounter; } + + public Counter toDeltaCounter(Map tagMap) { + if (!hasDeltaCounter()) { + return null; + } + Counter deltaCounter = this.clone(); + deltaCounter.setName(generateTaggedDeltaName(this.getName(), this.nameTags, tagMap)); + deltaCounter.setDisplayName(generateTaggedDeltaName(this.getDisplayName(), this.displayNameTags, tagMap)); + deltaCounter.setUnit(deltaCounter.getUnit() + "/s"); + + return deltaCounter; + } + + public boolean hasDeltaCounter() { + return (this.getDeltaType() == DeltaType.DELTA || this.getDeltaType() == DeltaType.BOTH); + } + + public boolean hasNormalCounter() { + return (this.getDeltaType() != DeltaType.DELTA); + } } \ No newline at end of file diff --git a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java index c563ff474..ab102ca29 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java +++ b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java @@ -18,6 +18,8 @@ package scouter.server.http.model; +import scouter.lang.Counter; +import scouter.lang.CounterKey; import scouter.lang.TimeTypeEnum; import scouter.lang.pack.ObjectPack; import scouter.lang.pack.PerfCounterPack; @@ -25,9 +27,11 @@ import scouter.lang.value.FloatValue; import scouter.lang.value.MapValue; import scouter.lang.value.NumberValue; +import scouter.lang.value.ValueEnum; import scouter.server.Configure; import scouter.server.Logger; import scouter.server.TgMeasurementConfig; +import scouter.server.core.cache.CounterTimeCache; import scouter.util.HashUtil; import java.util.HashMap; @@ -298,7 +302,8 @@ public static InfluxSingleLine of(String lineStr, Configure configure, long rece } try { - return new InfluxSingleLine(tConfig, measurement, tags, fields, receivedTime, Long.parseLong(timestampSb.toString()), tConfig.isDebugEnabled()); + //line protocol timestamp is nano second -> divide 1000,000 -> to millis + return new InfluxSingleLine(tConfig, measurement, tags, fields, receivedTime, Long.parseLong(timestampSb.toString()) / 1000000, tConfig.isDebugEnabled()); } catch (Throwable t) { t.printStackTrace(); return null; @@ -367,8 +372,41 @@ public PerfCounterPack toPerfCounterPack() { perfPack.time = this.receivedTime; perfPack.timetype = TimeTypeEnum.REALTIME; perfPack.objName = this.objName; + for (Map.Entry counterValueEntry : numberFields.entrySet()) { - perfPack.data.put(counterValueEntry.getKey().getTaggingName(tags), counterValueEntry.getValue()); + CounterProtocol counterProtocol = counterValueEntry.getKey(); + + Counter normalCounter = counterProtocol.toNormalCounter(tags); + NumberValue counterValue = counterValueEntry.getValue(); + + if (normalCounter != null) { + perfPack.data.put(normalCounter.getName(), counterValue); + } + + Counter deltaCounter = counterProtocol.toDeltaCounter(tags); + if (deltaCounter != null) { + CounterKey counterKey = new CounterKey(this.objHash, deltaCounter.getName(), TimeTypeEnum.REALTIME); + NumberValueWithTime prev = CounterTimeCache.get(counterKey); + + if (prev != null) { + float deltaPerSec = 0; + + switch (counterValue.getValueType()) { + case ValueEnum.DECIMAL: + long delta = counterValue.longValue() - prev.getValue().longValue(); + deltaPerSec = delta * 1000.0f / (this.timestampOrigin - prev.getTime()); + break; + default: + float delta_f = counterValue.floatValue() - prev.getValue().floatValue(); + deltaPerSec = delta_f * 1000.0f / (this.timestampOrigin - prev.getTime()); + break; + } + + perfPack.data.put(deltaCounter.getName(), new FloatValue(deltaPerSec)); + } + + CounterTimeCache.put(counterKey, new NumberValueWithTime(counterValue, this.timestampOrigin)); + } } return perfPack; } diff --git a/scouter.server/src/main/java/scouter/server/http/model/NumberValueWithTime.java b/scouter.server/src/main/java/scouter/server/http/model/NumberValueWithTime.java new file mode 100644 index 000000000..fd218fffc --- /dev/null +++ b/scouter.server/src/main/java/scouter/server/http/model/NumberValueWithTime.java @@ -0,0 +1,42 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.server.http.model; + +import scouter.lang.value.NumberValue; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 8. 8. + */ +public class NumberValueWithTime { + private long time; + private NumberValue value; + + public NumberValueWithTime(NumberValue value, long time) { + this.value = value; + this.time = time; + } + + public long getTime() { + return time; + } + + public NumberValue getValue() { + return value; + } +} diff --git a/scouter.server/src/main/scala/scouter/server/core/cache/CounterTimeCache.scala b/scouter.server/src/main/scala/scouter/server/core/cache/CounterTimeCache.scala new file mode 100644 index 000000000..a419590fc --- /dev/null +++ b/scouter.server/src/main/scala/scouter/server/core/cache/CounterTimeCache.scala @@ -0,0 +1,38 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.server.core.cache + +import scouter.lang.CounterKey +import scouter.server.http.model.NumberValueWithTime +import scouter.util.CacheTable + +/** + * Singleton object of the memory cache for counter data. + */ +object CounterTimeCache { + val cache = new CacheTable[CounterKey, NumberValueWithTime]().setMaxRow(1000000) + + def put(key: CounterKey, value: NumberValueWithTime) { + cache.put(key, value, 120000) + } + + def get(key: CounterKey): NumberValueWithTime = { + cache.get(key) + } +} diff --git a/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java b/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java index 9d3e3f1f7..a43ca28ff 100644 --- a/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java +++ b/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java @@ -21,9 +21,12 @@ import org.junit.Ignore; import org.junit.Test; import scouter.lang.Counter; +import scouter.lang.DeltaType; import scouter.server.Configure; import scouter.server.TgMeasurementConfig; +import java.util.HashMap; + import static junit.framework.TestCase.assertNotNull; import static junit.framework.TestCase.assertNull; import static junit.framework.TestCase.assertTrue; @@ -242,6 +245,57 @@ public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tag_filter_mat assertNotNull(line); } + @Test + public void of_test_InfluxSingleLine_can_parse_line_protocol_with_delta_field() { + System.setProperty("input_telegraf_$mem$_counter_mappings" + , "used:tg-mem-used" + + ",&active:active:active:byte:false" + + ",&&available:available:available:byte:false" + + ",available_percent:tg-mem-free-pct:memory percent:%:false"); + + System.setProperty("input_telegraf_$mem$_objType_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$mem$_objName_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$mem$_host_tag", "host"); + Configure.newInstanceForTestCase(); + + String protocol = "mem,host=vm0.us,os=aix,key=memory1" + + " used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i" + + ",slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i" + + ",active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521" + + " 1532269780000000000"; + + InfluxSingleLine line = InfluxSingleLine.of(protocol, Configure.getInstance(), System.currentTimeMillis()); + + for (CounterProtocol counterProtocol : line.getNumberFields().keySet()) { + + HashMap tagMap = new HashMap(); + if (counterProtocol.getName().equals("active")) { + assertEquals(DeltaType.DELTA, counterProtocol.getDeltaType()); + assertEquals(1, counterProtocol.toCounters(tagMap).size()); + assertNull(counterProtocol.toNormalCounter(tagMap)); + assertNotNull(counterProtocol.toDeltaCounter(tagMap)); + + Counter deltaCounter = counterProtocol.toDeltaCounter(tagMap); + assertEquals(deltaCounter.getName(), counterProtocol.getName() + "_$delta"); + assertEquals(deltaCounter.getUnit(), counterProtocol.getUnit() + "/s"); + + } else if (counterProtocol.getName().equals("available")) { + assertEquals(DeltaType.BOTH, counterProtocol.getDeltaType()); + assertEquals(2, counterProtocol.toCounters(tagMap).size()); + assertNotNull(counterProtocol.toNormalCounter(tagMap)); + assertNotNull(counterProtocol.toDeltaCounter(tagMap)); + + Counter normalCounter = counterProtocol.toNormalCounter(tagMap); + assertEquals(normalCounter.getName(), counterProtocol.getName()); + assertEquals(normalCounter.getUnit(), counterProtocol.getUnit()); + + Counter deltaCounter = counterProtocol.toDeltaCounter(tagMap); + assertEquals(deltaCounter.getName(), counterProtocol.getName() + "_$delta"); + assertEquals(deltaCounter.getUnit(), counterProtocol.getUnit() + "/s"); + } + } + } + @Test @Ignore public void perf_test() { From 8a2a9ffcdfa1ccde267f273c6b886d0d37ab3246 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Sat, 11 Aug 2018 22:32:10 +0900 Subject: [PATCH 18/53] [server] add telegraf metric normalizing ability. --- .../src/main/java/scouter/lang/Counter.java | 6 +- .../main/java/scouter/server/Configure.java | 36 ++++++++-- .../scouter/server/core/app/MeterCounter.java | 71 +++++++++++++++++++ .../server/core/app/MeterCounterManager.java | 71 +++++++++++++++++++ .../server/http/model/CounterProtocol.java | 18 ++++- .../server/http/model/InfluxSingleLine.java | 30 +++++++- 6 files changed, 223 insertions(+), 9 deletions(-) create mode 100644 scouter.server/src/main/java/scouter/server/core/app/MeterCounter.java create mode 100644 scouter.server/src/main/java/scouter/server/core/app/MeterCounterManager.java diff --git a/scouter.common/src/main/java/scouter/lang/Counter.java b/scouter.common/src/main/java/scouter/lang/Counter.java index a819f26c5..20bd36b7c 100644 --- a/scouter.common/src/main/java/scouter/lang/Counter.java +++ b/scouter.common/src/main/java/scouter/lang/Counter.java @@ -20,12 +20,16 @@ import scouter.util.StringKeyLinkedMap; public class Counter implements Comparable { + public static final int MIN_NORMALIZE_SEC = 4; + public static final int MAX_NORMALIZE_SEC = 60; + private String name; private String displayName; private String unit; private String icon; private boolean all = true; private boolean total = true; + private StringKeyLinkedMap attrMap = new StringKeyLinkedMap(); public Counter() {} @@ -69,7 +73,7 @@ public boolean isTotal() { public void setTotal(boolean total) { this.total = total; } - + public String setAttribute(String key, String value) { return attrMap.put(key, value); } diff --git a/scouter.server/src/main/java/scouter/server/Configure.java b/scouter.server/src/main/java/scouter/server/Configure.java index d82670386..5242132e7 100644 --- a/scouter.server/src/main/java/scouter/server/Configure.java +++ b/scouter.server/src/main/java/scouter/server/Configure.java @@ -360,6 +360,13 @@ public final static synchronized Configure newInstanceForTestCase() { public boolean input_telegraf_enabled = true; @ConfigDesc("print telegraf line protocol to STDOUT") public boolean input_telegraf_debug_enabled = false; + + @ConfigDesc("telegraf delta-counter normalize") + public boolean input_telegraf_delta_counter_normalize_default = true; + @ConfigDesc("telegraf delta-counter normalize seconds.(avgerage in sec)\n" + + "normalize per metric can be set in the option input_telegraf_$measurement$_counter_mappings") + public int input_telegraf_delta_counter_normalize_default_seconds = 30; + @ConfigDesc("Waiting time(ms) until stopped heartbeat of object is determined to be inactive") public int telegraf_object_deadtime_ms = 35000; @@ -382,12 +389,16 @@ public final static synchronized Configure newInstanceForTestCase() { @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + "which fields of $measurement$ are mapped to scouter's counter.\n" + - "format: {line-protocol field name}:{scouter counter name}:{display name?}:{unit?}:{hasTotal?}\n" + + "format: {line-protocol field name}:{scouter counter name}:{display name?}:{unit?}:{hasTotal?}:{normalize sec?}\n" + "It can have multiple values.\n" + - "{scouter counter name} can be defined in combination with the line protocol's tag variables.\n" + + " - {scouter counter name} can be defined in combination with the line protocol's tag variables.\n" + "For example, if the value of 'tag1' is 'disk01' and the value of 'tag2' is 'bin', the counter name defined as 'scouter-du-$tag1$-$tag2$' is 'scouter-du-disk01-bin'.\n" + - "eg)used_memory:tg-redis-used-memory,used_memory_rss:redis-used-memory-rss,redis used rss,bytes,true\n" + - "eg)cpu:cpu-$cpu-no$ -- this example shows counter definition with tag value.") + " eg)used_memory:tg-redis-used-memory,used_memory_rss:redis-used-memory-rss,redis used rss,bytes:true\n" + + " eg)cpu:cpu-$cpu-no$ -- this example shows counter definition with tag value.\n" + + "If {line-protocol field name} is started with '&' or '&&', then It works as delta counter\n" + + "When specified as a delta type, the difference in values per second is stored. and the counter name ends with '_delta'\n" + + "double '&&' means BOTH type. AS BOTH type, the value and the difference value both are stored.\n" + + " - {normalize sec} applies only to a delta counter if the counter is a 'BOTH' type counter. (This value can have min 4 to max 60)") @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) public String input_telegraf_$measurement$_counter_mappings = ""; @@ -635,6 +646,10 @@ private void apply() { this.input_telegraf_enabled = getBoolean("input_telegraf_enabled", true); this.input_telegraf_debug_enabled = getBoolean("input_telegraf_debug_enabled", false); + + this.input_telegraf_delta_counter_normalize_default = getBoolean("input_telegraf_delta_counter_normalize", true); + this.input_telegraf_delta_counter_normalize_default_seconds = getInt("input_telegraf_delta_counter_normalize_seconds", 30); + this.telegraf_object_deadtime_ms = getInt("telegraf_object_deadtime_ms", 35000); this.input_telegraf_$measurement$_enabled = getBoolean("input_telegraf_$measurement$_enabled", true); @@ -737,7 +752,11 @@ protected void applyTelegrafInputConfig() { counter.setName(split[1]); } if (split.length >= 3) { - counter.setDisplayName(split[2]); + if (StringUtil.isNotEmpty(split[2])) { + counter.setDisplayName(split[2]); + } else { + counter.setDisplayName(split[1]); + } } else { counter.setDisplayName(split[1]); } @@ -751,6 +770,13 @@ protected void applyTelegrafInputConfig() { counter.setTotal(Boolean.parseBoolean(split[4])); } catch (Exception ignored) {} } + if (split.length >= 6) { + int normalizeSec = 0; + try { + normalizeSec = Integer.valueOf(split[5]); + } catch (Exception ignored) {} + counter.setNormalizeSec(normalizeSec); + } } tConfig.setCounterMapping(counterMappingMap); diff --git a/scouter.server/src/main/java/scouter/server/core/app/MeterCounter.java b/scouter.server/src/main/java/scouter/server/core/app/MeterCounter.java new file mode 100644 index 000000000..e0f75438f --- /dev/null +++ b/scouter.server/src/main/java/scouter/server/core/app/MeterCounter.java @@ -0,0 +1,71 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.server.core.app; + +import scouter.lang.ref.DOUBLE; +import scouter.lang.ref.INT; +import scouter.util.MeteringUtil; +import scouter.util.MeteringUtil.Handler; + +public class MeterCounter { + + static class Bucket { + double value; + int count; + } + private MeteringUtil meter = new MeteringUtil(2000, 31) { + protected Bucket create() { + return new Bucket(); + }; + + protected void clear(Bucket o) { + o.value=0; + o.count = 0; + } + }; + + public synchronized void add(double value) { + Bucket b = meter.getCurrentBucket(); + b.value += value; + b.count++; + } + + public double getAvg(int period) { + final INT count = new INT(); + final DOUBLE sum = new DOUBLE(); + meter.search(period, new Handler() { + public void process(Bucket u) { + sum.value += u.value; + count.value += u.count; + } + }); + return count.value == 0 ? 0 : sum.value / count.value; + } + + public double getSum(int period) { + final DOUBLE sum = new DOUBLE(); + meter.search(period, new Handler() { + public void process(Bucket u) { + sum.value += u.value; + } + }); + return sum.value; + } + +} \ No newline at end of file diff --git a/scouter.server/src/main/java/scouter/server/core/app/MeterCounterManager.java b/scouter.server/src/main/java/scouter/server/core/app/MeterCounterManager.java new file mode 100644 index 000000000..d22601a3e --- /dev/null +++ b/scouter.server/src/main/java/scouter/server/core/app/MeterCounterManager.java @@ -0,0 +1,71 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.server.core.app; + +import scouter.util.LinkedMap; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 8. 11. + */ +public class MeterCounterManager { + private static MeterCounterManager instance = new MeterCounterManager(); + + private LinkedMap meterCounterMap = new LinkedMap().setMax(10000); + + public static class Key { + public int objHash; + public String counterName; + + public Key(int objHash, String counterName) { + this.objHash = objHash; + this.counterName = counterName; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof Key) { + Key k = (Key) obj; + return this.objHash == ((Key) obj).objHash && this.counterName.equals(((Key) obj).counterName); + } + return false; + } + + @Override + public int hashCode() { + return objHash ^ counterName.hashCode(); + } + } + + public static MeterCounterManager getInstance() { + return instance; + } + + //without syncronize, but it's ok in the key scope. + public MeterCounter getMeterCounter(int objHash, String counterName) { + Key key = new Key(objHash, counterName); + MeterCounter meterCounter = meterCounterMap.get(key); + + if (meterCounter == null) { + meterCounter = new MeterCounter(); + meterCounterMap.put(key, meterCounter); + } + + return meterCounter; + } +} diff --git a/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java b/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java index bb3969a9a..5df989925 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java +++ b/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java @@ -26,12 +26,14 @@ import java.util.List; import java.util.Map; -//TODO test case public class CounterProtocol extends Counter { private List nameTags = new ArrayList(); private List displayNameTags = new ArrayList(); + private int normalizeSec = 0; + private DeltaType deltaType = DeltaType.NONE; + public CounterProtocol() {} public CounterProtocol(String name) { @@ -47,6 +49,20 @@ public DeltaType getDeltaType() { return deltaType; } + public void setNormalizeSec(int normalizeSec) { + if (normalizeSec < MIN_NORMALIZE_SEC) { + this.normalizeSec = 0; + } else if (normalizeSec > MAX_NORMALIZE_SEC) { + this.normalizeSec = MAX_NORMALIZE_SEC; + } else { + this.normalizeSec = normalizeSec; + } + } + + public int getNormalizeSec() { + return normalizeSec; + } + //TODO test case public void setName(String nameWithTag) { char[] chars = nameWithTag.toCharArray(); diff --git a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java index ab102ca29..12c4e33c0 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java +++ b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java @@ -24,6 +24,7 @@ import scouter.lang.pack.ObjectPack; import scouter.lang.pack.PerfCounterPack; import scouter.lang.value.DecimalValue; +import scouter.lang.value.DoubleValue; import scouter.lang.value.FloatValue; import scouter.lang.value.MapValue; import scouter.lang.value.NumberValue; @@ -31,6 +32,8 @@ import scouter.server.Configure; import scouter.server.Logger; import scouter.server.TgMeasurementConfig; +import scouter.server.core.app.MeterCounter; +import scouter.server.core.app.MeterCounterManager; import scouter.server.core.cache.CounterTimeCache; import scouter.util.HashUtil; @@ -41,6 +44,7 @@ * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. */ public class InfluxSingleLine { + private String measurement; private String host; private String objType; @@ -380,7 +384,15 @@ public PerfCounterPack toPerfCounterPack() { NumberValue counterValue = counterValueEntry.getValue(); if (normalCounter != null) { - perfPack.data.put(normalCounter.getName(), counterValue); + if (counterProtocol.getNormalizeSec() > 0 && !counterProtocol.hasDeltaCounter()) { + MeterCounter meterCounter = MeterCounterManager.getInstance().getMeterCounter(objHash, normalCounter.getName()); + meterCounter.add(counterValue.doubleValue()); + double valueNormalized = (meterCounter.getAvg(counterProtocol.getNormalizeSec())); + + perfPack.data.put(normalCounter.getName(), new DoubleValue(valueNormalized)); + } else { + perfPack.data.put(normalCounter.getName(), counterValue); + } } Counter deltaCounter = counterProtocol.toDeltaCounter(tags); @@ -389,7 +401,7 @@ public PerfCounterPack toPerfCounterPack() { NumberValueWithTime prev = CounterTimeCache.get(counterKey); if (prev != null) { - float deltaPerSec = 0; + float deltaPerSec; switch (counterValue.getValueType()) { case ValueEnum.DECIMAL: @@ -402,6 +414,20 @@ public PerfCounterPack toPerfCounterPack() { break; } + if (counterProtocol.getNormalizeSec() > 0) { + MeterCounter meterCounter = MeterCounterManager.getInstance().getMeterCounter(objHash, deltaCounter.getName()); + meterCounter.add(deltaPerSec); + deltaPerSec = (float) (meterCounter.getAvg(counterProtocol.getNormalizeSec())); + + } else { + Configure conf = Configure.getInstance(); + if (conf.input_telegraf_delta_counter_normalize_default) { + MeterCounter meterCounter = MeterCounterManager.getInstance().getMeterCounter(objHash, deltaCounter.getName()); + meterCounter.add(deltaPerSec); + deltaPerSec = (float) (meterCounter.getAvg(conf.input_telegraf_delta_counter_normalize_default_seconds)); + } + } + perfPack.data.put(deltaCounter.getName(), new FloatValue(deltaPerSec)); } From db622d2f19ec712e0852cc4de44903ac2e4948cf Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Sat, 11 Aug 2018 23:07:30 +0900 Subject: [PATCH 19/53] [server] debugging info --- .../main/java/scouter/server/http/model/InfluxSingleLine.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java index 12c4e33c0..698eef090 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java +++ b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java @@ -385,6 +385,7 @@ public PerfCounterPack toPerfCounterPack() { if (normalCounter != null) { if (counterProtocol.getNormalizeSec() > 0 && !counterProtocol.hasDeltaCounter()) { + Logger.trace("[normalize1] " + counterProtocol.getNormalizeSec()); MeterCounter meterCounter = MeterCounterManager.getInstance().getMeterCounter(objHash, normalCounter.getName()); meterCounter.add(counterValue.doubleValue()); double valueNormalized = (meterCounter.getAvg(counterProtocol.getNormalizeSec())); @@ -415,6 +416,7 @@ public PerfCounterPack toPerfCounterPack() { } if (counterProtocol.getNormalizeSec() > 0) { + Logger.trace("[normalize2] " + counterProtocol.getNormalizeSec()); MeterCounter meterCounter = MeterCounterManager.getInstance().getMeterCounter(objHash, deltaCounter.getName()); meterCounter.add(deltaPerSec); deltaPerSec = (float) (meterCounter.getAvg(counterProtocol.getNormalizeSec())); @@ -422,6 +424,7 @@ public PerfCounterPack toPerfCounterPack() { } else { Configure conf = Configure.getInstance(); if (conf.input_telegraf_delta_counter_normalize_default) { + Logger.trace("[normalize3] " + conf.input_telegraf_delta_counter_normalize_default); MeterCounter meterCounter = MeterCounterManager.getInstance().getMeterCounter(objHash, deltaCounter.getName()); meterCounter.add(deltaPerSec); deltaPerSec = (float) (meterCounter.getAvg(conf.input_telegraf_delta_counter_normalize_default_seconds)); From 875d8b73be9a4b9e567c42c00b6ebf64ab18e7ea Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Sat, 11 Aug 2018 23:14:35 +0900 Subject: [PATCH 20/53] [server] typo --- scouter.server/src/main/java/scouter/server/Configure.java | 2 +- .../main/java/scouter/server/http/model/InfluxSingleLine.java | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/scouter.server/src/main/java/scouter/server/Configure.java b/scouter.server/src/main/java/scouter/server/Configure.java index 5242132e7..a73299a02 100644 --- a/scouter.server/src/main/java/scouter/server/Configure.java +++ b/scouter.server/src/main/java/scouter/server/Configure.java @@ -647,7 +647,7 @@ private void apply() { this.input_telegraf_enabled = getBoolean("input_telegraf_enabled", true); this.input_telegraf_debug_enabled = getBoolean("input_telegraf_debug_enabled", false); - this.input_telegraf_delta_counter_normalize_default = getBoolean("input_telegraf_delta_counter_normalize", true); + this.input_telegraf_delta_counter_normalize_default = getBoolean("input_telegraf_delta_counter_normalize_default", true); this.input_telegraf_delta_counter_normalize_default_seconds = getInt("input_telegraf_delta_counter_normalize_seconds", 30); this.telegraf_object_deadtime_ms = getInt("telegraf_object_deadtime_ms", 35000); diff --git a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java index 698eef090..12c4e33c0 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java +++ b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java @@ -385,7 +385,6 @@ public PerfCounterPack toPerfCounterPack() { if (normalCounter != null) { if (counterProtocol.getNormalizeSec() > 0 && !counterProtocol.hasDeltaCounter()) { - Logger.trace("[normalize1] " + counterProtocol.getNormalizeSec()); MeterCounter meterCounter = MeterCounterManager.getInstance().getMeterCounter(objHash, normalCounter.getName()); meterCounter.add(counterValue.doubleValue()); double valueNormalized = (meterCounter.getAvg(counterProtocol.getNormalizeSec())); @@ -416,7 +415,6 @@ public PerfCounterPack toPerfCounterPack() { } if (counterProtocol.getNormalizeSec() > 0) { - Logger.trace("[normalize2] " + counterProtocol.getNormalizeSec()); MeterCounter meterCounter = MeterCounterManager.getInstance().getMeterCounter(objHash, deltaCounter.getName()); meterCounter.add(deltaPerSec); deltaPerSec = (float) (meterCounter.getAvg(counterProtocol.getNormalizeSec())); @@ -424,7 +422,6 @@ public PerfCounterPack toPerfCounterPack() { } else { Configure conf = Configure.getInstance(); if (conf.input_telegraf_delta_counter_normalize_default) { - Logger.trace("[normalize3] " + conf.input_telegraf_delta_counter_normalize_default); MeterCounter meterCounter = MeterCounterManager.getInstance().getMeterCounter(objHash, deltaCounter.getName()); meterCounter.add(deltaPerSec); deltaPerSec = (float) (meterCounter.getAvg(conf.input_telegraf_delta_counter_normalize_default_seconds)); From 1d72a9d8c4ee4f888506065cbbf271122ac21404 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Sat, 11 Aug 2018 23:54:16 +0900 Subject: [PATCH 21/53] [server] for the case that Influx line field has double quote. --- .../main/java/scouter/server/Configure.java | 2 +- .../server/http/model/InfluxSingleLine.java | 43 +++++++++++++------ .../http/model/InfluxSingleLineTest.java | 23 ++++++++++ 3 files changed, 54 insertions(+), 14 deletions(-) diff --git a/scouter.server/src/main/java/scouter/server/Configure.java b/scouter.server/src/main/java/scouter/server/Configure.java index a73299a02..672e1fb2f 100644 --- a/scouter.server/src/main/java/scouter/server/Configure.java +++ b/scouter.server/src/main/java/scouter/server/Configure.java @@ -648,7 +648,7 @@ private void apply() { this.input_telegraf_debug_enabled = getBoolean("input_telegraf_debug_enabled", false); this.input_telegraf_delta_counter_normalize_default = getBoolean("input_telegraf_delta_counter_normalize_default", true); - this.input_telegraf_delta_counter_normalize_default_seconds = getInt("input_telegraf_delta_counter_normalize_seconds", 30); + this.input_telegraf_delta_counter_normalize_default_seconds = getInt("input_telegraf_delta_counter_normalize_default_seconds", 30); this.telegraf_object_deadtime_ms = getInt("telegraf_object_deadtime_ms", 35000); diff --git a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java index 12c4e33c0..895f2fd66 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java +++ b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java @@ -257,28 +257,45 @@ public static InfluxSingleLine of(String lineStr, Configure configure, long rece } else { switch (c) { case '\\': - sink = '\\'; + if (sink != '"') { + sink = '\\'; + } + break; + case '"': + if (sink == '"') { + sink = '\0'; + } else { + sink = '"'; + } break; case ' ': - mode++; - if (fieldKeySb.length() > 0) { - fields.put(fieldKeySb.toString(), fieldValueSb.toString()); + if (sink != '"') { + mode++; + if (fieldKeySb.length() > 0) { + fields.put(fieldKeySb.toString(), fieldValueSb.toString()); + } } break; case '=': - fieldKeyMode = false; + if (sink != '"') { + fieldKeyMode = false; + } break; case ',': - fieldKeyMode = true; - fields.put(fieldKeySb.toString(), fieldValueSb.toString()); - fieldKeySb = new StringBuilder(); - fieldValueSb = new StringBuilder(); + if (sink != '"') { + fieldKeyMode = true; + fields.put(fieldKeySb.toString(), fieldValueSb.toString()); + fieldKeySb = new StringBuilder(); + fieldValueSb = new StringBuilder(); + } break; default: - if (fieldKeyMode) { - fieldKeySb.append(c); - } else { - fieldValueSb.append(c); + if (sink != '"') { + if (fieldKeyMode) { + fieldKeySb.append(c); + } else { + fieldValueSb.append(c); + } } break; } diff --git a/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java b/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java index a43ca28ff..59d31f8be 100644 --- a/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java +++ b/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java @@ -296,6 +296,29 @@ public void of_test_InfluxSingleLine_can_parse_line_protocol_with_delta_field() } } + @Test + public void of_test_InfluxSingleLine_can_parse_quoted_value() { + System.setProperty("input_telegraf_$mem$_counter_mappings" + , "used:tg-mem-used" + + ",active:active:active:byte:false" + + ",available:available:available:byte:false" + + ",available_percent:tg-mem-free-pct:memory percent:%:false"); + + System.setProperty("input_telegraf_$mem$_objType_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$mem$_objName_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$mem$_host_tag", "host"); + Configure.newInstanceForTestCase(); + + String protocol = "mem,host=vm0.us,os=aix,key=memory1" + + " used=11656097792i,free=1467994112i,quoted=\"It is quoted\",cached=0i,buffered=0i,wired=2481405952i" + + ",slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i" + + ",active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521" + + " 1532269780000000000"; + + InfluxSingleLine line = InfluxSingleLine.of(protocol, Configure.getInstance(), System.currentTimeMillis()); + assertEquals(line.timestampOrigin, 1532269780000d, 1000); + } + @Test @Ignore public void perf_test() { From 4d6975b6d984465dc1cac922f59e6dac9f0afb03 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Sun, 12 Aug 2018 20:44:03 +0900 Subject: [PATCH 22/53] [server] Make changes to counter.xml when "telegraf counter mapping" setting is changed. --- .../src/main/java/scouter/lang/Counter.java | 34 ++++++++- .../java/scouter/server/CounterManager.java | 1 + .../http/handler/TelegrafInputHandler.java | 28 +++---- .../server/http/model/CounterProtocol.java | 76 ++++++++++++++++++- .../management/RemoteControlManager.scala | 2 +- 5 files changed, 121 insertions(+), 20 deletions(-) diff --git a/scouter.common/src/main/java/scouter/lang/Counter.java b/scouter.common/src/main/java/scouter/lang/Counter.java index 20bd36b7c..125b63603 100644 --- a/scouter.common/src/main/java/scouter/lang/Counter.java +++ b/scouter.common/src/main/java/scouter/lang/Counter.java @@ -111,7 +111,39 @@ public boolean equals(Object obj) { return false; return true; } - + + public boolean someContentsEquals(Counter other) { + if (other == null) + return false; + + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) { + return false; + } + + if (displayName == null) { + if (other.displayName != null) + return false; + } else if (!displayName.equals(other.displayName)) { + return false; + } + + if (unit == null) { + if (other.unit != null) + return false; + } else if (!unit.equals(other.unit)) { + return false; + } + + if (total != other.total) { + return false; + } + + return true; + } + public int compareTo(Counter o) { return this.name.compareTo(o.getName()); } diff --git a/scouter.server/src/main/java/scouter/server/CounterManager.java b/scouter.server/src/main/java/scouter/server/CounterManager.java index 3bf80dac4..0f2755f59 100644 --- a/scouter.server/src/main/java/scouter/server/CounterManager.java +++ b/scouter.server/src/main/java/scouter/server/CounterManager.java @@ -112,6 +112,7 @@ public synchronized boolean safelyAddFamily(Family family) { if (unsafeDoc == null) { return false; } + Logger.trace("Family added or modified in Custom counter xml. Family - " + family.getName()); Element newElement = unsafeDoc.createElement(CounterEngine.TAG_FAMILY); newElement.setAttribute(CounterEngine.ATTR_NAME, family.getName()); diff --git a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java index 8297c284b..e74006013 100644 --- a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java +++ b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java @@ -29,6 +29,7 @@ import scouter.server.http.model.CounterProtocol; import scouter.server.http.model.InfluxSingleLine; import scouter.server.netio.data.NetDataProcessor; +import scouter.util.CacheTable; import scouter.util.IPUtil; import scouter.util.RequestQueue; import scouter.util.ThreadUtil; @@ -52,6 +53,8 @@ public class TelegrafInputHandler extends Thread { private RequestQueue registerObjTypeQueue = new RequestQueue(1024); private RequestQueue addCounterQueue = new RequestQueue(1024); + private CacheTable prevAddedCounter = new CacheTable().setMaxRow(10000); + private static class AddCounterParam { ObjectType objectType; Counter counter; @@ -158,30 +161,19 @@ protected void count(InfluxSingleLine line, String remoteAddress) throws IOExcep private boolean hasNewCounterThenRegister(ObjectType objectType, InfluxSingleLine line) { Map numberFields = line.getNumberFields(); - boolean hasNew = false; + boolean hasAnyNewCounter = false; for (CounterProtocol counterProtocol : numberFields.keySet()) { - boolean isNewCounter = false; - if (counterProtocol.hasNormalCounter()) { - if (objectType.getCounter(counterProtocol.getTaggedName(line.getTags())) == null) { - isNewCounter = true; - } - } - if (counterProtocol.hasDeltaCounter()) { - if (objectType.getCounter(counterProtocol.getTaggedDelataName(line.getTags())) == null) { - isNewCounter = true; - } - } - + boolean isNewCounter = counterProtocol.isNewOrChangedCounter(objectType, line); if (isNewCounter) { - hasNew = true; + hasAnyNewCounter = true; for (Counter counter : counterProtocol.toCounters(line.getTags())) { addCounter(objectType, counter); } continue; } } - return hasNew; + return hasAnyNewCounter; } private void registerNewObjType(InfluxSingleLine line) { @@ -237,10 +229,12 @@ private void registerNewObjType0(InfluxSingleLine line) { private void addCounter0(AddCounterParam param) { ObjectType objectType = param.objectType; Counter counter = param.counter; - Counter counterDoubleCheck = objectType.getCounter(counter.getName()); - if (counterDoubleCheck != null) { + + if (counter.someContentsEquals(prevAddedCounter.get(counter.getName()))) { return; } + + prevAddedCounter.put(counter.getName(), counter); Family family = objectType.getFamily(); family.addCounter(counter); boolean success = counterManager.safelyAddFamily(family); diff --git a/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java b/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java index 5df989925..6a760efc8 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java +++ b/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java @@ -20,6 +20,7 @@ import scouter.lang.Counter; import scouter.lang.DeltaType; +import scouter.lang.ObjectType; import scouter.util.StringUtil; import java.util.ArrayList; @@ -27,6 +28,10 @@ import java.util.Map; public class CounterProtocol extends Counter { + private static final long KEEP_FRESH_MILLIS = 15 * 1000L; + private boolean fresh = true; + private long initTimestamp = System.currentTimeMillis(); + private List nameTags = new ArrayList(); private List displayNameTags = new ArrayList(); private int normalizeSec = 0; @@ -40,6 +45,12 @@ public CounterProtocol(String name) { super(name); } + private void setFreshFalse() { + if (System.currentTimeMillis() - initTimestamp > KEEP_FRESH_MILLIS) { + this.fresh = false; + } + } + public void setDeltaType(DeltaType deltaType) { this.deltaType = deltaType ; @@ -135,6 +146,10 @@ public String getTaggedDisplayName(Map tagMap) { return generateTaggedName(this.getDisplayName(), this.displayNameTags, tagMap); } + public String getTaggedDelateDisplayName(Map tagMap) { + return generateTaggedDeltaName(this.getDisplayName(), this.displayNameTags, tagMap); + } + private String generateTaggedDeltaName(String name, List tags, Map tagMap) { return generateTaggedName(name, tags, tagMap) + "_$delta"; } @@ -160,7 +175,6 @@ private String generateTaggedName(String name, List tags, Map toCounters(Map tagMap) { List counters = new ArrayList(); @@ -204,4 +218,64 @@ public boolean hasDeltaCounter() { public boolean hasNormalCounter() { return (this.getDeltaType() != DeltaType.DELTA); } + + public boolean isNewOrChangedCounter(ObjectType objectType, InfluxSingleLine line) { + boolean isNew; + isNew = checkNewOrChanged4NormalCounter(objectType, line); + + if (!isNew) { + isNew = checkNewOrChanged4DeltaCounter(objectType, line); + } + + setFreshFalse(); + return isNew; + } + + private boolean checkNewOrChanged4NormalCounter(ObjectType objectType, InfluxSingleLine line) { + if (!hasNormalCounter()) { + return false; + } + + Counter counter = objectType.getCounter(getTaggedName(line.getTags())); + if (counter == null) { + return true; + } + + String taggedDisplayName = getTaggedDisplayName(line.getTags()); + if (checkChangedDeeper(counter, taggedDisplayName)) { + return true; + } + + return false; + } + + private boolean checkNewOrChanged4DeltaCounter(ObjectType objectType, InfluxSingleLine line) { + if (!hasDeltaCounter()) { + return false; + } + + Counter counter = objectType.getCounter(getTaggedDelataName(line.getTags())); + if (counter == null) { + return true; + } + + String taggedDisplayName = getTaggedDelateDisplayName(line.getTags()); + if (checkChangedDeeper(counter, taggedDisplayName)) { + return true; + } + + return false; + } + + private boolean checkChangedDeeper(Counter counter, String taggedDisplayName) { + if (this.fresh) { //deep search + if (!taggedDisplayName.equals(counter.getDisplayName()) + || !getUnit().equals(counter.getUnit()) + || isTotal() != counter.isTotal()) + { + return true; + } + } + return false; + } } \ No newline at end of file diff --git a/scouter.server/src/main/scala/scouter/server/management/RemoteControlManager.scala b/scouter.server/src/main/scala/scouter/server/management/RemoteControlManager.scala index 1fa520c2a..bd8924a4c 100644 --- a/scouter.server/src/main/scala/scouter/server/management/RemoteControlManager.scala +++ b/scouter.server/src/main/scala/scouter/server/management/RemoteControlManager.scala @@ -44,7 +44,7 @@ object RemoteControlManager { } val control = queue.enqueue(remoteControl); if (control == null) { - Logger.println("S148", "queue exceeded!!"); + Logger.println("S148", "[INFO] RemoteControlManager queue exceeded!command:" + control.commnad); return false; } return true; From 739e1d2348d139bd5abbdee124b8499e7b6615d0 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Sun, 12 Aug 2018 22:36:30 +0900 Subject: [PATCH 23/53] [server] Changed the telegraf mapping configuration to set 'object family' include tag values. --- .../main/java/scouter/server/Configure.java | 49 ++++++++++++- .../scouter/server/TgMeasurementConfig.java | 71 +++++++++++++++++-- .../http/handler/TelegrafInputHandler.java | 7 +- .../server/http/model/InfluxSingleLine.java | 9 +++ .../java/scouter/server/ConfigureTest.java | 4 +- .../http/model/InfluxSingleLineTest.java | 16 ++++- 6 files changed, 139 insertions(+), 17 deletions(-) diff --git a/scouter.server/src/main/java/scouter/server/Configure.java b/scouter.server/src/main/java/scouter/server/Configure.java index 672e1fb2f..e4e7a394b 100644 --- a/scouter.server/src/main/java/scouter/server/Configure.java +++ b/scouter.server/src/main/java/scouter/server/Configure.java @@ -65,12 +65,17 @@ public class Configure extends Thread { private static final String TELEGRAF_INPUT_MEASUREMENT_TAG_FILTER_POSTFIX = "_tag_filter"; private static final String TELEGRAF_INPUT_MEASUREMENT_COUNTER_MAPPINGS_POSTFIX = "_counter_mappings"; + + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_FAMILY_BASE_POSTFIX = "_objFamily_base"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_FAMILY_APPEND_TAGS_POSTFIX = "_objFamily_append_tags"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_BASE_POSTFIX = "_objType_base"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_PREPEND_TAGS_POSTFIX = "_objType_prepend_tags"; private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_APPEND_TAGS_POSTFIX = "_objType_append_tags"; private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_ICON_POSTFIX = "_objType_icon"; private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_BASE_POSTFIX = "_objName_base"; - private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_APPEND_TAGS_POSTFIX = "_objName_append_tags"; + private static final String TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_APPEND_TAGS = "_objName_append_tags"; private static final String TELEGRAF_INPUT_MEASUREMENT_HOST_TAG_POSTFIX = "_host_tag"; private static final String TELEGRAF_INPUT_MEASUREMENT_HOST_MAPPINGS_POSTFIX = "_host_mappings"; @@ -402,11 +407,26 @@ public final static synchronized Configure newInstanceForTestCase() { @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) public String input_telegraf_$measurement$_counter_mappings = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "define an obj Family prefix. objectType is defined with some tags.\n" + + "see input_telegraf_$measurement$_objFamily_append_tags option.") + public String input_telegraf_$measurement$_objFamily_base = ""; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "this tags's value is appended to objFamily_base.\nIt can have multiple values. eg)tag1,tag2") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String input_telegraf_$measurement$_objFamily_append_tags = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + "define an objectType prefix. objectType is defined with some tags.\n" + - "see input_telegraf_$measurement$_objType_append_tags option.") + "see input_telegraf_$measurement$_objType_prepend(or append)_tags option.") public String input_telegraf_$measurement$_objType_base = ""; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "this tags's value is prepended to objType_base.\nIt can have multiple values. eg)tag1,tag2") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String input_telegraf_$measurement$_objType_prepend_tags = "scouter_obj_type_prefix"; + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + "this tags's value is appended to objType_base.\nIt can have multiple values. eg)tag1,tag2") @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) @@ -656,7 +676,10 @@ private void apply() { this.input_telegraf_$measurement$_debug_enabled = getBoolean("input_telegraf_$measurement$_debug_enabled", false); this.input_telegraf_$measurement$_tag_filter = getValue("input_telegraf_$measurement$_tag_filter", ""); this.input_telegraf_$measurement$_counter_mappings = getValue("input_telegraf_$measurement$_counter_mappings", ""); + this.input_telegraf_$measurement$_objFamily_base = getValue("input_telegraf_$measurement$_objFamily_base", ""); + this.input_telegraf_$measurement$_objFamily_append_tags = getValue("input_telegraf_$measurement$_objFamily_append_tags", ""); this.input_telegraf_$measurement$_objType_base = getValue("input_telegraf_$measurement$_objType_base", ""); + this.input_telegraf_$measurement$_objType_prepend_tags = getValue("input_telegraf_$measurement$_objType_prepend_tags", "scouter_obj_type_prefix"); this.input_telegraf_$measurement$_objType_append_tags = getValue("input_telegraf_$measurement$_objType_append_tags", ""); this.input_telegraf_$measurement$_objType_icon = getValue("input_telegraf_$measurement$_objType_icon", ""); this.input_telegraf_$measurement$_objName_base = getValue("input_telegraf_$measurement$_objName_base", ""); @@ -780,9 +803,29 @@ protected void applyTelegrafInputConfig() { } tConfig.setCounterMapping(counterMappingMap); + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_FAMILY_BASE_POSTFIX.equals(postfix)) { + tConfig.setObjFamilyBase(value); + + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_FAMILY_APPEND_TAGS_POSTFIX.equals(postfix)) { + String[] tags = StringUtil.split(value, ','); + if (tags == null || tags.length == 0) { + continue; + } + tConfig.setObjFamilyAppendTags(Arrays.asList(tags)); + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_BASE_POSTFIX.equals(postfix)) { tConfig.setObjTypeBase(value); + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_PREPEND_TAGS_POSTFIX.equals(postfix)) { + if (StringUtil.isEmpty(value)) { + value = input_telegraf_$measurement$_objType_prepend_tags; //default + } + String[] tags = StringUtil.split(value, ','); + if (tags == null || tags.length == 0) { + continue; + } + tConfig.setObjTypePrependTags(Arrays.asList(tags)); + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_TYPE_APPEND_TAGS_POSTFIX.equals(postfix)) { String[] tags = StringUtil.split(value, ','); if (tags == null || tags.length == 0) { @@ -796,7 +839,7 @@ protected void applyTelegrafInputConfig() { } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_BASE_POSTFIX.equals(postfix)) { tConfig.setObjNameBase(value); - } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_APPEND_TAGS_POSTFIX.equals(postfix)) { + } else if (TELEGRAF_INPUT_MEASUREMENT_OBJ_NAME_APPEND_TAGS.equals(postfix)) { String[] tags = StringUtil.split(value, ','); if (tags == null || tags.length == 0) { continue; diff --git a/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java b/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java index 1885424e9..9042aca50 100644 --- a/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java +++ b/scouter.server/src/main/java/scouter/server/TgMeasurementConfig.java @@ -19,6 +19,7 @@ package scouter.server; import scouter.server.http.model.CounterProtocol; +import scouter.util.StringUtil; import java.util.ArrayList; import java.util.HashMap; @@ -29,7 +30,7 @@ * @author Gun Lee (gunlee01@gmail.com) on 2018. 7. 22. */ public class TgMeasurementConfig { - public static final String TG = "TG$"; + public static final String X = "X$"; private String measurement; @@ -37,11 +38,18 @@ public class TgMeasurementConfig { private boolean debugEnabled = false; private Map counterMapping = new HashMap(); - private String objTypeBase = TG; + + private String objFamilyBase = X; + private List objFamilyAppendTags = new ArrayList(); + + private String objTypeBase = X; + private List objTypePrependTags = new ArrayList(); private List objTypeAppendTags = new ArrayList(); private String objTypeIcon = ""; - private String objNameBase = TG; + + private String objNameBase = X; private List objNameAppendTags = new ArrayList(); + private String hostTag = "host"; private Map hostMapping = new HashMap(); private Map> tagFilter = new HashMap>(); @@ -74,12 +82,36 @@ public void setCounterMapping(Map counterMapping) { this.counterMapping = counterMapping; } + public String getObjFamilyBase() { + return objFamilyBase; + } + + public void setObjFamilyBase(String objFamilyBase) { + this.objFamilyBase = X + objFamilyBase; + } + + public List getObjFamilyAppendTags() { + return objFamilyAppendTags; + } + + public void setObjFamilyAppendTags(List objFamilyAppendTags) { + this.objFamilyAppendTags = objFamilyAppendTags; + } + public String getObjTypeBase() { return objTypeBase; } public void setObjTypeBase(String objTypeBase) { - this.objTypeBase = TG + objTypeBase; + this.objTypeBase = objTypeBase; + } + + public List getObjTypePrependTags() { + return objTypePrependTags; + } + + public void setObjTypePrependTags(List objTypePrependTags) { + this.objTypePrependTags = objTypePrependTags; } public List getObjTypeAppendTags() { @@ -103,7 +135,7 @@ public String getObjNameBase() { } public void setObjNameBase(String objNameBase) { - this.objNameBase = TG + objNameBase; + this.objNameBase = X + objNameBase; } public List getObjNameAppendTags() { @@ -131,7 +163,7 @@ public void setHostMapping(Map hostMapping) { } public static String getPrefix() { - return TG; + return X; } public Map> getTagFilter() { @@ -142,8 +174,26 @@ public void setTagFilter(Map> tagFilter) { this.tagFilter = tagFilter; } + public String toFamily(Map tags) { + StringBuilder objFamilySb = new StringBuilder(objFamilyBase); + for (String tagKey : objFamilyAppendTags) { + objFamilySb.append('_').append(tags.get(tagKey)); + } + return objFamilySb.toString(); + } + public String toObjType(Map tags) { - StringBuilder objTypeSb = new StringBuilder(objTypeBase); + StringBuilder objTypeSb = new StringBuilder(); + + for (String tagKey : objTypePrependTags) { + String prependValue = tags.get(tagKey); + if (StringUtil.isNotEmpty(prependValue)) { + objTypeSb.append(prependValue).append('_'); + } + } + + objTypeSb.append(objTypeBase); + for (String tagKey : objTypeAppendTags) { objTypeSb.append('_').append(tags.get(tagKey)); } @@ -207,4 +257,11 @@ public boolean isTagFilterMatching(Map tags) { } return matching; } + + public boolean isValidConfig() { + if (StringUtil.isEmpty(objFamilyBase) || objFamilyBase.equals(X)) { + return false; + } + return true; + } } diff --git a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java index e74006013..c4d654294 100644 --- a/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java +++ b/scouter.server/src/main/java/scouter/server/http/handler/TelegrafInputHandler.java @@ -192,14 +192,15 @@ private void registerNewObjType0(InfluxSingleLine line) { try { String objTypeName = line.getObjType(); + + Family family = new Family(); + family.setName(line.getFamily()); + ObjectType objectType = new ObjectType(); objectType.setName(objTypeName); objectType.setDisplayName(objTypeName); objectType.setIcon(line.getObjTypeIcon()); - - Family family = new Family(); objectType.setFamily(family); - family.setName(objTypeName); Map numberFields = line.getNumberFields(); boolean firstCounter = true; diff --git a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java index 895f2fd66..ca252e18e 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java +++ b/scouter.server/src/main/java/scouter/server/http/model/InfluxSingleLine.java @@ -47,6 +47,7 @@ public class InfluxSingleLine { private String measurement; private String host; + private String family; private String objType; private String objTypeIcon; private String objName; @@ -71,6 +72,7 @@ private InfluxSingleLine(TgMeasurementConfig tConfig, this.receivedTime = receivedTime; this.timestampOrigin = timestampOrigin; this.host = tConfig.toHost(tags); + this.family = tConfig.toFamily(tags); this.objType = tConfig.toObjType(tags); this.objTypeIcon = tConfig.getObjTypeIcon(); this.objName = tConfig.toObjName(host, tags); @@ -318,6 +320,9 @@ public static InfluxSingleLine of(String lineStr, Configure configure, long rece if (!tConfig.isEnabled()) { return null; } + if (!tConfig.isValidConfig()) { + return null; + } if (!tConfig.isTagFilterMatching(tags)) { return null; } @@ -339,6 +344,10 @@ public String getHost() { return host; } + public String getFamily() { + return family; + } + public String getObjType() { return objType; } diff --git a/scouter.server/src/test/java/scouter/server/ConfigureTest.java b/scouter.server/src/test/java/scouter/server/ConfigureTest.java index 762ec0dfe..052a43caa 100644 --- a/scouter.server/src/test/java/scouter/server/ConfigureTest.java +++ b/scouter.server/src/test/java/scouter/server/ConfigureTest.java @@ -35,6 +35,7 @@ public void applyTelegrafInputConfig() { System.setProperty("input_telegraf_$xpu_space$_enabled", "true"); System.setProperty("input_telegraf_$xpu_space$_debug_enabled", "true"); System.setProperty("input_telegraf_$xpu_space$_counter_mappings", "xpu1:Sxpu1,xpu2:Sxpu2:S of xpu 2:%:false"); + System.setProperty("input_telegraf_$xpu_space$_objFamily_base", "TGFAMILY01"); System.setProperty("input_telegraf_$xpu_space$_objType_base", "TGTYPE01"); System.setProperty("input_telegraf_$xpu_space$_objType_append_tags", "t1,t2"); System.setProperty("input_telegraf_$xpu_space$_objName_base", "TGNAME01"); @@ -47,7 +48,8 @@ public void applyTelegrafInputConfig() { Assert.assertEquals(tConfig.isEnabled(), true); Assert.assertEquals(tConfig.isDebugEnabled(), true); - Assert.assertEquals(tConfig.getObjTypeBase(), TgMeasurementConfig.getPrefix() + System.getProperty("input_telegraf_$xpu_space$_objType_base")); + Assert.assertEquals(tConfig.getObjFamilyBase(), TgMeasurementConfig.getPrefix() + System.getProperty("input_telegraf_$xpu_space$_objFamily_base")); + Assert.assertEquals(tConfig.getObjTypeBase(), System.getProperty("input_telegraf_$xpu_space$_objType_base")); Assert.assertEquals(tConfig.getObjNameBase(), TgMeasurementConfig.getPrefix() + System.getProperty("input_telegraf_$xpu_space$_objName_base")); Assert.assertEquals(tConfig.getHostTag(), System.getProperty("input_telegraf_$xpu_space$_host_tag")); diff --git a/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java b/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java index 59d31f8be..749c22d1a 100644 --- a/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java +++ b/scouter.server/src/test/java/scouter/server/http/model/InfluxSingleLineTest.java @@ -56,12 +56,14 @@ public void of_test_InfluxSingleLine_can_parse_line_protocol_normal_case() { , "used:tg-mem-used" + ",free:tg-mem-free:memory free::false" + ",available_percent:tg-mem-free-pct:memory percent:%:false"); + System.setProperty("input_telegraf_$mem$_objFamily_base", "HOST-METRIC"); System.setProperty("input_telegraf_$mem$_objType_base", "HOST-METRIC"); + System.setProperty("input_telegraf_$mem$_objType_prepend_tags", "scouter_obj_type_prefix"); System.setProperty("input_telegraf_$mem$_objName_base", "HOST-METRIC"); System.setProperty("input_telegraf_$mem$_host_tag", "host"); Configure.newInstanceForTestCase(); - String protocol = "mem,host=vm0.us,os=aix,key=memory1" + + String protocol = "mem,host=vm0.us,os=aix,scouter_obj_type_prefix=TESTPREFIX,key=memory1" + " used=11656097792i,free=1467994112i,cached=0i,buffered=0i,wired=2481405952i" + ",slab=0i,available_percent=32.152581214904785,total=17179869184i,available=5523771392i" + ",active=8165543936i,inactive=4055777280i,used_percent=67.84741878509521" + @@ -69,7 +71,7 @@ public void of_test_InfluxSingleLine_can_parse_line_protocol_normal_case() { InfluxSingleLine line = InfluxSingleLine.of(protocol, Configure.getInstance(), System.currentTimeMillis()); - assertEquals(TgMeasurementConfig.getPrefix() + "HOST-METRIC", line.getObjType()); + assertEquals("TESTPREFIX_HOST-METRIC", line.getObjType()); assertEquals("vm0.us", line.getHost()); assertEquals("/" + line.getHost() + "/" + TgMeasurementConfig.getPrefix() + "HOST-METRIC", line.getObjName()); assertTrue(line.getNumberFields().keySet().contains(new CounterProtocol("tg-mem-used"))); @@ -100,6 +102,7 @@ public void of_test_InfluxSingleLine_can_parse_line_protocol_tagged_type_and_nam , "used:tg-mem-used" + ",free:tg-mem-free:memory free::false" + ",available_percent:tg-mem-free-pct:memory percent:%:false"); + System.setProperty("input_telegraf_$mem$_objFamily_base", "HOST-METRIC"); System.setProperty("input_telegraf_$mem$_objType_base", "HOST-METRIC"); System.setProperty("input_telegraf_$mem$_objType_append_tags", "os"); System.setProperty("input_telegraf_$mem$_objName_base", "HOST-METRIC"); @@ -116,7 +119,7 @@ public void of_test_InfluxSingleLine_can_parse_line_protocol_tagged_type_and_nam InfluxSingleLine line = InfluxSingleLine.of(protocol, Configure.getInstance(), System.currentTimeMillis()); - assertEquals(TgMeasurementConfig.getPrefix() + "HOST-METRIC_aix", line.getObjType()); + assertEquals("HOST-METRIC_aix", line.getObjType()); assertEquals("myvm0", line.getHost()); assertEquals("/" + line.getHost() + "/" + TgMeasurementConfig.getPrefix() + "HOST-METRIC_memory1", line.getObjName()); } @@ -127,6 +130,7 @@ public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tagged_counter System.setProperty("input_telegraf_$cpu$_counter_mappings" , "usage_user:tg-$cpu$-user:$cpu$ user:%:false" + ",usage_system:tg-$cpu$-sys:$cpu$ sys:%:false"); + System.setProperty("input_telegraf_$cpu$_objFamily_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_objType_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_objName_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_host_tag", "host"); @@ -157,6 +161,7 @@ public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tagged_counter public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tag_filter_unmatching_case() { Configure.newInstanceForTestCase(); System.setProperty("input_telegraf_$cpu$_counter_mappings", "usage_user:tg-$cpu$-user:$cpu$ user:%:false" + ",usage_system:tg-$cpu$-sys:$cpu$ sys:%:false"); + System.setProperty("input_telegraf_$cpu$_objFamily_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_objType_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_objName_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_host_tag", "host"); @@ -180,6 +185,7 @@ public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tag_filter_unm public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tag_filter_unmatching_case_in_not_condition() { Configure.newInstanceForTestCase(); System.setProperty("input_telegraf_$cpu$_counter_mappings", "usage_user:tg-$cpu$-user:$cpu$ user:%:false" + ",usage_system:tg-$cpu$-sys:$cpu$ sys:%:false"); + System.setProperty("input_telegraf_$cpu$_objFamily_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_objType_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_objName_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_host_tag", "host"); @@ -203,6 +209,7 @@ public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tag_filter_unm public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tag_filter_matching_case() { Configure.newInstanceForTestCase(); System.setProperty("input_telegraf_$cpu$_counter_mappings", "usage_user:tg-$cpu$-user:$cpu$ user:%:false" + ",usage_system:tg-$cpu$-sys:$cpu$ sys:%:false"); + System.setProperty("input_telegraf_$cpu$_objFamily_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_objType_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_objName_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_host_tag", "host"); @@ -226,6 +233,7 @@ public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tag_filter_mat public void of_test_InfluxSingleLine_can_parse_line_protocol_with_tag_filter_matching_case_in_not_condition() { Configure.newInstanceForTestCase(); System.setProperty("input_telegraf_$cpu$_counter_mappings", "usage_user:tg-$cpu$-user:$cpu$ user:%:false" + ",usage_system:tg-$cpu$-sys:$cpu$ sys:%:false"); + System.setProperty("input_telegraf_$cpu$_objFamily_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_objType_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_objName_base", "HOST-METRIC"); System.setProperty("input_telegraf_$cpu$_host_tag", "host"); @@ -253,6 +261,7 @@ public void of_test_InfluxSingleLine_can_parse_line_protocol_with_delta_field() ",&&available:available:available:byte:false" + ",available_percent:tg-mem-free-pct:memory percent:%:false"); + System.setProperty("input_telegraf_$mem$_objFamily_base", "HOST-METRIC"); System.setProperty("input_telegraf_$mem$_objType_base", "HOST-METRIC"); System.setProperty("input_telegraf_$mem$_objName_base", "HOST-METRIC"); System.setProperty("input_telegraf_$mem$_host_tag", "host"); @@ -304,6 +313,7 @@ public void of_test_InfluxSingleLine_can_parse_quoted_value() { ",available:available:available:byte:false" + ",available_percent:tg-mem-free-pct:memory percent:%:false"); + System.setProperty("input_telegraf_$mem$_objFamily_base", "HOST-METRIC"); System.setProperty("input_telegraf_$mem$_objType_base", "HOST-METRIC"); System.setProperty("input_telegraf_$mem$_objName_base", "HOST-METRIC"); System.setProperty("input_telegraf_$mem$_host_tag", "host"); From a8bdf8538c00b48b31125b3aa6b4376c539cdd1e Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Tue, 14 Aug 2018 18:47:45 +0900 Subject: [PATCH 24/53] [webapp] add version info to server info api --- .../scouterx/webapp/layer/controller/InfoController.java | 6 +++++- .../src/main/java/scouterx/webapp/view/ServerView.java | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/scouter.webapp/src/main/java/scouterx/webapp/layer/controller/InfoController.java b/scouter.webapp/src/main/java/scouterx/webapp/layer/controller/InfoController.java index e9664fbe1..a1e156f94 100644 --- a/scouter.webapp/src/main/java/scouterx/webapp/layer/controller/InfoController.java +++ b/scouter.webapp/src/main/java/scouterx/webapp/layer/controller/InfoController.java @@ -54,7 +54,11 @@ public class InfoController { @Consumes(MediaType.APPLICATION_JSON) public CommonResultView> retrieveServers() { List serverList = ServerManager.getInstance().getAllServerList().stream() - .map(s -> new ServerView(s.getId(), s.getName(), s.getSession() != 0, System.currentTimeMillis()-s.getDelta())) + .map(s -> new ServerView(s.getId(), + s.getName(), + s.getSession() != 0, + System.currentTimeMillis()-s.getDelta(), + s.getVersion())) .collect(Collectors.toList()); return CommonResultView.success(serverList); diff --git a/scouter.webapp/src/main/java/scouterx/webapp/view/ServerView.java b/scouter.webapp/src/main/java/scouterx/webapp/view/ServerView.java index 7707fcca7..527e04860 100644 --- a/scouter.webapp/src/main/java/scouterx/webapp/view/ServerView.java +++ b/scouter.webapp/src/main/java/scouterx/webapp/view/ServerView.java @@ -33,4 +33,5 @@ public class ServerView { final private String name; final private boolean connected; final private long serverTime; + final private String version; } From dabce6b00cdfb3bfa8c6d4b3711638f7f532b120 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Wed, 15 Aug 2018 18:15:33 +0900 Subject: [PATCH 25/53] [server][agent.java] add Interaction counter pack. add incoming interaction metering. --- .../main/java/scouter/agent/Configure.java | 6 ++ .../counter/CounterExecutingManager.java | 24 +++--- .../counter/InteractionCounterBasket.java | 42 +++++++---- .../agent/counter/meter/MeterInteraction.java | 5 +- .../meter/MeterInteractionManager.java | 74 ++++++++++--------- .../agent/counter/task/InteractionPerf.java | 41 ++++++---- .../scouter/agent/trace/TraceApiCall.java | 1 + .../scouter/agent/trace/TraceContext.java | 1 + .../java/scouter/agent/trace/TraceMain.java | 10 +++ .../agent/trace/api/ForHttpClient40.java | 1 + .../agent/trace/api/ForHttpClient43.java | 1 + .../agent/trace/api/ForHttpURLConnection.java | 9 ++- .../agent/trace/api/ForNettyHttpRequest.java | 1 + .../scouter/agent/trace/api/ForRibbonLB.java | 1 + .../java/scouter/xtra/http/HttpTrace.java | 12 +++ .../lang/pack/InteractionPerfCounterPack.java | 31 ++++---- .../main/java/scouter/lang/pack/PackEnum.java | 2 + .../main/java/scouter/server/Configure.java | 3 + .../cache/InteractionCounterCacheKey.java | 50 +++++++++++++ .../core/InteractionPerfCountCore.scala | 45 +++++++++++ .../core/cache/InteractionCounterCache.scala | 63 ++++++++++++++++ .../server/netio/data/NetDataProcessor.scala | 32 +++----- 22 files changed, 336 insertions(+), 119 deletions(-) create mode 100644 scouter.server/src/main/java/scouter/server/core/cache/InteractionCounterCacheKey.java create mode 100644 scouter.server/src/main/scala/scouter/server/core/InteractionPerfCountCore.scala create mode 100644 scouter.server/src/main/scala/scouter/server/core/cache/InteractionCounterCache.scala diff --git a/scouter.agent.java/src/main/java/scouter/agent/Configure.java b/scouter.agent.java/src/main/java/scouter/agent/Configure.java index bfb2f2dc2..297dffb9b 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/Configure.java +++ b/scouter.agent.java/src/main/java/scouter/agent/Configure.java @@ -222,6 +222,10 @@ public final static synchronized Configure getInstance() { public String _trace_interservice_callee_header_key = "X-Scouter-Callee"; @ConfigDesc("") public String _trace_interservice_caller_header_key = "X-Scouter-Caller"; + @ConfigDesc("") + public String _trace_interservice_caller_obj_header_key = "X-Scouter-Caller-Obj"; + @ConfigDesc("") + public String _trace_interservice_callee_obj_header_key = "X-Scouter-Callee-Obj"; @ConfigDesc("JSession key for user ID") public String trace_user_session_key = "JSESSIONID"; @ConfigDesc("") @@ -937,6 +941,8 @@ private void apply() { this._trace_interservice_gxid_header_key = getValue("_trace_interservice_gxid_header_key", "X-Scouter-Gxid"); this._trace_interservice_callee_header_key = getValue("_trace_interservice_callee_header_key", "X-Scouter-Callee"); this._trace_interservice_caller_header_key = getValue("_trace_interservice_caller_header_key", "X-Scouter-Caller"); + this._trace_interservice_caller_obj_header_key = getValue("_trace_interservice_caller_obj_header_key", "X-Scouter-Caller-Obj"); + this._trace_interservice_callee_obj_header_key = getValue("_trace_interservice_callee_obj_header_key", "X-Scouter-Callee-Obj"); this.profile_connection_open_fullstack_enabled = getBoolean("profile_connection_open_fullstack_enabled", false); this.profile_connection_autocommit_status_enabled = getBoolean("profile_connection_autocommit_status_enabled", false); this.trace_user_mode = getInt("trace_user_mode", 2); diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/CounterExecutingManager.java b/scouter.agent.java/src/main/java/scouter/agent/counter/CounterExecutingManager.java index 1923b5014..f2c792c6c 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/counter/CounterExecutingManager.java +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/CounterExecutingManager.java @@ -21,6 +21,7 @@ import scouter.agent.counter.anotation.Counter; import scouter.agent.counter.anotation.InteractionCounter; import scouter.agent.netio.data.DataProxy; +import scouter.lang.pack.InteractionPerfCounterPack; import scouter.lang.pack.PerfCounterPack; import scouter.util.ThreadUtil; import scouter.util.scan.Scanner; @@ -66,11 +67,11 @@ public void run() { private void gatherAndSendCounter(long now) { CounterBasket basket = new CounterBasket(); for (int i = 0; i < countStatList.size(); i++) { - CountStat r = countStatList.get(i); + CountStat stat = countStatList.get(i); try { - if (r.counter.interval() <= now - r.xtime) { - r.xtime = now; - r.counter.process(basket); + if (stat.counter.interval() <= now - stat.xtime) { + stat.xtime = now; + stat.counter.process(basket); } } catch (Throwable t) { t.printStackTrace(); @@ -84,20 +85,21 @@ private void gatherAndSendCounter(long now) { private void gatherAndSendInteractionCounter(long now) { InteractionCounterBasket basket = new InteractionCounterBasket(); for (int i = 0; i < interactionCountStatList.size(); i++) { - CountStat r = interactionCountStatList.get(i); + CountStat stat = interactionCountStatList.get(i); try { - if (r.counter.interval() <= now - r.xtime) { - r.xtime = now; - r.counter.process(basket); + if (stat.counter.interval() <= now - stat.xtime) { + stat.xtime = now; + stat.counter.process(basket); } } catch (Throwable t) { t.printStackTrace(); } } - //TODO Enable after scouter server working -// InteractionPerfCounterPack[] packs = basket.getList(); -// DataProxy.sendCounter(packs); + InteractionPerfCounterPack[] packs = basket.geAllAsArray(); + if (packs != null && packs.length > 0) { + DataProxy.sendCounter(packs); + } } public void putCounter(Invocation counter) { diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/InteractionCounterBasket.java b/scouter.agent.java/src/main/java/scouter/agent/counter/InteractionCounterBasket.java index ed64a3895..e1f4990a0 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/counter/InteractionCounterBasket.java +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/InteractionCounterBasket.java @@ -18,31 +18,47 @@ package scouter.agent.counter; -import scouter.agent.Configure; import scouter.lang.pack.InteractionPerfCounterPack; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; public class InteractionCounterBasket { - private Map table = new HashMap(); + private Map> packListMap = new HashMap>(); - public InteractionPerfCounterPack getPack(String objName, String interactionType) { - String key = objName + interactionType; - InteractionPerfCounterPack p = table.get(key); - if (p == null) { - p = new InteractionPerfCounterPack(objName, interactionType); - table.put(key, p); + public void add(String interactionType, InteractionPerfCounterPack pack) { + List packList = getList(interactionType); + if (packList == null) { + packList = new ArrayList(); + packListMap.put(interactionType, packList); } - return p; + packList.add(pack); } - public InteractionPerfCounterPack getPack(String interactionType) { - return getPack(Configure.getInstance().getObjName(), interactionType); + public List getList(String interactionType) { + return packListMap.get(interactionType); } - public InteractionPerfCounterPack[] getList() { - return (InteractionPerfCounterPack[]) table.values().toArray(new InteractionPerfCounterPack[table.size()]); + public InteractionPerfCounterPack[] geAllAsArray() { + Collection> valueCollection = packListMap.values(); + + int size = 0; + for (List list : valueCollection) { + size += list.size(); + } + + InteractionPerfCounterPack[] packs = new InteractionPerfCounterPack[size]; + int index = 0; + for (List list : valueCollection) { + for (InteractionPerfCounterPack pack : list) { + packs[index++] = pack; + } + } + + return packs; } } \ No newline at end of file diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteraction.java b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteraction.java index a138c4c59..9f5a516cb 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteraction.java +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteraction.java @@ -25,9 +25,11 @@ public class MeterInteraction { + private String interactionType; private String interactionName; - public MeterInteraction(String interactionName) { + public MeterInteraction(String interactionType, String interactionName) { + this.interactionType = interactionType; this.interactionName = interactionName; } @@ -127,4 +129,5 @@ public void process(Bucket b) { }); return (float) ((cnt.value == 0) ? 0 : (((double) err.value / cnt.value) * 100.0)); } + } \ No newline at end of file diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteractionManager.java b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteractionManager.java index 9ea3475e1..42a4a88b8 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteractionManager.java +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteractionManager.java @@ -18,15 +18,12 @@ package scouter.agent.counter.meter; -import org.apache.commons.lang.builder.EqualsBuilder; import scouter.agent.Configure; +import scouter.util.LinkedMap; import scouter.util.Pair; import scouter.util.RequestQueue; import scouter.util.ThreadUtil; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - import static scouter.lang.counters.CounterConstants.INTR_API_INCOMING; import static scouter.lang.counters.CounterConstants.INTR_API_OUTGOING; import static scouter.lang.counters.CounterConstants.INTR_DB_CALL; @@ -39,15 +36,10 @@ public class MeterInteractionManager extends Thread { private RequestQueue> queue = new RequestQueue>(1024); - private static Map apiOutgoingMeterMap = new ConcurrentHashMap(); - private static Map apiIncomingMeterMap = new ConcurrentHashMap(); - private static Map dbCallMeterMap = new ConcurrentHashMap(); - private static Map redisCallMeterMap = new ConcurrentHashMap(); - - // private static MeterInteraction redisCallMeter = new MeterInteraction(INTR_REDIS_CALL); - // private static MeterInteraction dbCallMeter = new MeterInteraction(INTR_DB_CALL); - // private static MeterInteraction apiIncomingMeter = new MeterInteraction(INTR_API_INCOMING); - // private static MeterInteraction apiOutgoingMeter = new MeterInteraction(INTR_API_OUTGOING); + private static LinkedMap apiOutgoingMeterMap = new LinkedMap().setMax(1000); + private static LinkedMap apiIncomingMeterMap = new LinkedMap().setMax(1000); + private static LinkedMap dbCallMeterMap = new LinkedMap().setMax(1000); + private static LinkedMap redisCallMeterMap = new LinkedMap().setMax(1000); private MeterInteractionManager() { } @@ -65,15 +57,27 @@ public final static synchronized MeterInteractionManager getInstance() { public void run() { while (true) { Pair pair = queue.get(); - //TODO create meter from key - At!! type?? + String type = pair.getLeft(); + Key key = pair.getRight(); + MeterInteraction meterInteraction = new MeterInteraction(type, type + "_" + key.fromHash + "_" + key.toHash); + + if (INTR_API_OUTGOING.equals(type)) { + apiOutgoingMeterMap.put(key, meterInteraction); + } else if (INTR_API_INCOMING.equals(type)) { + apiIncomingMeterMap.put(key, meterInteraction); + } else if (INTR_DB_CALL.equals(type)) { + dbCallMeterMap.put(key, meterInteraction); + } else if (INTR_REDIS_CALL.equals(type)) { + redisCallMeterMap.put(key, meterInteraction); + } } } /** * @return nullable */ - public MeterInteraction getApiOutgoingMeter(String fromName, String toName) { - Key key = new Key(fromName, toName); + public MeterInteraction getApiOutgoingMeter(int fromHash, int toHash) { + Key key = new Key(fromHash, toHash); MeterInteraction meter = apiOutgoingMeterMap.get(key); if (meter == null) { queue.put(new Pair(INTR_API_OUTGOING, key)); @@ -84,8 +88,8 @@ public MeterInteraction getApiOutgoingMeter(String fromName, String toName) { /** * @return nullable */ - public MeterInteraction getApiIncomingMeter(String fromName, String toName) { - Key key = new Key(fromName, toName); + public MeterInteraction getApiIncomingMeter(int fromHash, int toHash) { + Key key = new Key(fromHash, toHash); MeterInteraction meter = apiIncomingMeterMap.get(key); if (meter == null) { queue.put(new Pair(INTR_API_INCOMING, key)); @@ -96,8 +100,8 @@ public MeterInteraction getApiIncomingMeter(String fromName, String toName) { /** * @return nullable */ - public MeterInteraction getDbCallMeter(String fromName, String toName) { - Key key = new Key(fromName, toName); + public MeterInteraction getDbCallMeter(int fromHash, int toHash) { + Key key = new Key(fromHash, toHash); MeterInteraction meter = dbCallMeterMap.get(key); if (meter == null) { queue.put(new Pair(INTR_DB_CALL, key)); @@ -108,8 +112,8 @@ public MeterInteraction getDbCallMeter(String fromName, String toName) { /** * @return nullable */ - public MeterInteraction getRedisCallMeter(String fromName, String toName) { - Key key = new Key(fromName, toName); + public MeterInteraction getRedisCallMeter(int fromHash, int toHash) { + Key key = new Key(fromHash, toHash); MeterInteraction meter = redisCallMeterMap.get(key); if (meter == null) { queue.put(new Pair(INTR_REDIS_CALL, key)); @@ -117,45 +121,43 @@ public MeterInteraction getRedisCallMeter(String fromName, String toName) { return meter; } - public Map getApiOutgoingMeterMap() { + public LinkedMap getApiOutgoingMeterMap() { return apiOutgoingMeterMap; } - public Map getApiIncomingMeterMap() { + public LinkedMap getApiIncomingMeterMap() { return apiIncomingMeterMap; } - public Map getDbCallMeterMap() { + public LinkedMap getDbCallMeterMap() { return dbCallMeterMap; } - public Map getRedisCallMeterMap() { + public LinkedMap getRedisCallMeterMap() { return redisCallMeterMap; } public static class Key { - private String fromName; - private String toName; + public int fromHash; + public int toHash; - public Key(String fromName, String toName) { - this.fromName = fromName; - this.toName = toName; + public Key(int fromHash, int toHash) { + this.fromHash = fromHash; + this.toHash = toHash; } + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Key key = (Key) o; - return new EqualsBuilder() - .append(fromName, key.fromName) - .append(toName, key.toName) - .isEquals(); + return this.fromHash == key.fromHash && this.toHash == key.toHash; } @Override public int hashCode() { - return fromName.hashCode() ^ toName.hashCode(); + return fromHash ^ toHash; } } } \ No newline at end of file diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java b/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java index e3e17fbe9..a3adb0de0 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java @@ -23,25 +23,38 @@ import scouter.agent.counter.anotation.InteractionCounter; import scouter.agent.counter.meter.MeterInteraction; import scouter.agent.counter.meter.MeterInteractionManager; +import scouter.lang.counters.CounterConstants; import scouter.lang.pack.InteractionPerfCounterPack; +import scouter.util.LinkedMap; + +import java.util.Enumeration; public class InteractionPerf { private Configure conf = Configure.getInstance(); - @InteractionCounter - public void getInteractionCounter(InteractionCounterBasket basket) { - - MeterInteraction apiOutgoingMeter = MeterInteractionManager.getApiOutgoingMeter(); - InteractionPerfCounterPack pack = basket.getPack(apiOutgoingMeter.getInteractionName()); - - int period = 30; - int count = apiOutgoingMeter.getCount(period); - int errorCount = apiOutgoingMeter.getErrorCount(period); - long totalElapsed = apiOutgoingMeter.getSumTime(period); - - + @InteractionCounter(interval = 2000) + public void collectApiIncomingInteractionCounter(InteractionCounterBasket basket) { + String interactionType = CounterConstants.INTR_API_INCOMING; + + LinkedMap apiIncomingMeterMap = MeterInteractionManager.getInstance().getApiIncomingMeterMap(); + Enumeration> entries = apiIncomingMeterMap.entries(); + + while (entries.hasMoreElements()) { + LinkedMap.LinkedEntry entry = entries.nextElement(); + MeterInteractionManager.Key key = entry.getKey(); + MeterInteraction meterInteraction = entry.getValue(); + + InteractionPerfCounterPack pack = new InteractionPerfCounterPack(conf.getObjName(), interactionType); + pack.fromHash = key.fromHash; + pack.toHash = key.toHash; + int periodSec = 30; + pack.period = periodSec; + pack.count = meterInteraction.getCount(periodSec); + pack.errorCount = meterInteraction.getErrorCount(periodSec); + pack.totalElapsed = meterInteraction.getSumTime(periodSec); + + basket.add(interactionType, pack); + } } - - } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java index e8ca4ee3c..79f9213f0 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java @@ -295,6 +295,7 @@ public static void endCreateSpringRestTemplateRequest(Object _this, Object oRtn) httpclient.addHeader(oRtn, conf._trace_interservice_gxid_header_key, Hexa32.toString32(ctx.gxid)); httpclient.addHeader(oRtn, conf._trace_interservice_caller_header_key, Hexa32.toString32(ctx.txid)); httpclient.addHeader(oRtn, conf._trace_interservice_callee_header_key, Hexa32.toString32(ctx.lastApiCallStep.txid)); + httpclient.addHeader(oRtn, conf._trace_interservice_caller_obj_header_key, String.valueOf(conf.getObjHash())); PluginHttpCallTrace.call(ctx, httpclient, oRtn); diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java index 988d62dfe..7fbb5f08d 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java @@ -103,6 +103,7 @@ public TraceContext(boolean profile_summary) { public boolean is_child_tx; public long caller; public long callee; + public int callerObjHash; public String login; public String desc; diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java index d8e3e7b65..0989c9bad 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java @@ -20,6 +20,8 @@ import scouter.agent.Configure; import scouter.agent.Logger; import scouter.agent.asm.UserExceptionHandlerASM; +import scouter.agent.counter.meter.MeterInteraction; +import scouter.agent.counter.meter.MeterInteractionManager; import scouter.agent.counter.meter.MeterService; import scouter.agent.counter.meter.MeterUsers; import scouter.agent.error.REQUEST_REJECT; @@ -508,6 +510,14 @@ public static void endHttpServiceFinal(TraceContext ctx, Object request, Object delayedServiceManager.checkDelayedService(pack, ctx.serviceName); metering(pack); + if (ctx.callerObjHash != 0) { + MeterInteraction meterInteraction = MeterInteractionManager.getInstance() + .getApiIncomingMeter(ctx.callerObjHash, conf.getObjHash()); + if (meterInteraction != null) { + meterInteraction.add(pack.elapsed, pack.error > 0); + } + } + if (discardMode != XLogDiscard.DISCARD_ALL) { DataProxy.sendXLog(pack); } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient40.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient40.java index aafca4dc4..900d9a150 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient40.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient40.java @@ -74,6 +74,7 @@ private void transfer(IHttpClient httpclient, TraceContext ctx, Object host, Obj httpclient.addHeader(req, conf._trace_interservice_gxid_header_key, Hexa32.toString32(ctx.gxid)); httpclient.addHeader(req, conf._trace_interservice_caller_header_key, Hexa32.toString32(ctx.txid)); httpclient.addHeader(req, conf._trace_interservice_callee_header_key, Hexa32.toString32(calleeTxid)); + httpclient.addHeader(req, conf._trace_interservice_caller_obj_header_key, String.valueOf(conf.getObjHash())); PluginHttpCallTrace.call(ctx, req); } catch (Throwable e) { Logger.println("A001", e); diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient43.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient43.java index 3cb622059..8bca1f7b2 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient43.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient43.java @@ -73,6 +73,7 @@ private void transfer(IHttpClient httpclient, TraceContext ctx, Object host, Obj httpclient.addHeader(req, conf._trace_interservice_gxid_header_key, Hexa32.toString32(ctx.gxid)); httpclient.addHeader(req, conf._trace_interservice_caller_header_key, Hexa32.toString32(ctx.txid)); httpclient.addHeader(req, conf._trace_interservice_callee_header_key, Hexa32.toString32(calleeTxid)); + httpclient.addHeader(req, conf._trace_interservice_caller_obj_header_key, String.valueOf(conf.getObjHash())); PluginHttpCallTrace.call(ctx, req); } catch (Exception e) { Logger.println("A178", e); diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpURLConnection.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpURLConnection.java index 6224b02d5..3b1d15bb4 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpURLConnection.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpURLConnection.java @@ -16,10 +16,6 @@ */ package scouter.agent.trace.api; -import java.lang.reflect.Field; -import java.net.HttpURLConnection; -import java.net.URL; - import scouter.agent.Configure; import scouter.agent.plugin.PluginHttpCallTrace; import scouter.agent.trace.HookArgs; @@ -28,6 +24,10 @@ import scouter.util.Hexa32; import scouter.util.KeyGen; +import java.lang.reflect.Field; +import java.net.HttpURLConnection; +import java.net.URL; + public class ForHttpURLConnection implements ApiCallTraceHelper.IHelper { static Class httpclass = null; @@ -96,6 +96,7 @@ private void transfer(TraceContext ctx, HttpURLConnection urlCon, long calleeTxi urlCon.setRequestProperty(conf._trace_interservice_gxid_header_key, Hexa32.toString32(ctx.gxid)); urlCon.setRequestProperty(conf._trace_interservice_callee_header_key, Hexa32.toString32(calleeTxid)); urlCon.setRequestProperty(conf._trace_interservice_caller_header_key, Hexa32.toString32(ctx.txid)); + urlCon.setRequestProperty(conf._trace_interservice_caller_obj_header_key, String.valueOf(conf.getObjHash())); PluginHttpCallTrace.call(ctx, urlCon); } catch (Throwable t) { diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForNettyHttpRequest.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForNettyHttpRequest.java index bd4e2d0ab..b4b45619d 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForNettyHttpRequest.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForNettyHttpRequest.java @@ -82,6 +82,7 @@ private void transfer(IHttpClient httpclient, TraceContext ctx, Object req, long httpclient.addHeader(req, conf._trace_interservice_gxid_header_key, Hexa32.toString32(ctx.gxid)); httpclient.addHeader(req, conf._trace_interservice_caller_header_key, Hexa32.toString32(ctx.txid)); httpclient.addHeader(req, conf._trace_interservice_callee_header_key, Hexa32.toString32(calleeTxid)); + httpclient.addHeader(req, conf._trace_interservice_caller_obj_header_key, String.valueOf(conf.getObjHash())); PluginHttpCallTrace.call(ctx, httpclient, req); diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForRibbonLB.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForRibbonLB.java index 6a90d24d3..379bcfd21 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForRibbonLB.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForRibbonLB.java @@ -82,6 +82,7 @@ private void transfer(IHttpClient httpclient, TraceContext ctx, Object req, long httpclient.addHeader(req, conf._trace_interservice_gxid_header_key, Hexa32.toString32(ctx.gxid)); httpclient.addHeader(req, conf._trace_interservice_caller_header_key, Hexa32.toString32(ctx.txid)); httpclient.addHeader(req, conf._trace_interservice_callee_header_key, Hexa32.toString32(calleeTxid)); + httpclient.addHeader(req, conf._trace_interservice_caller_obj_header_key, String.valueOf(conf.getObjHash())); PluginHttpCallTrace.call(ctx, httpclient, req); diff --git a/scouter.agent.java/src/main/java/scouter/xtra/http/HttpTrace.java b/scouter.agent.java/src/main/java/scouter/xtra/http/HttpTrace.java index 0e092d111..320b9d582 100644 --- a/scouter.agent.java/src/main/java/scouter/xtra/http/HttpTrace.java +++ b/scouter.agent.java/src/main/java/scouter/xtra/http/HttpTrace.java @@ -189,8 +189,20 @@ public void start(TraceContext ctx, Object req, Object res) { ctx.caller = Hexa32.toLong32(caller); ctx.is_child_tx = true; } + String callerObjHashStr = request.getHeader(conf._trace_interservice_caller_obj_header_key); + if (callerObjHashStr != null) { + try { + ctx.callerObjHash = Integer.parseInt(callerObjHashStr); + } catch (NumberFormatException e) { + } + ctx.is_child_tx = true; + } } catch (Throwable t) { } + + if (ctx.is_child_tx) { + response.setHeader(conf._trace_interservice_callee_obj_header_key, String.valueOf(conf.getObjHash())); + } } if (conf.trace_response_gxid_enabled && !ctx.isStaticContents) { diff --git a/scouter.common/src/main/java/scouter/lang/pack/InteractionPerfCounterPack.java b/scouter.common/src/main/java/scouter/lang/pack/InteractionPerfCounterPack.java index a40ba1702..63b3e7050 100644 --- a/scouter.common/src/main/java/scouter/lang/pack/InteractionPerfCounterPack.java +++ b/scouter.common/src/main/java/scouter/lang/pack/InteractionPerfCounterPack.java @@ -45,10 +45,8 @@ public class InteractionPerfCounterPack implements Pack { */ public String interactionType; - public String fromName; - public String fromTextType; - public String toName; - public String toTextType; + public int fromHash; + public int toHash; public int period; public int count; @@ -57,22 +55,24 @@ public class InteractionPerfCounterPack implements Pack { public MapValue customData = new MapValue(); + public InteractionPerfCounterPack() { + } + public InteractionPerfCounterPack(String objName, String interactionType) { this.objName = objName; this.interactionType = interactionType; } public byte getPackType() { - return PackEnum.PERF_COUNTER; + return PackEnum.PERF_INTERACTION_COUNTER; } public void write(DataOutputX dout) throws IOException { dout.writeLong(time); dout.writeText(objName); - dout.writeText(fromName); - dout.writeText(fromTextType); - dout.writeText(toName); - dout.writeText(toTextType); + dout.writeText(interactionType); + dout.writeInt(fromHash); + dout.writeInt(toHash); dout.writeInt(period); dout.writeInt(count); dout.writeInt(errorCount); @@ -83,10 +83,9 @@ public void write(DataOutputX dout) throws IOException { public Pack read(DataInputX din) throws IOException { this.time = din.readLong(); this.objName = din.readText(); - this.fromName = din.readText(); - this.fromTextType = din.readText(); - this.toName = din.readText(); - this.toTextType = din.readText(); + this.interactionType = din.readText(); + this.fromHash = din.readInt(); + this.toHash = din.readInt(); this.period = din.readInt(); this.count = din.readInt(); this.errorCount = din.readInt(); @@ -120,10 +119,8 @@ public String toString() { "time=" + time + ", objName='" + objName + '\'' + ", interactionType='" + interactionType + '\'' + - ", fromName='" + fromName + '\'' + - ", fromTextType='" + fromTextType + '\'' + - ", toName='" + toName + '\'' + - ", toTextType='" + toTextType + '\'' + + ", fromHash='" + fromHash + '\'' + + ", toHash='" + toHash + '\'' + ", period=" + period + ", count=" + count + ", errorCount=" + errorCount + diff --git a/scouter.common/src/main/java/scouter/lang/pack/PackEnum.java b/scouter.common/src/main/java/scouter/lang/pack/PackEnum.java index 28c6143fe..87f1ed657 100644 --- a/scouter.common/src/main/java/scouter/lang/pack/PackEnum.java +++ b/scouter.common/src/main/java/scouter/lang/pack/PackEnum.java @@ -83,6 +83,8 @@ public static Pack createNonExt(byte packType) { return new SummaryPack(); case BATCH: return new BatchPack(); + case PERF_INTERACTION_COUNTER: + return new InteractionPerfCounterPack(); default: return null; } diff --git a/scouter.server/src/main/java/scouter/server/Configure.java b/scouter.server/src/main/java/scouter/server/Configure.java index e4e7a394b..aa29963d7 100644 --- a/scouter.server/src/main/java/scouter/server/Configure.java +++ b/scouter.server/src/main/java/scouter/server/Configure.java @@ -118,6 +118,8 @@ public final static synchronized Configure newInstanceForTestCase() { public boolean log_udp_packet = false; @ConfigDesc("Logging incoming CounterPack") public boolean log_udp_counter = false; + @ConfigDesc("Logging incoming PerfInteractionCounterPack") + public boolean log_udp_interaction_counter = false; @ConfigDesc("Logging incoming XLogPack") public boolean log_udp_xlog = false; @ConfigDesc("Logging incoming ProfilePack") @@ -594,6 +596,7 @@ private void apply() { this.log_udp_multipacket = getBoolean("log_udp_multipacket", false); this.log_udp_packet = getBoolean("log_udp_packet", false); this.log_udp_counter = getBoolean("log_udp_counter", false); + this.log_udp_interaction_counter = getBoolean("log_udp_interaction_counter", false); this.log_udp_xlog = getBoolean("log_udp_xlog", false); this.log_udp_profile = getBoolean("log_udp_profile", false); this.log_udp_text = getBoolean("log_udp_text", false); diff --git a/scouter.server/src/main/java/scouter/server/core/cache/InteractionCounterCacheKey.java b/scouter.server/src/main/java/scouter/server/core/cache/InteractionCounterCacheKey.java new file mode 100644 index 000000000..db7a3981d --- /dev/null +++ b/scouter.server/src/main/java/scouter/server/core/cache/InteractionCounterCacheKey.java @@ -0,0 +1,50 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.server.core.cache; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 8. 15. + */ +public class InteractionCounterCacheKey { + private String interactionType; + private int fromHash; + private int toHash; + + public InteractionCounterCacheKey(String interactionType, int fromHash, int toHash) { + this.interactionType = interactionType; + this.fromHash = fromHash; + this.toHash = toHash; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + InteractionCounterCacheKey that = (InteractionCounterCacheKey) o; + + return (fromHash == that.fromHash && toHash == that.toHash && + (interactionType == that.interactionType || interactionType.equals(that.interactionType))); + } + + @Override + public int hashCode() { + return interactionType.hashCode() ^ fromHash ^ toHash; + } +} diff --git a/scouter.server/src/main/scala/scouter/server/core/InteractionPerfCountCore.scala b/scouter.server/src/main/scala/scouter/server/core/InteractionPerfCountCore.scala new file mode 100644 index 000000000..334ed09d9 --- /dev/null +++ b/scouter.server/src/main/scala/scouter/server/core/InteractionPerfCountCore.scala @@ -0,0 +1,45 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package scouter.server.core + +import scouter.lang.pack.InteractionPerfCounterPack +import scouter.server.Logger +import scouter.server.core.cache.{InteractionCounterCache, InteractionCounterCacheKey} +import scouter.server.util.ThreadScala +import scouter.util.{HashUtil, RequestQueue} + +/** + * request queue of interaction perf counter data and also dispatcher of the queue + */ +object InteractionPerfCountCore { + + var queue = new RequestQueue[InteractionPerfCounterPack](CoreRun.MAX_QUE_SIZE) + + ThreadScala.startDaemon("scouter.server.core.InteractionPerfCountCore", {CoreRun.running}) { + val pack = queue.get() + val objHash = HashUtil.hash(pack.objName) + InteractionCounterCache.put(objHash, new InteractionCounterCacheKey(pack.interactionType, pack.fromHash, pack.toHash), pack) + } + + def add(p: InteractionPerfCounterPack) { + val ok = queue.put(p) + if (!ok) { + Logger.println("S1109", 10, "queue exceeded!!"); + } + } +} diff --git a/scouter.server/src/main/scala/scouter/server/core/cache/InteractionCounterCache.scala b/scouter.server/src/main/scala/scouter/server/core/cache/InteractionCounterCache.scala new file mode 100644 index 000000000..8d5d47f84 --- /dev/null +++ b/scouter.server/src/main/scala/scouter/server/core/cache/InteractionCounterCache.scala @@ -0,0 +1,63 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.server.core.cache + +import java.util + +import scouter.lang.CounterKey +import scouter.lang.pack.InteractionPerfCounterPack +import scouter.server.util.{EnumerScala, ThreadScala} +import scouter.util.{CacheTable, ThreadUtil} + +/** + * Singleton object of the memory cache for counter data. + */ +object InteractionCounterCache { + val objCacheMap = new util.HashMap[Int, CacheTable[InteractionCounterCacheKey, InteractionPerfCounterPack]]() + val keepTime = 10000 + + ThreadScala.startDaemon("scouter.server.core.cache.CounterCache") { + while (true) { + ThreadUtil.sleep(5000) + + EnumerScala.foreach(objCacheMap.values().iterator(), + (cache: CacheTable[InteractionCounterCacheKey, InteractionPerfCounterPack]) => { + cache.clearExpiredItems() + }) + } + } + + def put(objHash: Int, key: InteractionCounterCacheKey, pack: InteractionPerfCounterPack) { + var cache = objCacheMap.get(objHash) + if (cache == null) { + cache = new CacheTable[InteractionCounterCacheKey, InteractionPerfCounterPack]() + objCacheMap.put(objHash, cache) + } + val packPrev = cache.get(key) + cache.put(key, pack, keepTime) + } + + def get(objHash: Int, key: InteractionCounterCacheKey): InteractionPerfCounterPack = { + var cache = objCacheMap.get(objHash) + if (cache == null) { + return null + } + cache.get(key) + } +} diff --git a/scouter.server/src/main/scala/scouter/server/netio/data/NetDataProcessor.scala b/scouter.server/src/main/scala/scouter/server/netio/data/NetDataProcessor.scala index 67255190b..79b7426e9 100644 --- a/scouter.server/src/main/scala/scouter/server/netio/data/NetDataProcessor.scala +++ b/scouter.server/src/main/scala/scouter/server/netio/data/NetDataProcessor.scala @@ -22,35 +22,14 @@ import java.net.InetAddress import scouter.io.{DataInputX, DataOutputX} import scouter.lang.{TextTypes, TimeTypeEnum} import scouter.lang.counters.CounterConstants -import scouter.lang.pack.AlertPack -import scouter.lang.pack.ObjectPack -import scouter.lang.pack.Pack -import scouter.lang.pack.PackEnum -import scouter.lang.pack.PerfCounterPack -import scouter.lang.pack.StackPack -import scouter.lang.pack.StatusPack -import scouter.lang.pack.TextPack -import scouter.lang.pack.XLogPack -import scouter.lang.pack.BatchPack -import scouter.lang.pack.XLogProfilePack +import scouter.lang.pack._ import scouter.net.NetCafe import scouter.server.Configure import scouter.server.Logger -import scouter.server.core.AgentManager -import scouter.server.core.AlertCore -import scouter.server.core.PerfCountCore -import scouter.server.core.ProfileCore -import scouter.server.core.XLogCore -import scouter.server.core.StackAnalyzerCore -import scouter.server.core.StatusCore -import scouter.server.core.TextCore -import scouter.server.core.BatchCore +import scouter.server.core._ import scouter.server.core.cache.TextCache import scouter.server.util.ThreadScala import scouter.util.{BytesUtil, HashUtil, RequestQueue, StringUtil} -import scouter.server.core.SummaryCore -import scouter.lang.pack.SummaryPack -import scouter.lang.pack.SummaryPack import scouter.lang.value.DecimalValue object NetDataProcessor { class NetData(_data: Array[Byte], _addr: InetAddress) { @@ -171,6 +150,13 @@ object NetDataProcessor { if (conf.log_udp_counter) { System.out.println("DEBUG UDP COUNTER: " + p) } + case PackEnum.PERF_INTERACTION_COUNTER => + val counterPack = p.asInstanceOf[InteractionPerfCounterPack] + InteractionPerfCountCore.add(counterPack) + + if (conf.log_udp_interaction_counter) { + System.out.println("DEBUG UDP INTERACTION COUNTER: " + p) + } case PackEnum.XLOG => XLogCore.add(p.asInstanceOf[XLogPack]) if (conf.log_udp_xlog) { From 0143560cf61b4256501dfcfd2ce664e5d6f87cd5 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Fri, 17 Aug 2018 00:03:49 +0900 Subject: [PATCH 26/53] [agent.java] add db call interaction metering. --- .../agent/asm/JDBCConnectionOpenASM.java | 1 + .../agent/counter/task/InteractionPerf.java | 17 +++++++- .../scouter/agent/netio/data/DataProxy.java | 15 ++++++- .../agent/plugin/PluginJdbcPoolTrace.java | 2 +- .../scouter/agent/trace/TraceContext.java | 3 +- .../java/scouter/agent/trace/TraceSQL.java | 42 ++++++++++++------- .../java/scouter/xtra/jdbc/TraceSQL0.java | 1 + 7 files changed, 62 insertions(+), 19 deletions(-) diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java index ea7571a79..84b068287 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java @@ -50,6 +50,7 @@ public static void regist(String klass, String method) { public JDBCConnectionOpenASM() { AsmUtil.add(reserved, "org/apache/tomcat/dbcp/dbcp/BasicDataSource", "getConnection"); AsmUtil.add(reserved, "org/apache/tomcat/jdbc/pool/DataSourceProxy", "getConnection"); + AsmUtil.add(reserved, "org/apache/commons/dbcp/BasicDataSource", "getConnection"); AsmUtil.add(reserved, "org/apache/commons/dbcp2/BasicDataSource", "getConnection"); AsmUtil.add(reserved, "com/zaxxer/hikari/HikariDataSource", "getConnection"); diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java b/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java index a3adb0de0..d4fc7dce1 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java @@ -35,9 +35,23 @@ public class InteractionPerf { @InteractionCounter(interval = 2000) public void collectApiIncomingInteractionCounter(InteractionCounterBasket basket) { - String interactionType = CounterConstants.INTR_API_INCOMING; + int periodSec = 30; + String interactionType = CounterConstants.INTR_API_INCOMING; LinkedMap apiIncomingMeterMap = MeterInteractionManager.getInstance().getApiIncomingMeterMap(); + addInteractionsToBasket(basket, interactionType, apiIncomingMeterMap, periodSec); + } + + @InteractionCounter(interval = 2000) + public void collectDbCallInteractionCounter(InteractionCounterBasket basket) { + + int periodSec = 30; + String interactionType = CounterConstants.INTR_DB_CALL; + LinkedMap dbCallMeterMap = MeterInteractionManager.getInstance().getDbCallMeterMap(); + addInteractionsToBasket(basket, interactionType, dbCallMeterMap, periodSec); + } + + private void addInteractionsToBasket(InteractionCounterBasket basket, String interactionType, LinkedMap apiIncomingMeterMap, int periodSec) { Enumeration> entries = apiIncomingMeterMap.entries(); while (entries.hasMoreElements()) { @@ -48,7 +62,6 @@ public void collectApiIncomingInteractionCounter(InteractionCounterBasket basket InteractionPerfCounterPack pack = new InteractionPerfCounterPack(conf.getObjName(), interactionType); pack.fromHash = key.fromHash; pack.toHash = key.toHash; - int periodSec = 30; pack.period = periodSec; pack.count = meterInteraction.getCount(periodSec); pack.errorCount = meterInteraction.getErrorCount(periodSec); diff --git a/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java b/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java index 8cf8360fd..7975997a0 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java +++ b/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java @@ -69,6 +69,19 @@ public static void sendServiceName(int hash, String service) { serviceName.put(hash); udpCollect.add(new TextPack(TextTypes.SERVICE, hash, service)); } + private static IntLinkedSet objName = new IntLinkedSet().setMax(10000); + public static int sendObjName(String objName) { + int hash = HashUtil.hash(objName); + sendServiceName(hash,objName); + return hash; + } + public static void sendObjName(int hash, String objName) { + if (serviceName.contains(hash)) { + return ; + } + serviceName.put(hash); + udpCollect.add(new TextPack(TextTypes.OBJECT, hash, objName)); + } private static IntLinkedSet referer = new IntLinkedSet().setMax(1000); public static int sendReferer(String text) { int hash = HashUtil.hash(text); @@ -91,7 +104,7 @@ public static int sendUserAgent(String text) { return hash; } private static IntLinkedSet methodName = new IntLinkedSet().setMax(10000); - public static int sendMethodName( String name) { + public static int sendMethodName(String name) { int hash = HashUtil.hash(name); if (methodName.contains(hash)) { return hash; diff --git a/scouter.agent.java/src/main/java/scouter/agent/plugin/PluginJdbcPoolTrace.java b/scouter.agent.java/src/main/java/scouter/agent/plugin/PluginJdbcPoolTrace.java index 0957fd01c..eb93e1dee 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/plugin/PluginJdbcPoolTrace.java +++ b/scouter.agent.java/src/main/java/scouter/agent/plugin/PluginJdbcPoolTrace.java @@ -30,7 +30,7 @@ public class PluginJdbcPoolTrace { public static String url(TraceContext ctx, String msg, Object pool) { if (plugIn != null) { try { - return plugIn.url(new WrContext(ctx),msg, pool); + return plugIn.url(new WrContext(ctx), msg, pool); } catch (Throwable t) { } } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java index 7fbb5f08d..929702edb 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java @@ -28,7 +28,7 @@ import java.util.concurrent.LinkedBlockingQueue; public class TraceContext { - private boolean isSummary; + private boolean isSummary; public boolean isStaticContents; public boolean isFullyDiscardService; @@ -134,6 +134,7 @@ public TraceContext(boolean profile_summary) { public SqlStep lastSqlStep; public ApiCallStep lastApiCallStep; + public int lastDbUrl; public Queue temporaryDumpSteps = new LinkedBlockingQueue(5); public boolean hasDumpStack; diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceSQL.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceSQL.java index 32ef7f142..3cc9b4b71 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceSQL.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceSQL.java @@ -18,6 +18,8 @@ import scouter.agent.Configure; import scouter.agent.Logger; +import scouter.agent.counter.meter.MeterInteraction; +import scouter.agent.counter.meter.MeterInteractionManager; import scouter.agent.counter.meter.MeterSQL; import scouter.agent.netio.data.DataProxy; import scouter.agent.plugin.PluginJdbcPoolTrace; @@ -31,7 +33,6 @@ import scouter.lang.step.SqlStep3; import scouter.lang.step.SqlXType; import scouter.util.EscapeLiteralSQL; -import scouter.util.HashUtil; import scouter.util.IntKeyLinkedMap; import scouter.util.IntLinkedSet; import scouter.util.StringUtil; @@ -77,7 +78,7 @@ public class TraceSQL { private static IntKeyLinkedMap checkedSql = new IntKeyLinkedMap().setMax(1001); static IntKeyLinkedMap urlTable = new IntKeyLinkedMap().setMax(500); - static DBURL unknown = new DBURL(0, null); + static DBURL unknown = new DBURL(null, null); public static void set(int idx, boolean p) { TraceContext ctx = TraceContextManager.getContext(); @@ -266,6 +267,10 @@ public static void end(Object stat, Throwable thr, int updatedCount) { tCtx.sqlTime += step.elapsed; ServiceSummary.getInstance().process(step); MeterSQL.getInstance().add(step.elapsed, step.error != 0); + MeterInteraction meter = MeterInteractionManager.getInstance().getDbCallMeter(conf.getObjHash(), tCtx.lastDbUrl); + if (meter != null) { + meter.add(step.elapsed, step.error != 0); + } tCtx.profile.pop(step); } public static void prepare(Object o, String sql) { @@ -488,8 +493,13 @@ public static Object dbcOpenStart(int hash, String msg, Object pool) { } DBURL dbUrl = getUrl(ctx, msg, pool); if (dbUrl != unknown) { - hash = DataProxy.sendMethodName(dbUrl.url); + hash = DataProxy.sendMethodName(dbUrl.description); + int urlHash = DataProxy.sendObjName(dbUrl.url); + ctx.lastDbUrl = urlHash; + } else { + ctx.lastDbUrl = 0; } + p.hash = hash; ctx.profile.push(p); if (conf.profile_connection_open_fullstack_enabled) { @@ -503,11 +513,13 @@ public static Object dbcOpenStart(int hash, String msg, Object pool) { } static class DBURL { - int hash; + String description; String url; - public DBURL(int hash, String url) { - this.hash = hash; + + + public DBURL(String url, String description) { this.url = url; + this.description = description; } } @@ -526,22 +538,24 @@ private static DBURL getUrl(TraceContext ctx, String msg, Object pool) { try { Method m = pool.getClass().getMethod("getUrl", new Class[0]); if (m != null) { - String u = "OPEN-DBC " + m.invoke(pool, new Object[0]) + " (" + msg + ")"; - dbUrl = new DBURL(HashUtil.hash(u), u); + String url = (String) m.invoke(pool, new Object[0]); + String description = "OPEN-DBC " + url + " (" + msg + ")"; + dbUrl = new DBURL(url, description); } } catch (Exception e) { try { Method m = pool.getClass().getMethod("getJdbcUrl", new Class[0]); if (m != null) { - String u = "OPEN-DBC " + m.invoke(pool, new Object[0]) + " (" + msg + ")"; - dbUrl = new DBURL(HashUtil.hash(u), u); + String url = (String) m.invoke(pool, new Object[0]); + String description = "OPEN-DBC " + url + " (" + msg + ")"; + dbUrl = new DBURL(url, description); } } catch (Exception e1) { try { - String u = PluginJdbcPoolTrace.url(ctx, msg, pool); - if (u != null) { - u = "OPEN-DBC " + u; - dbUrl = new DBURL(HashUtil.hash(u), u); + String url = PluginJdbcPoolTrace.url(ctx, msg, pool); + if (url != null) { + String description = "OPEN-DBC " + url + " (" + msg + ")"; + dbUrl = new DBURL(url, description); } } catch (Throwable ignore) { } diff --git a/scouter.agent.java/src/main/java/scouter/xtra/jdbc/TraceSQL0.java b/scouter.agent.java/src/main/java/scouter/xtra/jdbc/TraceSQL0.java index 6c4c63e15..a74acd98c 100644 --- a/scouter.agent.java/src/main/java/scouter/xtra/jdbc/TraceSQL0.java +++ b/scouter.agent.java/src/main/java/scouter/xtra/jdbc/TraceSQL0.java @@ -221,6 +221,7 @@ public Object dbcOpenEnd(Object conn, Object stat) { if (tctx == null) return conn; + tctx.lastDbUrl = 0; Connection conn0 = (Connection) conn; step.elapsed = (int) (System.currentTimeMillis() - tctx.startTime) - step.start_time; if (tctx.profile_thread_cputime) { From 95f7c4a88fd6cfe233f90ef8e98ea24a3bb7551f Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Fri, 17 Aug 2018 00:13:55 +0900 Subject: [PATCH 27/53] [agent.java] add db call interaction metering. --- .../src/main/java/scouter/xtra/jdbc/DetectConnection.java | 1 + .../src/main/java/scouter/xtra/jdbc/TraceSQL0.java | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/scouter.agent.java/src/main/java/scouter/xtra/jdbc/DetectConnection.java b/scouter.agent.java/src/main/java/scouter/xtra/jdbc/DetectConnection.java index 0f2786dfd..10803de39 100644 --- a/scouter.agent.java/src/main/java/scouter/xtra/jdbc/DetectConnection.java +++ b/scouter.agent.java/src/main/java/scouter/xtra/jdbc/DetectConnection.java @@ -128,6 +128,7 @@ final public void close() throws SQLException { if (ctx == null) return; + ctx.lastDbUrl = 0; MethodStep p = new MethodStep(); p.hash = HASH_CLOSE; p.start_time = (int) (stime - ctx.startTime); diff --git a/scouter.agent.java/src/main/java/scouter/xtra/jdbc/TraceSQL0.java b/scouter.agent.java/src/main/java/scouter/xtra/jdbc/TraceSQL0.java index a74acd98c..6c4c63e15 100644 --- a/scouter.agent.java/src/main/java/scouter/xtra/jdbc/TraceSQL0.java +++ b/scouter.agent.java/src/main/java/scouter/xtra/jdbc/TraceSQL0.java @@ -221,7 +221,6 @@ public Object dbcOpenEnd(Object conn, Object stat) { if (tctx == null) return conn; - tctx.lastDbUrl = 0; Connection conn0 = (Connection) conn; step.elapsed = (int) (System.currentTimeMillis() - tctx.startTime) - step.start_time; if (tctx.profile_thread_cputime) { From e3afbd38c7a2181f3124375c75ea54c51b7fc926 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Sat, 18 Aug 2018 21:53:46 +0900 Subject: [PATCH 28/53] [agent.java] add redis call interaction metering. --- .../java/scouter/agent/AgentTransformer.java | 7 +- .../agent/asm/redis/JedisCommandASM.java | 123 ++++++++++++++++++ ...nnectionASM.java => JedisProtocolASM.java} | 10 +- .../scouter/agent/counter/meter/MeterAPI.java | 4 +- .../agent/counter/meter/MeterInteraction.java | 2 +- .../scouter/agent/counter/meter/MeterSQL.java | 4 +- .../agent/counter/task/InteractionPerf.java | 13 +- .../scouter/agent/netio/data/DataProxy.java | 8 +- .../scouter/agent/trace/TraceContext.java | 2 + .../java/scouter/agent/trace/TraceMain.java | 33 ++++- 10 files changed, 184 insertions(+), 22 deletions(-) create mode 100644 scouter.agent.java/src/main/java/scouter/agent/asm/redis/JedisCommandASM.java rename scouter.agent.java/src/main/java/scouter/agent/asm/redis/{JedisConnectionASM.java => JedisProtocolASM.java} (94%) diff --git a/scouter.agent.java/src/main/java/scouter/agent/AgentTransformer.java b/scouter.agent.java/src/main/java/scouter/agent/AgentTransformer.java index e8b4ed5e8..71c61c980 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/AgentTransformer.java +++ b/scouter.agent.java/src/main/java/scouter/agent/AgentTransformer.java @@ -50,7 +50,8 @@ import scouter.agent.asm.asyncsupport.executor.ExecutorServiceASM; import scouter.agent.asm.asyncsupport.spring.SpringAsyncExecutionASM; import scouter.agent.asm.asyncsupport.spring.SpringAsyncExecutionAspectSupportDoSubmitASM; -import scouter.agent.asm.redis.JedisConnectionASM; +import scouter.agent.asm.redis.JedisCommandASM; +import scouter.agent.asm.redis.JedisProtocolASM; import scouter.agent.asm.redis.RedisCacheKeyASM; import scouter.agent.asm.redis.RedisKeyASM; import scouter.agent.asm.util.AsmUtil; @@ -102,7 +103,6 @@ public static void reload() { temp.add(new RequestStartAsyncASM()); temp.add(new AsyncContextDispatchASM()); - //TODO temporary block temp.add(new JDBCPreparedStatementASM()); temp.add(new JDBCResultSetASM()); temp.add(new JDBCStatementASM()); @@ -127,9 +127,10 @@ public static void reload() { temp.add(new CallRunnableASM()); temp.add(new ExecutorServiceASM()); + temp.add(new JedisCommandASM()); temp.add(new RedisKeyASM()); temp.add(new RedisCacheKeyASM()); - temp.add(new JedisConnectionASM()); + temp.add(new JedisProtocolASM()); temp.add(new SpringReqMapASM()); temp.add(new HystrixCommandASM()); diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/redis/JedisCommandASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/redis/JedisCommandASM.java new file mode 100644 index 000000000..785cc94ec --- /dev/null +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/redis/JedisCommandASM.java @@ -0,0 +1,123 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.agent.asm.redis; + +import scouter.agent.ClassDesc; +import scouter.agent.Configure; +import scouter.agent.asm.IASM; +import scouter.agent.asm.util.AsmUtil; +import scouter.agent.trace.TraceMain; +import scouter.org.objectweb.asm.ClassVisitor; +import scouter.org.objectweb.asm.Label; +import scouter.org.objectweb.asm.MethodVisitor; +import scouter.org.objectweb.asm.Opcodes; +import scouter.org.objectweb.asm.Type; +import scouter.org.objectweb.asm.commons.LocalVariablesSorter; + +import java.util.HashSet; +import java.util.Set; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 3. 20. + */ +public class JedisCommandASM implements IASM, Opcodes { + private Configure conf = Configure.getInstance(); + + private static Set hookingClasses = new HashSet(); + static { + hookingClasses.add("redis/clients/jedis/Jedis"); + hookingClasses.add("redis/clients/jedis/BinaryJedis"); + } + public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc classDesc) { + if (conf._hook_redis_enabled == false) + return cv; + + if (hookingClasses.contains(className)) { + return new JedisCommandCV(cv, className); + } + + return cv; + } +} + +class JedisCommandCV extends ClassVisitor implements Opcodes { + String className; + + public JedisCommandCV(ClassVisitor cv, String className) { + super(ASM5, cv); + this.className = className; + } + + @Override + public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); + if (mv == null) { + return null; + } + if (AsmUtil.isSpecial(name)) { + return mv; + } + if (AsmUtil.isPublic(access)) { + return new JedisCommandMV(className, access, name, desc, mv); + } + + return mv; + } +} + +class JedisCommandMV extends LocalVariablesSorter implements Opcodes { + private static final String TRACEMAIN = TraceMain.class.getName().replace('.', '/'); + private static final String START_METHOD = "setTraceJedisHostPort"; + private static final String START_SIGNATURE = "(Ljava/lang/String;I)V"; + + private String className; + private String name; + private String desc; + private int statIdx; + private Label startFinally = new Label(); + + public JedisCommandMV(String className, int access, String name, String desc, MethodVisitor mv) { + super(ASM5, access, desc, mv); + this.className = className; + this.name = name; + this.desc = desc; + } + + @Override + public void visitCode() { + int hostIdx = newLocal(Type.getType("Ljava/lang/String;")); + int portIdx = newLocal(Type.INT_TYPE); + + mv.visitVarInsn(ALOAD, 0); + mv.visitFieldInsn(GETFIELD, className, "client", "Lredis/clients/jedis/Client;"); + mv.visitMethodInsn(INVOKEVIRTUAL, "redis/clients/jedis/Client", "getHost", "()Ljava/lang/String;", false); + mv.visitVarInsn(ASTORE, hostIdx); + + mv.visitVarInsn(ALOAD, 0); + mv.visitFieldInsn(GETFIELD, className, "client", "Lredis/clients/jedis/Client;"); + mv.visitMethodInsn(INVOKEVIRTUAL, "redis/clients/jedis/Client", "getPort", "()I", false); + mv.visitVarInsn(ISTORE, portIdx); + + mv.visitVarInsn(ALOAD, hostIdx); + mv.visitVarInsn(ILOAD, portIdx); + mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACEMAIN, START_METHOD, START_SIGNATURE, false); + + mv.visitCode(); + } +} diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/redis/JedisConnectionASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/redis/JedisProtocolASM.java similarity index 94% rename from scouter.agent.java/src/main/java/scouter/agent/asm/redis/JedisConnectionASM.java rename to scouter.agent.java/src/main/java/scouter/agent/asm/redis/JedisProtocolASM.java index 56ab69704..7d6a19e2a 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/asm/redis/JedisConnectionASM.java +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/redis/JedisProtocolASM.java @@ -37,7 +37,7 @@ /** * @author Gun Lee (gunlee01@gmail.com) on 2018. 3. 20. */ -public class JedisConnectionASM implements IASM, Opcodes { +public class JedisProtocolASM implements IASM, Opcodes { private Configure conf = Configure.getInstance(); private static List hookingPattern = new ArrayList(); @@ -46,7 +46,7 @@ public class JedisConnectionASM implements IASM, Opcodes { } private List targetList; - public JedisConnectionASM() { + public JedisProtocolASM() { targetList = HookingSet.getHookingMethodSet(HookingSet.buildPatterns("", hookingPattern)); } @@ -57,7 +57,7 @@ public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc class for (int i = 0; i < targetList.size(); i++) { HookingSet mset = targetList.get(i); if (mset.classMatch.include(className)) { - return new JedisConnectionCV(cv, mset, className); + return new JedisProtocolCV(cv, mset, className); } } @@ -65,11 +65,11 @@ public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc class } } -class JedisConnectionCV extends ClassVisitor implements Opcodes { +class JedisProtocolCV extends ClassVisitor implements Opcodes { String className; HookingSet mset; - public JedisConnectionCV(ClassVisitor cv, HookingSet mset, String className) { + public JedisProtocolCV(ClassVisitor cv, HookingSet mset, String className) { super(ASM5, cv); this.mset = mset; this.className = className; diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterAPI.java b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterAPI.java index 7c41c5090..6e61dd533 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterAPI.java +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterAPI.java @@ -81,12 +81,12 @@ public void process(Bucket b) { public long getSumTime(int period) { final LONG sum = new LONG(); - period = meter.search(period, new Handler() { + meter.search(period, new Handler() { public void process(Bucket b) { sum.value += b.time; } }); - return ((period == 0) ? 0 : sum.value / period); + return sum.value; } public int getCount(int period) { diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteraction.java b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteraction.java index 9f5a516cb..fd95fb111 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteraction.java +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteraction.java @@ -94,7 +94,7 @@ public void process(Bucket b) { sum.value += b.time; } }); - return ((period == 0) ? 0 : sum.value / period); + return sum.value; } public int getCount(int period) { diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterSQL.java b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterSQL.java index db81010bc..ce9248de2 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterSQL.java +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterSQL.java @@ -81,12 +81,12 @@ public void process(Bucket b) { public long getSumTime(int period) { final LONG sum = new LONG(); - period = meter.search(period, new Handler() { + meter.search(period, new Handler() { public void process(Bucket b) { sum.value += b.time; } }); - return ((period == 0) ? 0 : sum.value / period); + return sum.value; } diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java b/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java index d4fc7dce1..705553598 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java @@ -33,7 +33,7 @@ public class InteractionPerf { private Configure conf = Configure.getInstance(); - @InteractionCounter(interval = 2000) + @InteractionCounter(interval = 5000) public void collectApiIncomingInteractionCounter(InteractionCounterBasket basket) { int periodSec = 30; @@ -42,7 +42,7 @@ public void collectApiIncomingInteractionCounter(InteractionCounterBasket basket addInteractionsToBasket(basket, interactionType, apiIncomingMeterMap, periodSec); } - @InteractionCounter(interval = 2000) + @InteractionCounter(interval = 5000) public void collectDbCallInteractionCounter(InteractionCounterBasket basket) { int periodSec = 30; @@ -51,6 +51,15 @@ public void collectDbCallInteractionCounter(InteractionCounterBasket basket) { addInteractionsToBasket(basket, interactionType, dbCallMeterMap, periodSec); } + @InteractionCounter(interval = 5000) + public void collectRedisCallInteractionCounter(InteractionCounterBasket basket) { + + int periodSec = 30; + String interactionType = CounterConstants.INTR_REDIS_CALL; + LinkedMap redisCallMeterMap = MeterInteractionManager.getInstance().getRedisCallMeterMap(); + addInteractionsToBasket(basket, interactionType, redisCallMeterMap, periodSec); + } + private void addInteractionsToBasket(InteractionCounterBasket basket, String interactionType, LinkedMap apiIncomingMeterMap, int periodSec) { Enumeration> entries = apiIncomingMeterMap.entries(); diff --git a/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java b/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java index 7975997a0..7af5c0b04 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java +++ b/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java @@ -69,17 +69,17 @@ public static void sendServiceName(int hash, String service) { serviceName.put(hash); udpCollect.add(new TextPack(TextTypes.SERVICE, hash, service)); } - private static IntLinkedSet objName = new IntLinkedSet().setMax(10000); + private static IntLinkedSet objNameSet = new IntLinkedSet().setMax(10000); public static int sendObjName(String objName) { int hash = HashUtil.hash(objName); - sendServiceName(hash,objName); + sendObjName(hash,objName); return hash; } public static void sendObjName(int hash, String objName) { - if (serviceName.contains(hash)) { + if (objNameSet.contains(hash)) { return ; } - serviceName.put(hash); + objNameSet.put(hash); udpCollect.add(new TextPack(TextTypes.OBJECT, hash, objName)); } private static IntLinkedSet referer = new IntLinkedSet().setMax(1000); diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java index 929702edb..debd6b743 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java @@ -135,6 +135,8 @@ public TraceContext(boolean profile_summary) { public SqlStep lastSqlStep; public ApiCallStep lastApiCallStep; public int lastDbUrl; + public String lastRedisConnHost; + public int lastRedisConnPort; public Queue temporaryDumpSteps = new LinkedBlockingQueue(5); public boolean hasDumpStack; diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java index 0989c9bad..563716bd2 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java @@ -1470,6 +1470,19 @@ public static void startExceptionHandler(String className, String methodName, St private static String JEDIS_COMMAND_MSG = "[REDIS]%s: %s"; private static String JEDIS_COMMAND_ERROR_MSG = "[REDIS][ERROR]%s: %s [Exception:%s] %s"; + public static void setTraceJedisHostPort(String host, int port) { + TraceContext ctx = TraceContextManager.getContext(); + if (ctx == null) { + return; + } + if (TraceContextManager.isForceDiscarded()) { + return; + } + + ctx.lastRedisConnHost = host; + ctx.lastRedisConnPort = port; + } + public static void setRedisKey(byte[] barr, Object key) { redisKeyMap.put(barr, key.toString()); } @@ -1521,16 +1534,17 @@ public static void endSendRedisCommand(byte[] cmd, byte[][] args, Object localCo String command = new String(cmd); - step.setElapsed((int) (System.currentTimeMillis() - tctx.startTime) - step.start_time); + int elapsed = (int) (System.currentTimeMillis() - tctx.startTime) - step.start_time; + step.setElapsed(elapsed); + if (thr == null) { step.setMessage(DataProxy.sendHashedMessage(JEDIS_COMMAND_MSG), command, key); step.setLevel(ParameterizedMessageLevel.INFO); - tctx.profile.pop(step); + } else { String msg = thr.toString(); step.setMessage(DataProxy.sendHashedMessage(JEDIS_COMMAND_ERROR_MSG), command, key, thr.getClass().getName(), msg); step.setLevel(ParameterizedMessageLevel.ERROR); - tctx.profile.pop(step); if (tctx.error == 0 && conf.xlog_error_on_redis_exception_enabled) { if (conf.profile_fullstack_redis_error_enabled) { @@ -1550,9 +1564,22 @@ public static void endSendRedisCommand(byte[] cmd, byte[][] args, Object localCo tctx.error = hash; } } + + tctx.profile.pop(step); + + String redisName = "redis"; + if (StringUtil.isNotEmpty(tctx.lastRedisConnHost)) { + redisName = tctx.lastRedisConnHost + ":" + tctx.lastRedisConnPort; + } + int redisHash = DataProxy.sendObjName(redisName); + MeterInteraction meterInteraction = MeterInteractionManager.getInstance().getRedisCallMeter(conf.getObjHash(), redisHash); + if (meterInteraction != null) { + meterInteraction.add(elapsed, thr != null); + } } public static void endSendRedisCommand(Object localContext, Throwable thr) { System.out.println(localContext); } + } From bd2c3b2d953eb1756d9fc5ba6006f5cc162ea442 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Sun, 19 Aug 2018 22:03:55 +0900 Subject: [PATCH 29/53] [agent.java] add api outgoing interaction --- .../java/scouter/agent/AgentTransformer.java | 2 + .../main/java/scouter/agent/Configure.java | 3 + .../agent/asm/ApiCallResponseObjectASM.java | 104 ++++++++++++++++++ .../java/scouter/agent/asm/ApicallASM.java | 6 +- .../meter/MeterInteractionManager.java | 47 ++++++++ .../agent/counter/task/InteractionPerf.java | 45 ++++++++ .../agent/proxy/HttpClient43Factory.java | 6 + .../java/scouter/agent/proxy/IHttpClient.java | 2 + .../agent/proxy/NettyHttpClientFactory.java | 4 +- .../SpringRestTemplateHttpRequestFactory.java | 7 ++ .../scouter/agent/trace/TraceApiCall.java | 81 +++++++++++--- .../scouter/agent/trace/TraceContext.java | 1 + .../java/scouter/agent/trace/TraceMain.java | 65 +++++++---- .../java/scouter/agent/trace/TraceSQL.java | 8 +- .../agent/trace/api/ApiCallTraceHelper.java | 12 ++ .../scouter/agent/trace/api/ForDefault.java | 5 + .../agent/trace/api/ForHttpClient.java | 7 +- .../agent/trace/api/ForHttpClient40.java | 7 ++ .../agent/trace/api/ForHttpClient43.java | 41 ++++++- .../agent/trace/api/ForHttpURLConnection.java | 4 + .../scouter/agent/trace/api/ForJCOClient.java | 4 + .../agent/trace/api/ForNettyHttpRequest.java | 4 + .../scouter/agent/trace/api/ForRibbonLB.java | 4 + .../scouter/agent/trace/api/ForSAPTemp.java | 4 + .../trace/api/ForSpringAsyncRestTemplate.java | 4 + .../trace/api/ForSpringRestTemplate.java | 5 + .../agent/trace/api/ForSunHttpClient.java | 10 +- .../scouter/xtra/httpclient/HttpClient43.java | 13 ++- .../xtra/httpclient/NettyHttpClient.java | 14 ++- .../SpringRestTemplateHttpRequest.java | 13 +++ .../lang/counters/CounterConstants.java | 2 + 31 files changed, 480 insertions(+), 54 deletions(-) create mode 100644 scouter.agent.java/src/main/java/scouter/agent/asm/ApiCallResponseObjectASM.java diff --git a/scouter.agent.java/src/main/java/scouter/agent/AgentTransformer.java b/scouter.agent.java/src/main/java/scouter/agent/AgentTransformer.java index 71c61c980..ebf3c9252 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/AgentTransformer.java +++ b/scouter.agent.java/src/main/java/scouter/agent/AgentTransformer.java @@ -17,6 +17,7 @@ package scouter.agent; import scouter.agent.asm.AddFieldASM; +import scouter.agent.asm.ApiCallResponseObjectASM; import scouter.agent.asm.ApicallASM; import scouter.agent.asm.ApicallInfoASM; import scouter.agent.asm.ApicallSpringHttpAccessorASM; @@ -121,6 +122,7 @@ public static void reload() { temp.add(new MethodASM()); temp.add(new ApicallASM()); temp.add(new ApicallInfoASM()); + temp.add(new ApiCallResponseObjectASM()); temp.add(new ApicallSpringHttpAccessorASM()); temp.add(new SpringAsyncExecutionASM()); temp.add(new SpringAsyncExecutionAspectSupportDoSubmitASM()); diff --git a/scouter.agent.java/src/main/java/scouter/agent/Configure.java b/scouter.agent.java/src/main/java/scouter/agent/Configure.java index 297dffb9b..8c0a45137 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/Configure.java +++ b/scouter.agent.java/src/main/java/scouter/agent/Configure.java @@ -620,6 +620,8 @@ public final static synchronized Configure getInstance() { public String counter_object_registry_path = "/tmp/scouter"; @ConfigDesc("Activating custom jmx") public boolean counter_custom_jmx_enabled = false; + @ConfigDesc("Activating interaction counter") + public boolean counter_interaction_enabled = true; // SFA(Stack Frequency Analyzer) @ConfigDesc("Activating period threaddump function") @@ -973,6 +975,7 @@ private void apply() { this.counter_recentuser_valid_ms = getLong("counter_recentuser_valid_ms", DateUtil.MILLIS_PER_FIVE_MINUTE); this.counter_object_registry_path = getValue("counter_object_registry_path", "/tmp/scouter"); this.counter_custom_jmx_enabled = getBoolean("counter_custom_jmx_enabled", false); + this.counter_interaction_enabled = getBoolean("counter_interaction_enabled", true); this.custom_jmx_set = getStringSet("custom_jmx_set", "||"); this.sfa_dump_enabled = getBoolean("sfa_dump_enabled", false); this.sfa_dump_interval_ms = getInt("sfa_dump_interval_ms", 10000); diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/ApiCallResponseObjectASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/ApiCallResponseObjectASM.java new file mode 100644 index 000000000..847b86da5 --- /dev/null +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/ApiCallResponseObjectASM.java @@ -0,0 +1,104 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.agent.asm; + +import scouter.agent.ClassDesc; +import scouter.agent.Configure; +import scouter.agent.trace.TraceApiCall; +import scouter.org.objectweb.asm.ClassVisitor; +import scouter.org.objectweb.asm.Label; +import scouter.org.objectweb.asm.MethodVisitor; +import scouter.org.objectweb.asm.Opcodes; +import scouter.org.objectweb.asm.commons.LocalVariablesSorter; + +import java.util.HashSet; +import java.util.Set; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 3. 20. + */ +public class ApiCallResponseObjectASM implements IASM, Opcodes { + private Configure conf = Configure.getInstance(); + + private static Set hookingClasses = new HashSet(); + static { + hookingClasses.add("org/apache/http/impl/execchain/HttpResponseProxy"); + hookingClasses.add("org/apache/http/impl/client/CloseableHttpResponseProxy"); + } + public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc classDesc) { + if (conf._hook_methods_enabled == false) + return cv; + + if (hookingClasses.contains(className)) { + return new ApiCallResponseObjectCV(cv, className); + } + + return cv; + } +} + +class ApiCallResponseObjectCV extends ClassVisitor implements Opcodes { + String className; + + public ApiCallResponseObjectCV(ClassVisitor cv, String className) { + super(ASM5, cv); + this.className = className; + } + + @Override + public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); + if (mv == null) { + return null; + } + if ("".equals(name) && desc.startsWith("(Lorg/apache/http/HttpResponse;")) { + return new ApiCallResponseObjectInitMV(className, access, name, desc, mv); + } + + return mv; + } +} + +class ApiCallResponseObjectInitMV extends LocalVariablesSorter implements Opcodes { + private static final String TRACE = TraceApiCall.class.getName().replace('.', '/'); + private static final String START_METHOD = "setTraceApiCallResponseHeader"; + private static final String START_SIGNATURE = "(Ljava/lang/Object;Ljava/lang/Object;)V"; + + private String className; + private String name; + private String desc; + private int statIdx; + private Label startFinally = new Label(); + + public ApiCallResponseObjectInitMV(String className, int access, String name, String desc, MethodVisitor mv) { + super(ASM5, access, desc, mv); + this.className = className; + this.name = name; + this.desc = desc; + } + + @Override + public void visitCode() { + mv.visitVarInsn(ALOAD, 0); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACE, START_METHOD, START_SIGNATURE, false); + + mv.visitCode(); + } +} diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallASM.java index b1bfaeb7d..eba394005 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallASM.java +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallASM.java @@ -45,12 +45,14 @@ public ApicallASM() { AsmUtil.add(reserved, "sun/net/www/protocol/http/HttpURLConnection", "getInputStream()Ljava/io/InputStream;"); AsmUtil.add(reserved, "sun/net/www/protocol/http/HttpURLConnection", "connect()V"); AsmUtil.add(reserved, "org/apache/commons/httpclient/HttpClient", "executeMethod(" - + "Lorg/apache/commons/httpclient/HostConfiguration;" + "Lorg/apache/commons/httpclient/HttpMethod;" + + "Lorg/apache/commons/httpclient/HostConfiguration;" + + "Lorg/apache/commons/httpclient/HttpMethod;" + "Lorg/apache/commons/httpclient/HttpState;" + ")I"); AsmUtil.add(reserved, "org/apache/http/impl/client/InternalHttpClient", "doExecute"); AsmUtil.add(reserved, "sun/net/www/http/HttpClient", "parseHTTP"); AsmUtil.add(reserved, "org/apache/http/impl/client/AbstractHttpClient",// - "execute(Lorg/apache/http/HttpHost;" + "Lorg/apache/http/HttpRequest;" + "execute(Lorg/apache/http/HttpHost;" + + "Lorg/apache/http/HttpRequest;" + "Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"); // JCO CLIENT 추가.. AsmUtil.add(reserved, "com/sap/mw/jco/JCO$Client", "execute(Ljava/lang/String;" + // diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteractionManager.java b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteractionManager.java index 42a4a88b8..d0063032e 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteractionManager.java +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/meter/MeterInteractionManager.java @@ -27,6 +27,8 @@ import static scouter.lang.counters.CounterConstants.INTR_API_INCOMING; import static scouter.lang.counters.CounterConstants.INTR_API_OUTGOING; import static scouter.lang.counters.CounterConstants.INTR_DB_CALL; +import static scouter.lang.counters.CounterConstants.INTR_NORMAL_INCOMING; +import static scouter.lang.counters.CounterConstants.INTR_NORMAL_OUTGOING; import static scouter.lang.counters.CounterConstants.INTR_REDIS_CALL; public class MeterInteractionManager extends Thread { @@ -37,7 +39,9 @@ public class MeterInteractionManager extends Thread { private RequestQueue> queue = new RequestQueue>(1024); private static LinkedMap apiOutgoingMeterMap = new LinkedMap().setMax(1000); + private static LinkedMap normalOutgoingMeterMap = new LinkedMap().setMax(1000); private static LinkedMap apiIncomingMeterMap = new LinkedMap().setMax(1000); + private static LinkedMap normalIncomingMeterMap = new LinkedMap().setMax(100); private static LinkedMap dbCallMeterMap = new LinkedMap().setMax(1000); private static LinkedMap redisCallMeterMap = new LinkedMap().setMax(1000); @@ -63,10 +67,19 @@ public void run() { if (INTR_API_OUTGOING.equals(type)) { apiOutgoingMeterMap.put(key, meterInteraction); + + } else if (INTR_NORMAL_OUTGOING.equals(type)) { + normalOutgoingMeterMap.put(key, meterInteraction); + } else if (INTR_API_INCOMING.equals(type)) { apiIncomingMeterMap.put(key, meterInteraction); + + } else if (INTR_NORMAL_INCOMING.equals(type)) { + normalIncomingMeterMap.put(key, meterInteraction); + } else if (INTR_DB_CALL.equals(type)) { dbCallMeterMap.put(key, meterInteraction); + } else if (INTR_REDIS_CALL.equals(type)) { redisCallMeterMap.put(key, meterInteraction); } @@ -85,6 +98,19 @@ public MeterInteraction getApiOutgoingMeter(int fromHash, int toHash) { return meter; } + /** + * @return nullable + */ + public MeterInteraction getNormalOutgoingMeter(int fromHash, int toHash) { + Key key = new Key(fromHash, toHash); + MeterInteraction meter = normalOutgoingMeterMap.get(key); + if (meter == null) { + queue.put(new Pair(INTR_NORMAL_OUTGOING, key)); + } + return meter; + } + + /** * @return nullable */ @@ -97,6 +123,19 @@ public MeterInteraction getApiIncomingMeter(int fromHash, int toHash) { return meter; } + /** + * @return nullable + */ + public MeterInteraction getNormalIncomingMeter(int fromHash, int toHash) { + Key key = new Key(fromHash, toHash); + MeterInteraction meter = normalIncomingMeterMap.get(key); + if (meter == null) { + queue.put(new Pair(INTR_NORMAL_INCOMING, key)); + } + return meter; + } + + /** * @return nullable */ @@ -125,10 +164,18 @@ public LinkedMap getApiOutgoingMeterMap() { return apiOutgoingMeterMap; } + public LinkedMap getNormalOutgoingMeterMap() { + return normalOutgoingMeterMap; + } + public LinkedMap getApiIncomingMeterMap() { return apiIncomingMeterMap; } + public LinkedMap getNormalIncomingMeterMap() { + return normalIncomingMeterMap; + } + public LinkedMap getDbCallMeterMap() { return dbCallMeterMap; } diff --git a/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java b/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java index 705553598..c6527ec39 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java +++ b/scouter.agent.java/src/main/java/scouter/agent/counter/task/InteractionPerf.java @@ -35,6 +35,9 @@ public class InteractionPerf { @InteractionCounter(interval = 5000) public void collectApiIncomingInteractionCounter(InteractionCounterBasket basket) { + if (!conf.counter_interaction_enabled) { + return; + } int periodSec = 30; String interactionType = CounterConstants.INTR_API_INCOMING; @@ -42,8 +45,47 @@ public void collectApiIncomingInteractionCounter(InteractionCounterBasket basket addInteractionsToBasket(basket, interactionType, apiIncomingMeterMap, periodSec); } + @InteractionCounter(interval = 5000) + public void collectNormalIncomingInteractionCounter(InteractionCounterBasket basket) { + if (!conf.counter_interaction_enabled) { + return; + } + + int periodSec = 30; + String interactionType = CounterConstants.INTR_NORMAL_INCOMING; + LinkedMap normalIncomingMeterMap = MeterInteractionManager.getInstance().getNormalIncomingMeterMap(); + addInteractionsToBasket(basket, interactionType, normalIncomingMeterMap, periodSec); + } + + @InteractionCounter(interval = 5000) + public void collectApiOutgoingInteractionCounter(InteractionCounterBasket basket) { + if (!conf.counter_interaction_enabled) { + return; + } + + int periodSec = 30; + String interactionType = CounterConstants.INTR_API_OUTGOING; + LinkedMap apiOutgoingMeterMap = MeterInteractionManager.getInstance().getApiOutgoingMeterMap(); + addInteractionsToBasket(basket, interactionType, apiOutgoingMeterMap, periodSec); + } + + @InteractionCounter(interval = 5000) + public void collectNormalOutgoingInteractionCounter(InteractionCounterBasket basket) { + if (!conf.counter_interaction_enabled) { + return; + } + + int periodSec = 30; + String interactionType = CounterConstants.INTR_NORMAL_OUTGOING; + LinkedMap normalOutgoingMeterMap = MeterInteractionManager.getInstance().getNormalOutgoingMeterMap(); + addInteractionsToBasket(basket, interactionType, normalOutgoingMeterMap, periodSec); + } + @InteractionCounter(interval = 5000) public void collectDbCallInteractionCounter(InteractionCounterBasket basket) { + if (!conf.counter_interaction_enabled) { + return; + } int periodSec = 30; String interactionType = CounterConstants.INTR_DB_CALL; @@ -53,6 +95,9 @@ public void collectDbCallInteractionCounter(InteractionCounterBasket basket) { @InteractionCounter(interval = 5000) public void collectRedisCallInteractionCounter(InteractionCounterBasket basket) { + if (!conf.counter_interaction_enabled) { + return; + } int periodSec = 30; String interactionType = CounterConstants.INTR_REDIS_CALL; diff --git a/scouter.agent.java/src/main/java/scouter/agent/proxy/HttpClient43Factory.java b/scouter.agent.java/src/main/java/scouter/agent/proxy/HttpClient43Factory.java index ecf162d94..f8fcc8d34 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/proxy/HttpClient43Factory.java +++ b/scouter.agent.java/src/main/java/scouter/agent/proxy/HttpClient43Factory.java @@ -17,7 +17,9 @@ package scouter.agent.proxy; import scouter.agent.Logger; public class HttpClient43Factory { + private static final String HTTP_CLIENT43 = "scouter.xtra.httpclient.HttpClient43"; + public static final IHttpClient dummy = new IHttpClient() { public String getURI(Object o) { return null; @@ -28,9 +30,13 @@ public String getHost(Object o) { public String getHeader(Object o, String key) { return null; } + public String getResponseHeader(Object o, String key) { + return null; + } public void addHeader(Object o, String key, String value) { } }; + public static IHttpClient create(ClassLoader parent) { try { ClassLoader loader = LoaderManager.getHttpClient(parent); diff --git a/scouter.agent.java/src/main/java/scouter/agent/proxy/IHttpClient.java b/scouter.agent.java/src/main/java/scouter/agent/proxy/IHttpClient.java index 96fbce16d..b8f91e347 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/proxy/IHttpClient.java +++ b/scouter.agent.java/src/main/java/scouter/agent/proxy/IHttpClient.java @@ -22,4 +22,6 @@ public interface IHttpClient { void addHeader(Object o, String key, String value); String getURI(Object o); String getHeader(Object o, String key); + + String getResponseHeader(Object o, String key); } diff --git a/scouter.agent.java/src/main/java/scouter/agent/proxy/NettyHttpClientFactory.java b/scouter.agent.java/src/main/java/scouter/agent/proxy/NettyHttpClientFactory.java index bcd37f7a2..bb055211d 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/proxy/NettyHttpClientFactory.java +++ b/scouter.agent.java/src/main/java/scouter/agent/proxy/NettyHttpClientFactory.java @@ -16,7 +16,6 @@ */ package scouter.agent.proxy; import scouter.agent.Logger; -import scouter.agent.trace.TraceContext; public class NettyHttpClientFactory { private static final String CLIENT = "scouter.xtra.httpclient.NettyHttpClient"; public static final IHttpClient dummy = new IHttpClient() { @@ -29,6 +28,9 @@ public String getHost(Object o) { public String getHeader(Object o, String key) { return null; } + public String getResponseHeader(Object o, String key) { + return null; + } public void addHeader(Object o, String key, String value) { } }; diff --git a/scouter.agent.java/src/main/java/scouter/agent/proxy/SpringRestTemplateHttpRequestFactory.java b/scouter.agent.java/src/main/java/scouter/agent/proxy/SpringRestTemplateHttpRequestFactory.java index c714a0ca9..e4f79ad62 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/proxy/SpringRestTemplateHttpRequestFactory.java +++ b/scouter.agent.java/src/main/java/scouter/agent/proxy/SpringRestTemplateHttpRequestFactory.java @@ -18,7 +18,9 @@ import scouter.agent.Logger; public class SpringRestTemplateHttpRequestFactory { + private static final String CLIENT = "scouter.xtra.httpclient.SpringRestTemplateHttpRequest"; + public static final IHttpClient dummy = new IHttpClient() { public String getURI(Object o) { return null; @@ -29,9 +31,13 @@ public String getHost(Object o) { public String getHeader(Object o, String key) { return null; } + public String getResponseHeader(Object o, String key) { + return null; + } public void addHeader(Object o, String key, String value) { } }; + public static IHttpClient create(ClassLoader parent) { try { ClassLoader loader = LoaderManager.getHttpClient(parent); @@ -40,6 +46,7 @@ public static IHttpClient create(ClassLoader parent) { } Class c = Class.forName(CLIENT, true, loader); return (IHttpClient) c.newInstance(); + } catch (Throwable e) { e.printStackTrace(); Logger.println("A140", "fail to create", e); diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java index 79f9213f0..27794d1d8 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java @@ -19,6 +19,8 @@ import scouter.agent.Configure; import scouter.agent.Logger; import scouter.agent.counter.meter.MeterAPI; +import scouter.agent.counter.meter.MeterInteraction; +import scouter.agent.counter.meter.MeterInteractionManager; import scouter.agent.netio.data.DataProxy; import scouter.agent.plugin.PluginHttpCallTrace; import scouter.agent.plugin.PluginHttpServiceTrace; @@ -39,6 +41,7 @@ import java.util.*; public class TraceApiCall { + private static Configure conf = Configure.getInstance(); private static Object lock = new Object(); private static IntKeyLinkedMap restTemplateHttpRequests = new IntKeyLinkedMap().setMax(5); @@ -114,15 +117,15 @@ public static Object startApicall(String name, long apiTxid) { ctx.apicall_name = name; return new LocalContext(ctx, step); } + public static void endApicall(Object stat, Object returnValue, Throwable thr) { if (stat == null) return; try { LocalContext lctx = (LocalContext) stat; - TraceContext tctx = (TraceContext) lctx.context; + TraceContext tctx = lctx.context; ApiCallStep step = (ApiCallStep) lctx.stepSingle; - // System.out.println("apicall end: " +tctx.apicall_name + - // " target="+tctx.apicall_target); + if (step.address == null) { step.address = tctx.apicall_target; } @@ -137,6 +140,7 @@ public static void endApicall(Object stat, Object returnValue, Throwable thr) { } tctx.apicall_count++; tctx.apicall_time += step.elapsed; + if (thr != null) { String msg = thr.getMessage(); if(msg == null){ @@ -162,10 +166,36 @@ public static void endApicall(Object stat, Object returnValue, Throwable thr) { tctx.offerErrorEntity(ErrorEntity.of(thr, step.error, 0, step.hash)); } + Object hookArgs = lctx.option; + if (hookArgs instanceof HookArgs) { + ApiCallTraceHelper.end(tctx, returnValue, (HookArgs) hookArgs); + } + if(step instanceof ApiCallStep2 && ((ApiCallStep2) step).async == 1) { //skip api metering } else { MeterAPI.getInstance().add(step.elapsed, step.error != 0); + if (conf.counter_interaction_enabled) { + int toHash = tctx.lastCalleeObjHash; + tctx.lastCalleeObjHash = 0; + if (toHash == 0) { + if (StringUtil.isEmpty(step.address)) { + step.address = "unknown"; + } + toHash = DataProxy.sendObjName(step.address); + MeterInteraction meterInteraction = MeterInteractionManager.getInstance() + .getNormalOutgoingMeter(conf.getObjHash(), toHash); + if (meterInteraction != null) { + meterInteraction.add(step.elapsed, step.error != 0); + } + } else { + MeterInteraction meterInteraction = MeterInteractionManager.getInstance() + .getApiOutgoingMeter(conf.getObjHash(), toHash); + if (meterInteraction != null) { + meterInteraction.add(step.elapsed, step.error != 0); + } + } + } } ServiceSummary.getInstance().process(step); @@ -254,11 +284,18 @@ public String getHost(Object o) { public String getHeader(Object o, String key) { return null; } + public String getResponseHeader(Object o, String key) { + return null; + } public void addHeader(Object o, String key, String value) { } }; public static void endCreateSpringRestTemplateRequest(Object _this, Object oRtn) { + if (!conf.trace_interservice_enabled) { + return; + } + TraceContext ctx = TraceContextManager.getContext(); if(ctx == null) return; if(ctx.lastApiCallStep == null) return; @@ -285,26 +322,36 @@ public static void endCreateSpringRestTemplateRequest(Object _this, Object oRtn) } } - if (conf.trace_interservice_enabled) { - try { - if (ctx.gxid == 0) { - ctx.gxid = ctx.txid; - } - ctx.lastApiCallStep.txid = KeyGen.next(); + try { + if (ctx.gxid == 0) { + ctx.gxid = ctx.txid; + } + ctx.lastApiCallStep.txid = KeyGen.next(); - httpclient.addHeader(oRtn, conf._trace_interservice_gxid_header_key, Hexa32.toString32(ctx.gxid)); - httpclient.addHeader(oRtn, conf._trace_interservice_caller_header_key, Hexa32.toString32(ctx.txid)); - httpclient.addHeader(oRtn, conf._trace_interservice_callee_header_key, Hexa32.toString32(ctx.lastApiCallStep.txid)); - httpclient.addHeader(oRtn, conf._trace_interservice_caller_obj_header_key, String.valueOf(conf.getObjHash())); - - PluginHttpCallTrace.call(ctx, httpclient, oRtn); + httpclient.addHeader(oRtn, conf._trace_interservice_gxid_header_key, Hexa32.toString32(ctx.gxid)); + httpclient.addHeader(oRtn, conf._trace_interservice_caller_header_key, Hexa32.toString32(ctx.txid)); + httpclient.addHeader(oRtn, conf._trace_interservice_callee_header_key, Hexa32.toString32(ctx.lastApiCallStep.txid)); + httpclient.addHeader(oRtn, conf._trace_interservice_caller_obj_header_key, String.valueOf(conf.getObjHash())); - } catch (Exception e) { + PluginHttpCallTrace.call(ctx, httpclient, oRtn); + + } catch (Exception e) { - } } } + public static void setTraceApiCallResponseHeader(Object _this, Object res) { + if (!conf.trace_interservice_enabled) { + return; + } + + TraceContext ctx = TraceContextManager.getContext(); + if(ctx == null) return; + + ApiCallTraceHelper.setCalleeToCtxInHttpClientResponse(ctx, _this, res); + } + + public static Set getAllExtendedOrImplementedTypesRecursively(Class clazz) { List res = new ArrayList(); diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java index debd6b743..dc9961949 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java @@ -134,6 +134,7 @@ public TraceContext(boolean profile_summary) { public SqlStep lastSqlStep; public ApiCallStep lastApiCallStep; + public int lastCalleeObjHash; public int lastDbUrl; public String lastRedisConnHost; public int lastRedisConnPort; diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java index 563716bd2..d5374afe3 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java @@ -510,13 +510,7 @@ public static void endHttpServiceFinal(TraceContext ctx, Object request, Object delayedServiceManager.checkDelayedService(pack, ctx.serviceName); metering(pack); - if (ctx.callerObjHash != 0) { - MeterInteraction meterInteraction = MeterInteractionManager.getInstance() - .getApiIncomingMeter(ctx.callerObjHash, conf.getObjHash()); - if (meterInteraction != null) { - meterInteraction.add(pack.elapsed, pack.error > 0); - } - } + meteringInteraction(ctx, pack); if (discardMode != XLogDiscard.DISCARD_ALL) { DataProxy.sendXLog(pack); @@ -731,6 +725,7 @@ public static void endService(Object stat, Object returnValue, Throwable thr) { delayedServiceManager.checkDelayedService(pack, ctx.serviceName); metering(pack); + meteringInteraction(ctx, pack); if (discardMode != XLogDiscard.DISCARD_ALL) { DataProxy.sendXLog(pack); @@ -740,6 +735,40 @@ public static void endService(Object stat, Object returnValue, Throwable thr) { } } + + private static void meteringInteraction(TraceContext ctx, XLogPack pack) { + switch (pack.xType) { + case XLogTypes.WEB_SERVICE: + case XLogTypes.APP_SERVICE: + meteringInteraction0(ctx, pack); + break; + case XLogTypes.BACK_THREAD: + case XLogTypes.ASYNCSERVLET_DISPATCHED_SERVICE: + case XLogTypes.BACK_THREAD2: + break; + default: + break; + } + } + + private static void meteringInteraction0(TraceContext ctx, XLogPack pack) { + if (conf.counter_interaction_enabled) { + if (ctx.callerObjHash != 0) { + MeterInteraction meterInteraction = MeterInteractionManager.getInstance() + .getApiIncomingMeter(ctx.callerObjHash, conf.getObjHash()); + if (meterInteraction != null) { + meterInteraction.add(pack.elapsed, pack.error > 0); + } + } else { + MeterInteraction meterInteraction = MeterInteractionManager.getInstance() + .getNormalIncomingMeter(0, conf.getObjHash()); + if (meterInteraction != null) { + meterInteraction.add(pack.elapsed, pack.error > 0); + } + } + } + } + private static int errorCheck(TraceContext ctx, Throwable thr) { int error = 0; if (ctx.error != 0) { @@ -1567,19 +1596,17 @@ public static void endSendRedisCommand(byte[] cmd, byte[][] args, Object localCo tctx.profile.pop(step); - String redisName = "redis"; - if (StringUtil.isNotEmpty(tctx.lastRedisConnHost)) { - redisName = tctx.lastRedisConnHost + ":" + tctx.lastRedisConnPort; - } - int redisHash = DataProxy.sendObjName(redisName); - MeterInteraction meterInteraction = MeterInteractionManager.getInstance().getRedisCallMeter(conf.getObjHash(), redisHash); - if (meterInteraction != null) { - meterInteraction.add(elapsed, thr != null); + if (conf.counter_interaction_enabled) { + String redisName = "redis"; + if (StringUtil.isNotEmpty(tctx.lastRedisConnHost)) { + redisName = tctx.lastRedisConnHost + ":" + tctx.lastRedisConnPort; + } + int redisHash = DataProxy.sendObjName(redisName); + MeterInteraction meterInteraction = MeterInteractionManager.getInstance().getRedisCallMeter(conf.getObjHash(), redisHash); + if (meterInteraction != null) { + meterInteraction.add(elapsed, thr != null); + } } } - public static void endSendRedisCommand(Object localContext, Throwable thr) { - System.out.println(localContext); - } - } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceSQL.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceSQL.java index 3cc9b4b71..5b9fa17a3 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceSQL.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceSQL.java @@ -267,9 +267,11 @@ public static void end(Object stat, Throwable thr, int updatedCount) { tCtx.sqlTime += step.elapsed; ServiceSummary.getInstance().process(step); MeterSQL.getInstance().add(step.elapsed, step.error != 0); - MeterInteraction meter = MeterInteractionManager.getInstance().getDbCallMeter(conf.getObjHash(), tCtx.lastDbUrl); - if (meter != null) { - meter.add(step.elapsed, step.error != 0); + if (conf.counter_interaction_enabled) { + MeterInteraction meter = MeterInteractionManager.getInstance().getDbCallMeter(conf.getObjHash(), tCtx.lastDbUrl); + if (meter != null) { + meter.add(step.elapsed, step.error != 0); + } } tCtx.profile.pop(step); } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ApiCallTraceHelper.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ApiCallTraceHelper.java index 52661140b..8e0700e6e 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ApiCallTraceHelper.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ApiCallTraceHelper.java @@ -27,9 +27,11 @@ public class ApiCallTraceHelper { static interface IHelper { public ApiCallStep process(TraceContext ctx, HookArgs hookPoint); + public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint); } static Map handlers = new HashMap(); + static ForHttpClient43 forHttpClient43 = new ForHttpClient43(); static void put(String name, IHelper o) { name = name.replace('.', '/'); @@ -62,4 +64,14 @@ public static ApiCallStep start(TraceContext ctx, HookArgs hookPoint) { return plug.process(ctx, hookPoint); } + public static void end(TraceContext ctx, Object rtn, HookArgs hookPoint) { + IHelper plug = handlers.get(hookPoint.class1); + if (plug == null) + defaultObj.processEnd(ctx, rtn, hookPoint); + plug.processEnd(ctx, rtn, hookPoint); + } + + public static void setCalleeToCtxInHttpClientResponse(TraceContext ctx, Object _this, Object response) { + forHttpClient43.processSetCalleeToCtx(ctx, _this, response); + } } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForDefault.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForDefault.java index 44cb962a5..f9cb9e7ae 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForDefault.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForDefault.java @@ -27,4 +27,9 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { ctx.apicall_name = hookPoint.class1; return step; } + + public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + return; + } + } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient.java index 8de66f94c..ba9679ad7 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient.java @@ -16,12 +16,12 @@ */ package scouter.agent.trace.api; -import java.lang.reflect.Method; - import scouter.agent.trace.HookArgs; import scouter.agent.trace.TraceContext; import scouter.lang.step.ApiCallStep; +import java.lang.reflect.Method; + public class ForHttpClient implements ApiCallTraceHelper.IHelper{ private boolean ok = true; @@ -45,4 +45,7 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } + public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + return; + } } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient40.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient40.java index 900d9a150..43f4a8b5c 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient40.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient40.java @@ -29,6 +29,7 @@ public class ForHttpClient40 implements ApiCallTraceHelper.IHelper { private boolean ok = true; private static IntKeyLinkedMap httpclients = new IntKeyLinkedMap().setMax(5); + public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { ApiCallStep step = new ApiCallStep(); try { @@ -53,6 +54,11 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { ctx.apicall_name = hookPoint.class1; return step; } + + public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + return; + } + private IHttpClient getProxy(HookArgs hookPoint) { int key = System.identityHashCode(hookPoint.this1.getClass()); IHttpClient httpclient = httpclients.get(key); @@ -64,6 +70,7 @@ private IHttpClient getProxy(HookArgs hookPoint) { } return httpclient; } + private void transfer(IHttpClient httpclient, TraceContext ctx, Object host, Object req, long calleeTxid) { Configure conf = Configure.getInstance(); if (conf.trace_interservice_enabled) { diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient43.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient43.java index 8bca1f7b2..0b7391131 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient43.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient43.java @@ -15,6 +15,7 @@ * limitations under the License. */ package scouter.agent.trace.api; + import scouter.agent.Configure; import scouter.agent.Logger; import scouter.agent.plugin.PluginHttpCallTrace; @@ -27,13 +28,16 @@ import scouter.util.IntKeyLinkedMap; import scouter.util.KeyGen; public class ForHttpClient43 implements ApiCallTraceHelper.IHelper { + private static IntKeyLinkedMap httpclients = new IntKeyLinkedMap().setMax(5); + private static Configure conf = Configure.getInstance(); + public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { ApiCallStep step = new ApiCallStep(); if (ok) { try { if (hookPoint.args != null && hookPoint.args.length >= 2) { - IHttpClient httpclient = getProxy(hookPoint); + IHttpClient httpclient = getProxy(hookPoint.this1); step.txid = KeyGen.next(); transfer(httpclient, ctx, hookPoint.args[0], hookPoint.args[1], step.txid); String host = httpclient.getHost(hookPoint.args[0]); @@ -51,18 +55,47 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { ctx.apicall_name = hookPoint.class1; return step; } - private IHttpClient getProxy(HookArgs hookPoint) { - int key = System.identityHashCode(hookPoint.this1.getClass()); + + public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + IHttpClient httpclient = getProxy(hookPoint.this1); + String calleeObjHashStr = httpclient.getResponseHeader(rtn, conf._trace_interservice_callee_obj_header_key); + if (calleeObjHashStr != null) { + try { + ctx.lastCalleeObjHash = Integer.parseInt(calleeObjHashStr); + } catch (NumberFormatException e) { + } + } else { + ctx.lastCalleeObjHash = 0; + } + } + + public void processSetCalleeToCtx(TraceContext ctx, Object _this, Object response) { + IHttpClient httpclient = getProxy(_this); + String calleeObjHashStr = httpclient.getResponseHeader(response, conf._trace_interservice_callee_obj_header_key); + if (calleeObjHashStr != null) { + try { + ctx.lastCalleeObjHash = Integer.parseInt(calleeObjHashStr); + } catch (NumberFormatException e) { + } + } else { + ctx.lastCalleeObjHash = 0; + } + } + + private IHttpClient getProxy(Object _this) { + int key = System.identityHashCode(_this.getClass()); IHttpClient httpclient = httpclients.get(key); if (httpclient == null) { synchronized (this) { - httpclient = HttpClient43Factory.create(hookPoint.this1.getClass().getClassLoader()); + httpclient = HttpClient43Factory.create(_this.getClass().getClassLoader()); httpclients.put(key, httpclient); } } return httpclient; } + private boolean ok = true; + private void transfer(IHttpClient httpclient, TraceContext ctx, Object host, Object req, long calleeTxid) { Configure conf = Configure.getInstance(); if (conf.trace_interservice_enabled) { diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpURLConnection.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpURLConnection.java index 3b1d15bb4..bb0e1b987 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpURLConnection.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpURLConnection.java @@ -84,6 +84,10 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } + public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + return; + } + private void transfer(TraceContext ctx, HttpURLConnection urlCon, long calleeTxid) { Configure conf = Configure.getInstance(); diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForJCOClient.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForJCOClient.java index 867381b86..9895eb015 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForJCOClient.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForJCOClient.java @@ -34,4 +34,8 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } + public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + return; + } + } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForNettyHttpRequest.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForNettyHttpRequest.java index b4b45619d..12028f730 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForNettyHttpRequest.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForNettyHttpRequest.java @@ -58,6 +58,10 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } + public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + return; + } + private IHttpClient getProxy(HookArgs hookPoint) { int key = System.identityHashCode(hookPoint.this1.getClass()); IHttpClient httpclient = httpclients.get(key); diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForRibbonLB.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForRibbonLB.java index 379bcfd21..1899639e3 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForRibbonLB.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForRibbonLB.java @@ -59,6 +59,10 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } + public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + return; + } + private IHttpClient getProxy(HookArgs hookPoint) { int key = System.identityHashCode(hookPoint.this1.getClass()); IHttpClient httpclient = httpclients.get(key); diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSAPTemp.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSAPTemp.java index ae7fa8ed0..3221b51b8 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSAPTemp.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSAPTemp.java @@ -33,6 +33,10 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } + public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + return; + } + public void apiEnd(TraceContext ctx, HookArgs hookPoint, Object returnValue, Throwable thr) { } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringAsyncRestTemplate.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringAsyncRestTemplate.java index 002860801..b2c828c4f 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringAsyncRestTemplate.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringAsyncRestTemplate.java @@ -57,4 +57,8 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { ctx.lastApiCallStep = step; return step; } + + public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + return; + } } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringRestTemplate.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringRestTemplate.java index 2dcb13677..1ada12223 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringRestTemplate.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringRestTemplate.java @@ -57,4 +57,9 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } + + public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + + return; + } } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSunHttpClient.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSunHttpClient.java index 9a08bda7e..514b74c17 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSunHttpClient.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSunHttpClient.java @@ -16,13 +16,13 @@ */ package scouter.agent.trace.api; -import java.lang.reflect.Field; -import java.net.URL; - import scouter.agent.trace.HookArgs; import scouter.agent.trace.TraceContext; import scouter.lang.step.ApiCallStep; +import java.lang.reflect.Field; +import java.net.URL; + public class ForSunHttpClient implements ApiCallTraceHelper.IHelper { static Class sunHttpClass = null; static Field url = null; @@ -61,4 +61,8 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } + public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + return; + } + } diff --git a/scouter.agent.java/src/main/java/scouter/xtra/httpclient/HttpClient43.java b/scouter.agent.java/src/main/java/scouter/xtra/httpclient/HttpClient43.java index fbbb83e85..cec8c9389 100644 --- a/scouter.agent.java/src/main/java/scouter/xtra/httpclient/HttpClient43.java +++ b/scouter.agent.java/src/main/java/scouter/xtra/httpclient/HttpClient43.java @@ -19,10 +19,10 @@ import org.apache.http.Header; import org.apache.http.HttpHost; import org.apache.http.HttpRequest; +import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPut; import org.apache.http.client.methods.HttpUriRequest; - import scouter.agent.proxy.IHttpClient; public class HttpClient43 implements IHttpClient { @@ -53,6 +53,17 @@ public String getHeader(Object o, String key) { return null; } + public String getResponseHeader(Object o, String key) { + if (o instanceof HttpResponse) { + HttpResponse res = (HttpResponse) o; + Header h = res.getFirstHeader(key); + if (h != null) { + return h.getValue(); + } + } + return null; + } + public String getURI(Object o) { if (o instanceof HttpUriRequest) { HttpUriRequest req = (HttpUriRequest) o; diff --git a/scouter.agent.java/src/main/java/scouter/xtra/httpclient/NettyHttpClient.java b/scouter.agent.java/src/main/java/scouter/xtra/httpclient/NettyHttpClient.java index 2ca6f2edb..e3aca31f8 100644 --- a/scouter.agent.java/src/main/java/scouter/xtra/httpclient/NettyHttpClient.java +++ b/scouter.agent.java/src/main/java/scouter/xtra/httpclient/NettyHttpClient.java @@ -1,10 +1,10 @@ package scouter.xtra.httpclient; +import com.netflix.loadbalancer.Server; import io.reactivex.netty.protocol.http.client.HttpClientRequest; +import io.reactivex.netty.protocol.http.client.HttpClientResponse; import scouter.agent.proxy.IHttpClient; -import com.netflix.loadbalancer.Server; - public class NettyHttpClient implements IHttpClient { public String getHost(Object o) { if (o instanceof Server) { @@ -32,6 +32,16 @@ public java.lang.String getHeader(Object o, java.lang.String key) { return null; } + public String getResponseHeader(Object o, String key) { + if (o instanceof HttpClientResponse) { + HttpClientResponse res = (HttpClientResponse) o; + String headerValue = res.getHeaders().get(key); + return headerValue; + } + return null; + } + + public String getURI(Object o) { if (o instanceof HttpClientRequest) { HttpClientRequest req = (HttpClientRequest) o; diff --git a/scouter.agent.java/src/main/java/scouter/xtra/httpclient/SpringRestTemplateHttpRequest.java b/scouter.agent.java/src/main/java/scouter/xtra/httpclient/SpringRestTemplateHttpRequest.java index 31fff9f6f..41b1a6d06 100644 --- a/scouter.agent.java/src/main/java/scouter/xtra/httpclient/SpringRestTemplateHttpRequest.java +++ b/scouter.agent.java/src/main/java/scouter/xtra/httpclient/SpringRestTemplateHttpRequest.java @@ -1,5 +1,7 @@ package scouter.xtra.httpclient; +import org.apache.http.Header; +import org.apache.http.HttpResponse; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpRequest; import scouter.agent.proxy.IHttpClient; @@ -35,6 +37,17 @@ public String getHeader(Object o, String key) { return null; } + public String getResponseHeader(Object o, String key) { + if (o instanceof HttpResponse) { + HttpResponse res = (HttpResponse) o; + Header h = res.getFirstHeader(key); + if (h != null) { + return h.getValue(); + } + } + return null; + } + public String getURI(Object o) { if (o instanceof HttpRequest) { HttpRequest chr = (HttpRequest) o; diff --git a/scouter.common/src/main/java/scouter/lang/counters/CounterConstants.java b/scouter.common/src/main/java/scouter/lang/counters/CounterConstants.java index 423689237..fa8f4c9fd 100644 --- a/scouter.common/src/main/java/scouter/lang/counters/CounterConstants.java +++ b/scouter.common/src/main/java/scouter/lang/counters/CounterConstants.java @@ -160,7 +160,9 @@ public class CounterConstants { // interaction counters public static final String INTR_API_OUTGOING = "INTR_API_OUTGOING"; + public static final String INTR_NORMAL_OUTGOING = "INTR_NORMAL_OUTGOING"; public static final String INTR_API_INCOMING = "INTR_API_INCOMING"; + public static final String INTR_NORMAL_INCOMING = "INTR_NORMAL_INCOMING"; public static final String INTR_DB_CALL = "INTR_DB_CALL"; public static final String INTR_REDIS_CALL = "INTR_REDIS_CALL"; } From fbbbe4efe302ec306c597926f90b076a5df08f25 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Wed, 22 Aug 2018 22:35:45 +0900 Subject: [PATCH 30/53] [agent.java] async rest template response time metering & included in topology outgoing api interaction data. --- .../java/scouter/agent/AgentTransformer.java | 3 + .../main/java/scouter/agent/Configure.java | 3 + .../agent/asm/ApiCallResponseObjectASM.java | 4 +- .../java/scouter/agent/asm/ApicallASM.java | 2 +- .../scouter/agent/asm/ApicallInfoASM.java | 2 +- .../asm/ApicallSpringHandleResponseASM.java | 103 ++++++++++++++++++ .../asm/ApicallSpringHttpAccessorASM.java | 2 +- .../agent/trace/ApiCallTransferMap.java | 51 +++++++++ .../scouter/agent/trace/TraceApiCall.java | 60 +++++++++- .../scouter/agent/trace/TraceContext.java | 1 + .../agent/trace/api/ApiCallTraceHelper.java | 13 ++- .../scouter/agent/trace/api/ForDefault.java | 2 +- .../agent/trace/api/ForHttpClient.java | 2 +- .../agent/trace/api/ForHttpClient40.java | 2 +- .../agent/trace/api/ForHttpClient43.java | 2 +- .../agent/trace/api/ForHttpURLConnection.java | 2 +- .../scouter/agent/trace/api/ForJCOClient.java | 2 +- .../agent/trace/api/ForNettyHttpRequest.java | 2 +- .../scouter/agent/trace/api/ForRibbonLB.java | 2 +- .../scouter/agent/trace/api/ForSAPTemp.java | 2 +- .../trace/api/ForSpringAsyncRestTemplate.java | 35 +++++- .../trace/api/ForSpringRestTemplate.java | 2 +- .../agent/trace/api/ForSunHttpClient.java | 2 +- .../SpringRestTemplateHttpRequest.java | 12 +- .../java/scouter/lang/step/ApiCallStep2.java | 1 + 25 files changed, 280 insertions(+), 34 deletions(-) create mode 100644 scouter.agent.java/src/main/java/scouter/agent/asm/ApicallSpringHandleResponseASM.java create mode 100644 scouter.agent.java/src/main/java/scouter/agent/trace/ApiCallTransferMap.java diff --git a/scouter.agent.java/src/main/java/scouter/agent/AgentTransformer.java b/scouter.agent.java/src/main/java/scouter/agent/AgentTransformer.java index ebf3c9252..ea48c7377 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/AgentTransformer.java +++ b/scouter.agent.java/src/main/java/scouter/agent/AgentTransformer.java @@ -20,6 +20,7 @@ import scouter.agent.asm.ApiCallResponseObjectASM; import scouter.agent.asm.ApicallASM; import scouter.agent.asm.ApicallInfoASM; +import scouter.agent.asm.ApicallSpringHandleResponseASM; import scouter.agent.asm.ApicallSpringHttpAccessorASM; import scouter.agent.asm.CapArgsASM; import scouter.agent.asm.CapReturnASM; @@ -123,7 +124,9 @@ public static void reload() { temp.add(new ApicallASM()); temp.add(new ApicallInfoASM()); temp.add(new ApiCallResponseObjectASM()); + temp.add(new ApicallSpringHandleResponseASM()); temp.add(new ApicallSpringHttpAccessorASM()); + temp.add(new SpringAsyncExecutionASM()); temp.add(new SpringAsyncExecutionAspectSupportDoSubmitASM()); temp.add(new CallRunnableASM()); diff --git a/scouter.agent.java/src/main/java/scouter/agent/Configure.java b/scouter.agent.java/src/main/java/scouter/agent/Configure.java index 8c0a45137..b03de7984 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/Configure.java +++ b/scouter.agent.java/src/main/java/scouter/agent/Configure.java @@ -577,6 +577,8 @@ public final static synchronized Configure getInstance() { @ConfigDesc("") public boolean _hook_methods_enabled = true; @ConfigDesc("") + public boolean _hook_apicall_enabled = true; + @ConfigDesc("") public boolean _hook_socket_enabled = true; @ConfigDesc("") public boolean _hook_jsp_enabled = true; @@ -958,6 +960,7 @@ private void apply() { this._hook_dbconn_enabled = getBoolean("_hook_dbconn_enabled", true); this._hook_cap_enabled = getBoolean("_hook_cap_enabled", true); this._hook_methods_enabled = getBoolean("_hook_methods_enabled", true); + this._hook_apicall_enabled = getBoolean("_hook_apicall_enabled", true); this._hook_socket_enabled = getBoolean("_hook_socket_enabled", true); this._hook_jsp_enabled = getBoolean("_hook_jsp_enabled", true); this._hook_async_enabled = getBoolean("_hook_async_enabled", true); diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/ApiCallResponseObjectASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/ApiCallResponseObjectASM.java index 847b86da5..160e09029 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/asm/ApiCallResponseObjectASM.java +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/ApiCallResponseObjectASM.java @@ -42,7 +42,7 @@ public class ApiCallResponseObjectASM implements IASM, Opcodes { hookingClasses.add("org/apache/http/impl/client/CloseableHttpResponseProxy"); } public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc classDesc) { - if (conf._hook_methods_enabled == false) + if (conf._hook_apicall_enabled == false) return cv; if (hookingClasses.contains(className)) { @@ -77,7 +77,7 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si class ApiCallResponseObjectInitMV extends LocalVariablesSorter implements Opcodes { private static final String TRACE = TraceApiCall.class.getName().replace('.', '/'); - private static final String START_METHOD = "setTraceApiCallResponseHeader"; + private static final String START_METHOD = "setCalleeToCtxInHttpClientResponse"; private static final String START_SIGNATURE = "(Ljava/lang/Object;Ljava/lang/Object;)V"; private String className; diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallASM.java index eba394005..4f71a7660 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallASM.java +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallASM.java @@ -84,7 +84,7 @@ public ApicallASM() { } public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc classDesc) { - if (Configure.getInstance()._hook_methods_enabled == false) { + if (Configure.getInstance()._hook_apicall_enabled == false) { return cv; } HookingSet mset = reserved.get(className); diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallInfoASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallInfoASM.java index 065979344..7fc4f2eec 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallInfoASM.java +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallInfoASM.java @@ -40,7 +40,7 @@ public ApicallInfoASM() { // "io/reactivex/netty/protocol/http/client/HttpClientResponse", "*"); } public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc classDesc) { - if (Configure.getInstance()._hook_methods_enabled == false) { + if (Configure.getInstance()._hook_apicall_enabled == false) { return cv; } HookingSet mset = reserved.get(className); diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallSpringHandleResponseASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallSpringHandleResponseASM.java new file mode 100644 index 000000000..84b82603a --- /dev/null +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallSpringHandleResponseASM.java @@ -0,0 +1,103 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package scouter.agent.asm; + +import scouter.agent.ClassDesc; +import scouter.agent.Configure; +import scouter.agent.asm.util.AsmUtil; +import scouter.agent.asm.util.HookingSet; +import scouter.agent.trace.TraceApiCall; +import scouter.org.objectweb.asm.ClassVisitor; +import scouter.org.objectweb.asm.MethodVisitor; +import scouter.org.objectweb.asm.Opcodes; +import scouter.org.objectweb.asm.Type; +import scouter.org.objectweb.asm.commons.LocalVariablesSorter; + +import java.util.HashMap; +import java.util.Map; + +public class ApicallSpringHandleResponseASM implements IASM, Opcodes { + + private Map reserved = new HashMap(); + + public ApicallSpringHandleResponseASM() { + AsmUtil.add(reserved, "org/springframework/web/client/RestTemplate", "handleResponse(Ljava/net/URI;Lorg/springframework/http/HttpMethod;Lorg/springframework/http/client/ClientHttpResponse;)V"); + AsmUtil.add(reserved, "org/springframework/web/client/AsyncRestTemplate", "handleResponseError(Lorg/springframework/http/HttpMethod;Ljava/net/URI;Lorg/springframework/http/client/ClientHttpResponse;)V"); + AsmUtil.add(reserved, "org/springframework/web/client/AsyncRestTemplate$ResponseExtractorFuture", "convertResponse(Lorg/springframework/http/client/ClientHttpResponse;)Ljava/lang/Object;"); + } + + @Override + public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc classDesc) { + if (Configure.getInstance()._hook_apicall_enabled == false) { + return cv; + } + + HookingSet mset = reserved.get(className); + if (mset != null) + return new RestTemplateResponseHandlerCV(cv, mset, className); + return cv; + } +} + +class RestTemplateResponseHandlerCV extends ClassVisitor implements Opcodes { + public String className; + private HookingSet mset; + public RestTemplateResponseHandlerCV(ClassVisitor cv, HookingSet mset, String className) { + super(ASM5, cv); + this.mset = mset; + this.className = className; + } + @Override + public MethodVisitor visitMethod(int access, String methodName, String desc, String signature, String[] exceptions) { + MethodVisitor mv = super.visitMethod(access, methodName, desc, signature, exceptions); + if (mv == null || mset.isA(methodName, desc) == false) { + return mv; + + } + if (AsmUtil.isSpecial(methodName)) { + return mv; + } + return new RestTemplateResponseHandlerMV(access, methodName, desc, mv); + } +} + +class RestTemplateResponseHandlerMV extends LocalVariablesSorter implements Opcodes { + private static final String TARGET = TraceApiCall.class.getName().replace('.', '/'); + private static final String START_METHOD = "setCalleeToCtxInSpringClientHttpResponse"; + private static final String START_SIGNATURE = "(Ljava/lang/Object;Ljava/lang/Object;)V"; + + String name; + String desc; + int respIdx; + + public RestTemplateResponseHandlerMV(int access, String name, String desc, MethodVisitor mv) { + super(ASM5, access, desc, mv); + this.name = name; + this.desc = desc; + this.respIdx = AsmUtil.getIdxByType(access, desc, Type.getType("Lorg/springframework/http/client/ClientHttpResponse;")); + } + + @Override + public void visitCode() { + mv.visitVarInsn(ALOAD, 0); + mv.visitVarInsn(ALOAD, respIdx); + mv.visitMethodInsn(Opcodes.INVOKESTATIC, TARGET, START_METHOD, START_SIGNATURE, false); + + mv.visitCode(); + } +} diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallSpringHttpAccessorASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallSpringHttpAccessorASM.java index d45b50657..0ac75301a 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallSpringHttpAccessorASM.java +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/ApicallSpringHttpAccessorASM.java @@ -39,7 +39,7 @@ public ApicallSpringHttpAccessorASM() { @Override public ClassVisitor transform(ClassVisitor cv, String className, ClassDesc classDesc) { - if (Configure.getInstance()._hook_methods_enabled == false) { + if (Configure.getInstance()._hook_apicall_enabled == false) { return cv; } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/ApiCallTransferMap.java b/scouter.agent.java/src/main/java/scouter/agent/trace/ApiCallTransferMap.java new file mode 100644 index 000000000..dc4fb958a --- /dev/null +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/ApiCallTransferMap.java @@ -0,0 +1,51 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.agent.trace; + +import scouter.lang.step.ApiCallStep2; +import scouter.util.IntKeyLinkedMap; + +public class ApiCallTransferMap { + + public static class ID { + public TraceContext ctx; + public ApiCallStep2 step; + + public ID(TraceContext ctx, ApiCallStep2 step) { + this.ctx = ctx; + this.step = step; + } + } + + private static IntKeyLinkedMap map = new IntKeyLinkedMap().setMax(2001); + + public static void put(int hash, TraceContext ctx, ApiCallStep2 step) { + map.put(hash, new ID(ctx,step)); + } + + public static void remove(int hash) { + map.remove(hash); + } + + public static ID get(int hash) { + return map.get(hash); + } + + +} diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java index 27794d1d8..f99b64df3 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java @@ -44,6 +44,7 @@ public class TraceApiCall { private static Configure conf = Configure.getInstance(); private static Object lock = new Object(); private static IntKeyLinkedMap restTemplateHttpRequests = new IntKeyLinkedMap().setMax(5); + private static IntKeyLinkedMap map = new IntKeyLinkedMap().setMax(2001); static { try { @@ -81,8 +82,6 @@ public static Object startApicall(String className, String methodName, String me if (ctx.apicall_name != null) { return null; } - // System.out.println("apicall start: " +ctx.apicall_name + - // " target="+ctx.apicall_target); HookArgs hookPoint = new HookArgs(className, methodName, methodDesc, _this, arg); ApiCallStep step = ApiCallTraceHelper.start(ctx, hookPoint); if (step == null) @@ -168,7 +167,7 @@ public static void endApicall(Object stat, Object returnValue, Throwable thr) { Object hookArgs = lctx.option; if (hookArgs instanceof HookArgs) { - ApiCallTraceHelper.end(tctx, returnValue, (HookArgs) hookArgs); + ApiCallTraceHelper.end(tctx, step, returnValue, (HookArgs) hookArgs); } if(step instanceof ApiCallStep2 && ((ApiCallStep2) step).async == 1) { @@ -340,7 +339,7 @@ public static void endCreateSpringRestTemplateRequest(Object _this, Object oRtn) } } - public static void setTraceApiCallResponseHeader(Object _this, Object res) { + public static void setCalleeToCtxInHttpClientResponse(Object _this, Object res) { if (!conf.trace_interservice_enabled) { return; } @@ -351,6 +350,59 @@ public static void setTraceApiCallResponseHeader(Object _this, Object res) { ApiCallTraceHelper.setCalleeToCtxInHttpClientResponse(ctx, _this, res); } + public static void setCalleeToCtxInSpringClientHttpResponse(Object _this, Object res) { + if (!conf.trace_interservice_enabled) { + return; + } + + TraceContext ctx = TraceContextManager.getContext(); + ApiCallStep2 step = null; + + if (ctx == null) { + int thisHash = System.identityHashCode(_this); + ApiCallTransferMap.ID transferID = ApiCallTransferMap.get(thisHash); + if (transferID != null) { + ApiCallTransferMap.remove(thisHash); + ctx = transferID.ctx; + step = transferID.step; + } else { + return; + } + } + + ApiCallTraceHelper.setCalleeToCtxInSpringClientHttpResponse(ctx, _this, res); + + if (step != null && step.async == 1) { + ctx.apicall_time -= step.elapsed; + step.elapsed = (int) (System.currentTimeMillis() - ctx.startTime) - step.start_time; + ctx.apicall_time += step.elapsed; + + MeterAPI.getInstance().add(step.elapsed, step.error != 0); + + if (conf.counter_interaction_enabled) { + int toHash = ctx.lastCalleeObjHash; + ctx.lastCalleeObjHash = 0; + if (toHash == 0) { + if (StringUtil.isEmpty(step.address)) { + step.address = "unknown"; + } + toHash = DataProxy.sendObjName(step.address); + MeterInteraction meterInteraction = MeterInteractionManager.getInstance() + .getNormalOutgoingMeter(conf.getObjHash(), toHash); + if (meterInteraction != null) { + meterInteraction.add(step.elapsed, step.error != 0); + } + } else { + MeterInteraction meterInteraction = MeterInteractionManager.getInstance() + .getApiOutgoingMeter(conf.getObjHash(), toHash); + if (meterInteraction != null) { + meterInteraction.add(step.elapsed, step.error != 0); + } + } + } + } + } + public static Set getAllExtendedOrImplementedTypesRecursively(Class clazz) { List res = new ArrayList(); diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java index dc9961949..6442510f7 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java @@ -85,6 +85,7 @@ public TraceContext(boolean profile_summary) { public int apicall_time; public String apicall_target; + //thread dispatch public String lastThreadCallName; diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ApiCallTraceHelper.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ApiCallTraceHelper.java index 8e0700e6e..71f34ad79 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ApiCallTraceHelper.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ApiCallTraceHelper.java @@ -27,11 +27,12 @@ public class ApiCallTraceHelper { static interface IHelper { public ApiCallStep process(TraceContext ctx, HookArgs hookPoint); - public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint); + public void processEnd(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint); } static Map handlers = new HashMap(); static ForHttpClient43 forHttpClient43 = new ForHttpClient43(); + static ForSpringAsyncRestTemplate forSpringAsyncRestTemplate = new ForSpringAsyncRestTemplate(); static void put(String name, IHelper o) { name = name.replace('.', '/'); @@ -64,14 +65,18 @@ public static ApiCallStep start(TraceContext ctx, HookArgs hookPoint) { return plug.process(ctx, hookPoint); } - public static void end(TraceContext ctx, Object rtn, HookArgs hookPoint) { + public static void end(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint) { IHelper plug = handlers.get(hookPoint.class1); if (plug == null) - defaultObj.processEnd(ctx, rtn, hookPoint); - plug.processEnd(ctx, rtn, hookPoint); + defaultObj.processEnd(ctx, step, rtn, hookPoint); + plug.processEnd(ctx, step, rtn, hookPoint); } public static void setCalleeToCtxInHttpClientResponse(TraceContext ctx, Object _this, Object response) { forHttpClient43.processSetCalleeToCtx(ctx, _this, response); } + + public static void setCalleeToCtxInSpringClientHttpResponse(TraceContext ctx, Object _this, Object response) { + forSpringAsyncRestTemplate.processSetCalleeToCtx(ctx, _this, response); + } } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForDefault.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForDefault.java index f9cb9e7ae..6017ba842 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForDefault.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForDefault.java @@ -28,7 +28,7 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } - public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + public void processEnd(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint) { return; } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient.java index ba9679ad7..8ca829fef 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient.java @@ -45,7 +45,7 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } - public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + public void processEnd(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint) { return; } } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient40.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient40.java index 43f4a8b5c..deeac506c 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient40.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient40.java @@ -55,7 +55,7 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } - public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + public void processEnd(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint) { return; } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient43.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient43.java index 0b7391131..9506981d4 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient43.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpClient43.java @@ -56,7 +56,7 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } - public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + public void processEnd(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint) { IHttpClient httpclient = getProxy(hookPoint.this1); String calleeObjHashStr = httpclient.getResponseHeader(rtn, conf._trace_interservice_callee_obj_header_key); if (calleeObjHashStr != null) { diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpURLConnection.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpURLConnection.java index bb0e1b987..6de748018 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpURLConnection.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForHttpURLConnection.java @@ -84,7 +84,7 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } - public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + public void processEnd(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint) { return; } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForJCOClient.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForJCOClient.java index 9895eb015..1f515cfb0 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForJCOClient.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForJCOClient.java @@ -34,7 +34,7 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } - public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + public void processEnd(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint) { return; } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForNettyHttpRequest.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForNettyHttpRequest.java index 12028f730..1b4d8ee41 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForNettyHttpRequest.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForNettyHttpRequest.java @@ -58,7 +58,7 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } - public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + public void processEnd(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint) { return; } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForRibbonLB.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForRibbonLB.java index 1899639e3..e5df5849d 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForRibbonLB.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForRibbonLB.java @@ -59,7 +59,7 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } - public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + public void processEnd(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint) { return; } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSAPTemp.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSAPTemp.java index 3221b51b8..9cb86dc17 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSAPTemp.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSAPTemp.java @@ -33,7 +33,7 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } - public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + public void processEnd(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint) { return; } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringAsyncRestTemplate.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringAsyncRestTemplate.java index b2c828c4f..d8d21fdba 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringAsyncRestTemplate.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringAsyncRestTemplate.java @@ -16,7 +16,10 @@ */ package scouter.agent.trace.api; +import scouter.agent.Configure; import scouter.agent.proxy.IHttpClient; +import scouter.agent.proxy.SpringRestTemplateHttpRequestFactory; +import scouter.agent.trace.ApiCallTransferMap; import scouter.agent.trace.HookArgs; import scouter.agent.trace.TraceContext; import scouter.lang.step.ApiCallStep; @@ -27,6 +30,7 @@ public class ForSpringAsyncRestTemplate implements ApiCallTraceHelper.IHelper { + private Configure conf = Configure.getInstance(); private boolean ok = true; private static IntKeyLinkedMap httpclients = new IntKeyLinkedMap().setMax(5); @@ -58,7 +62,34 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } - public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { - return; + public void processEnd(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint) { + if (step instanceof ApiCallStep2) { + ApiCallTransferMap.put(System.identityHashCode(rtn), ctx, (ApiCallStep2) step); + } + } + + public void processSetCalleeToCtx(TraceContext ctx, Object _this, Object response) { + IHttpClient httpclient = getProxy(_this); + String calleeObjHashStr = httpclient.getResponseHeader(response, conf._trace_interservice_callee_obj_header_key); + if (calleeObjHashStr != null) { + try { + ctx.lastCalleeObjHash = Integer.parseInt(calleeObjHashStr); + } catch (NumberFormatException e) { + } + } else { + ctx.lastCalleeObjHash = 0; + } + } + + private IHttpClient getProxy(Object _this) { + int key = System.identityHashCode(_this.getClass()); + IHttpClient httpclient = httpclients.get(key); + if (httpclient == null) { + synchronized (this) { + httpclient = SpringRestTemplateHttpRequestFactory.create(_this.getClass().getClassLoader()); + httpclients.put(key, httpclient); + } + } + return httpclient; } } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringRestTemplate.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringRestTemplate.java index 1ada12223..08f6cccb9 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringRestTemplate.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSpringRestTemplate.java @@ -58,7 +58,7 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } - public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + public void processEnd(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint) { return; } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSunHttpClient.java b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSunHttpClient.java index 514b74c17..ceacc2623 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSunHttpClient.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/api/ForSunHttpClient.java @@ -61,7 +61,7 @@ public ApiCallStep process(TraceContext ctx, HookArgs hookPoint) { return step; } - public void processEnd(TraceContext ctx, Object rtn, HookArgs hookPoint) { + public void processEnd(TraceContext ctx, ApiCallStep step, Object rtn, HookArgs hookPoint) { return; } diff --git a/scouter.agent.java/src/main/java/scouter/xtra/httpclient/SpringRestTemplateHttpRequest.java b/scouter.agent.java/src/main/java/scouter/xtra/httpclient/SpringRestTemplateHttpRequest.java index 41b1a6d06..6258f57b9 100644 --- a/scouter.agent.java/src/main/java/scouter/xtra/httpclient/SpringRestTemplateHttpRequest.java +++ b/scouter.agent.java/src/main/java/scouter/xtra/httpclient/SpringRestTemplateHttpRequest.java @@ -1,8 +1,7 @@ package scouter.xtra.httpclient; -import org.apache.http.Header; -import org.apache.http.HttpResponse; import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMessage; import org.springframework.http.HttpRequest; import scouter.agent.proxy.IHttpClient; @@ -38,12 +37,9 @@ public String getHeader(Object o, String key) { } public String getResponseHeader(Object o, String key) { - if (o instanceof HttpResponse) { - HttpResponse res = (HttpResponse) o; - Header h = res.getFirstHeader(key); - if (h != null) { - return h.getValue(); - } + if (o instanceof HttpMessage) { + HttpMessage res = (HttpMessage) o; + return res.getHeaders().getFirst(key); } return null; } diff --git a/scouter.common/src/main/java/scouter/lang/step/ApiCallStep2.java b/scouter.common/src/main/java/scouter/lang/step/ApiCallStep2.java index 2876b024c..c20167857 100644 --- a/scouter.common/src/main/java/scouter/lang/step/ApiCallStep2.java +++ b/scouter.common/src/main/java/scouter/lang/step/ApiCallStep2.java @@ -23,6 +23,7 @@ import java.io.IOException; public class ApiCallStep2 extends ApiCallStep { + public long start; public byte async; public byte getStepType() { From a87cd2c26e80256d96224630a26688e6de6b30af Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Fri, 24 Aug 2018 09:28:31 +0900 Subject: [PATCH 31/53] [server][webapp] interaction counter API. --- .../src/main/java/scouter/net/RequestCmd.java | 2 + .../core/cache/InteractionCounterCache.scala | 10 +- .../handle/InteractionCounterService.scala | 69 +++++++++++++ .../consumer/InteractionCounterConsumer.java | 82 ++++++++++++++++ .../InteractionCounterController.java | 98 +++++++++++++++++++ .../service/InteractionCounterService.java | 46 +++++++++ .../webapp/model/InteractionCounterData.java | 74 ++++++++++++++ 7 files changed, 380 insertions(+), 1 deletion(-) create mode 100644 scouter.server/src/main/scala/scouter/server/netio/service/handle/InteractionCounterService.scala create mode 100644 scouter.webapp/src/main/java/scouterx/webapp/layer/consumer/InteractionCounterConsumer.java create mode 100644 scouter.webapp/src/main/java/scouterx/webapp/layer/controller/InteractionCounterController.java create mode 100644 scouter.webapp/src/main/java/scouterx/webapp/layer/service/InteractionCounterService.java create mode 100644 scouter.webapp/src/main/java/scouterx/webapp/model/InteractionCounterData.java diff --git a/scouter.common/src/main/java/scouter/net/RequestCmd.java b/scouter.common/src/main/java/scouter/net/RequestCmd.java index 907ee6738..2f6be1d6a 100644 --- a/scouter.common/src/main/java/scouter/net/RequestCmd.java +++ b/scouter.common/src/main/java/scouter/net/RequestCmd.java @@ -139,6 +139,8 @@ public class RequestCmd { public static final String COUNTER_REAL_TIME_GROUP = "COUNTER_REAL_TIME_GROUP"; public static final String COUNTER_REAL_TIME_ALL_MULTI = "COUNTER_REAL_TIME_ALL_MULTI"; + public static final String INTR_COUNTER_REAL_TIME_BY_OBJ = "INTR_COUNTER_REAL_TIME_BY_OBJ"; + public static final String COUNTER_TODAY = "COUNTER_TODAY"; public static final String COUNTER_TODAY_ALL = "COUNTER_TODAY_ALL"; public static final String COUNTER_TODAY_TOT = "COUNTER_TODAY_TOT"; diff --git a/scouter.server/src/main/scala/scouter/server/core/cache/InteractionCounterCache.scala b/scouter.server/src/main/scala/scouter/server/core/cache/InteractionCounterCache.scala index 8d5d47f84..a00f48949 100644 --- a/scouter.server/src/main/scala/scouter/server/core/cache/InteractionCounterCache.scala +++ b/scouter.server/src/main/scala/scouter/server/core/cache/InteractionCounterCache.scala @@ -20,7 +20,6 @@ package scouter.server.core.cache import java.util -import scouter.lang.CounterKey import scouter.lang.pack.InteractionPerfCounterPack import scouter.server.util.{EnumerScala, ThreadScala} import scouter.util.{CacheTable, ThreadUtil} @@ -29,6 +28,7 @@ import scouter.util.{CacheTable, ThreadUtil} * Singleton object of the memory cache for counter data. */ object InteractionCounterCache { + val dummyTable = new CacheTable[InteractionCounterCacheKey, InteractionPerfCounterPack]() val objCacheMap = new util.HashMap[Int, CacheTable[InteractionCounterCacheKey, InteractionPerfCounterPack]]() val keepTime = 10000 @@ -60,4 +60,12 @@ object InteractionCounterCache { } cache.get(key) } + + def getCacheTable(objHash: Int): CacheTable[InteractionCounterCacheKey, InteractionPerfCounterPack] = { + val table = objCacheMap.get(objHash) + if(table == null) { + return dummyTable + } + return table + } } diff --git a/scouter.server/src/main/scala/scouter/server/netio/service/handle/InteractionCounterService.scala b/scouter.server/src/main/scala/scouter/server/netio/service/handle/InteractionCounterService.scala new file mode 100644 index 000000000..37563f97b --- /dev/null +++ b/scouter.server/src/main/scala/scouter/server/netio/service/handle/InteractionCounterService.scala @@ -0,0 +1,69 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package scouter.server.netio.service.handle + +import scouter.io.{DataInputX, DataOutputX} +import scouter.lang.counters.CounterConstants +import scouter.lang.pack.{InteractionPerfCounterPack, MapPack} +import scouter.lang.value.{DoubleValue, MapValue} +import scouter.lang.{CounterKey, TimeTypeEnum} +import scouter.net.{RequestCmd, TcpFlag} +import scouter.server.core.AgentManager +import scouter.server.core.cache.{CounterCache, InteractionCounterCache} +import scouter.server.db.{KeyValueStoreRW, ObjectRD, RealtimeCounterRD} +import scouter.server.netio.service.anotation.ServiceHandler +import scouter.server.util.{EnumerScala, TimedSeries} +import scouter.util.{CastUtil, DateUtil, IntKeyMap, StringUtil} + +import scala.collection.JavaConversions._ + +class InteractionCounterService { + + /** + * get latest several counter's values for specific object type + * @param din MapPack{counter[], (objType or objHashLv)} + * @param dout MapPack{objHash[], counter[], value[]} + * @param login + */ + @ServiceHandler(RequestCmd.INTR_COUNTER_REAL_TIME_BY_OBJ) + def getRealTimeByObj(din: DataInputX, dout: DataOutputX, login: Boolean) { + val param = din.readPack().asInstanceOf[MapPack] + val objType = param.getText("objType") + val objHashLv = param.getList("objHash") + + if (StringUtil.isEmpty(objType) && (objHashLv == null || objHashLv.size() == 0)) { + System.out.println("please check.. INTR_COUNTER_REAL_TIME_BY_OBJ objType is null") + return + } + var insts = AgentManager.getLiveObjHashList(objType) + if(objHashLv != null && objHashLv.size() > 0) { + insts.clear() + for( i <- 0 until objHashLv.size()) { + insts.add(objHashLv.getInt(i)) + } + } + + for(objHash <- insts) { + val cacheTable = InteractionCounterCache.getCacheTable(objHash) + EnumerScala.foreach(cacheTable.values(), (pack: InteractionPerfCounterPack) => { + dout.writeByte(TcpFlag.HasNEXT) + dout.writePack(pack) + }) + } + } +} \ No newline at end of file diff --git a/scouter.webapp/src/main/java/scouterx/webapp/layer/consumer/InteractionCounterConsumer.java b/scouter.webapp/src/main/java/scouterx/webapp/layer/consumer/InteractionCounterConsumer.java new file mode 100644 index 000000000..b8ecbd71f --- /dev/null +++ b/scouter.webapp/src/main/java/scouterx/webapp/layer/consumer/InteractionCounterConsumer.java @@ -0,0 +1,82 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouterx.webapp.layer.consumer; + +import scouter.lang.constants.ParamConstant; +import scouter.lang.pack.InteractionPerfCounterPack; +import scouter.lang.pack.MapPack; +import scouter.lang.value.ListValue; +import scouter.net.RequestCmd; +import scouterx.webapp.framework.client.net.TcpProxy; +import scouterx.webapp.framework.client.server.Server; +import scouterx.webapp.model.InteractionCounterData; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 8. 24. + */ +public class InteractionCounterConsumer { + + /** + * get realtime interaction counters's values by type + * @param objType + * @param server + * @return + */ + public List retrieveRealTimeByObjType(final String objType, final Server server) { + return retrieveRealTimeByObjTypeOrObjHashes(objType, null, server); + } + + /** + * get realtime interaction counters's values by obj hashes + * @param objHashSet + * @param server + * @return + */ + public List retrieveRealTimeByObjHashes(final Set objHashSet, final Server server) { + return retrieveRealTimeByObjTypeOrObjHashes(null, objHashSet, server); + } + + /** + * retrieve realtime interaction counter value by objtype of objhash + * + */ + private List retrieveRealTimeByObjTypeOrObjHashes(final String objType, final Set objHashSet, final Server server) { + MapPack paramPack = new MapPack(); + paramPack.put(ParamConstant.OBJ_TYPE, objType); + ListValue objHashLv = paramPack.newList(ParamConstant.OBJ_HASH); + if (objHashSet != null) { + for (Integer objHash : objHashSet) { + objHashLv.add(objHash); + } + } + + List resultList = new ArrayList<>(); + try(TcpProxy tcpProxy = TcpProxy.getTcpProxy(server)) { + tcpProxy.process(RequestCmd.INTR_COUNTER_REAL_TIME_BY_OBJ, paramPack, in -> { + resultList.add(InteractionCounterData.of((InteractionPerfCounterPack) in.readPack(), server.getId())); + }); + } + + return resultList; + } +} diff --git a/scouter.webapp/src/main/java/scouterx/webapp/layer/controller/InteractionCounterController.java b/scouter.webapp/src/main/java/scouterx/webapp/layer/controller/InteractionCounterController.java new file mode 100644 index 000000000..18da0b87b --- /dev/null +++ b/scouter.webapp/src/main/java/scouterx/webapp/layer/controller/InteractionCounterController.java @@ -0,0 +1,98 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouterx.webapp.layer.controller; + +import io.swagger.annotations.Api; +import scouterx.webapp.framework.client.server.ServerManager; +import scouterx.webapp.framework.util.ZZ; +import scouterx.webapp.layer.service.InteractionCounterService; +import scouterx.webapp.model.InteractionCounterData; +import scouterx.webapp.view.CommonResultView; + +import javax.inject.Singleton; +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.List; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 8. 24. + */ +@Path("/v1/interactionCounter") +@Api("InteractionCounter") +@Singleton +@Produces(MediaType.APPLICATION_JSON) +public class InteractionCounterController { + @Context + HttpServletRequest servletRequest; + + private final InteractionCounterService service; + + public InteractionCounterController() { + this.service = new InteractionCounterService(); + } + + /** + * get current value of interaction counters about a type + * uri : /interactionCounter/realTime/ofType/{objType}?serverId=1001010 + * + * @param objType + * @param serverId + * @see scouter.lang.counters.CounterConstants + */ + @GET + @Path("/realTime/ofType/{objType}") + @Consumes(MediaType.APPLICATION_JSON) + public CommonResultView> retrieveRealTimeCountersByObjType( + @PathParam("objType") @Valid @NotNull final String objType, + @QueryParam("serverId") final int serverId) { + + List counterList = service.retrieveRealTimeByObjType(objType, + ServerManager.getInstance().getServerIfNullDefault(serverId)); + + return CommonResultView.success(counterList); + } + + /** + * get current value of interaction counters of objects + * uri : /interactionCounter/realTime?serverId=1001010&objHashes=100,200,300 + * + * @see scouter.lang.counters.CounterConstants + */ + @GET + @Path("/realTime") + @Consumes(MediaType.APPLICATION_JSON) + public CommonResultView> retrieveRealTimeCountersByObjHashes( + @QueryParam("objHashes") @Valid @NotNull final String objHashes, + @QueryParam("serverId") final int serverId) { + + List counterList = service.retrieveRealTimeByObjHashes(ZZ.splitParamAsIntegerSet(objHashes), + ServerManager.getInstance().getServerIfNullDefault(serverId)); + + return CommonResultView.success(counterList); + } +} diff --git a/scouter.webapp/src/main/java/scouterx/webapp/layer/service/InteractionCounterService.java b/scouter.webapp/src/main/java/scouterx/webapp/layer/service/InteractionCounterService.java new file mode 100644 index 000000000..e47b24912 --- /dev/null +++ b/scouter.webapp/src/main/java/scouterx/webapp/layer/service/InteractionCounterService.java @@ -0,0 +1,46 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouterx.webapp.layer.service; + +import scouterx.webapp.framework.client.server.Server; +import scouterx.webapp.layer.consumer.InteractionCounterConsumer; +import scouterx.webapp.model.InteractionCounterData; + +import java.util.List; +import java.util.Set; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 8. 24. + */ +public class InteractionCounterService { + private final InteractionCounterConsumer consumer; + + public InteractionCounterService() { + this.consumer = new InteractionCounterConsumer(); + } + + public List retrieveRealTimeByObjType(String objType, final Server server) { + return consumer.retrieveRealTimeByObjType(objType, server); + } + + public List retrieveRealTimeByObjHashes(Set objHashSet, final Server server) { + return consumer.retrieveRealTimeByObjHashes(objHashSet, server); + } + +} diff --git a/scouter.webapp/src/main/java/scouterx/webapp/model/InteractionCounterData.java b/scouter.webapp/src/main/java/scouterx/webapp/model/InteractionCounterData.java new file mode 100644 index 000000000..42048c633 --- /dev/null +++ b/scouter.webapp/src/main/java/scouterx/webapp/model/InteractionCounterData.java @@ -0,0 +1,74 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouterx.webapp.model; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import scouter.lang.pack.InteractionPerfCounterPack; +import scouterx.webapp.framework.client.model.TextLoader; +import scouterx.webapp.framework.client.model.TextProxy; +import scouterx.webapp.framework.client.model.TextTypeEnum; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2017. 8. 29. + */ +@Getter +@Setter +@Builder +public class InteractionCounterData { + + public String objName; + public String interactionType; + + public int fromObjHash; + public String fromObjName; + public int toObjHash; + public String toObjName; + + public int period; + public int count; + public int errorCount; + public long totalElapsed; + + public static InteractionCounterData of(InteractionPerfCounterPack p, int serverId) { + preLoadDictionary(p, serverId); + + return InteractionCounterData.builder() + .interactionType(p.interactionType) + .objName(p.objName) + .fromObjHash(p.fromHash) + .fromObjName(TextProxy.object.getCachedTextIfNullDefault(p.fromHash)) + .toObjHash(p.toHash) + .toObjName(TextProxy.object.getCachedTextIfNullDefault(p.toHash)) + .period(p.period) + .count(p.count) + .errorCount(p.errorCount) + .totalElapsed(p.totalElapsed) + .build(); + } + + private static void preLoadDictionary(InteractionPerfCounterPack pack, int serverId) { + TextLoader loader = new TextLoader(serverId); + loader.addTextHash(TextTypeEnum.OBJECT, pack.fromHash); + loader.addTextHash(TextTypeEnum.OBJECT, pack.toHash); + + loader.loadAll(); + } +} From 4487dda434b105ce833bb746334678a4d573e7e9 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Fri, 24 Aug 2018 11:19:14 +0900 Subject: [PATCH 32/53] misc --- .../agent/asm/ApiCallResponseObjectASM.java | 20 ++++--- .../scouter/agent/trace/TraceApiCall.java | 58 +++++++++++-------- .../management/RemoteControlManager.scala | 2 +- 3 files changed, 46 insertions(+), 34 deletions(-) diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/ApiCallResponseObjectASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/ApiCallResponseObjectASM.java index 160e09029..f70d03fe2 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/asm/ApiCallResponseObjectASM.java +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/ApiCallResponseObjectASM.java @@ -25,6 +25,7 @@ import scouter.org.objectweb.asm.Label; import scouter.org.objectweb.asm.MethodVisitor; import scouter.org.objectweb.asm.Opcodes; +import scouter.org.objectweb.asm.Type; import scouter.org.objectweb.asm.commons.LocalVariablesSorter; import java.util.HashSet; @@ -77,13 +78,14 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si class ApiCallResponseObjectInitMV extends LocalVariablesSorter implements Opcodes { private static final String TRACE = TraceApiCall.class.getName().replace('.', '/'); - private static final String START_METHOD = "setCalleeToCtxInHttpClientResponse"; - private static final String START_SIGNATURE = "(Ljava/lang/Object;Ljava/lang/Object;)V"; + private static final String END_METHOD = "setCalleeToCtxInHttpClientResponse"; + private static final String END_SIGNATURE = "(Ljava/lang/Object;Ljava/lang/Object;)V"; private String className; private String name; private String desc; private int statIdx; + private Type returnType; private Label startFinally = new Label(); public ApiCallResponseObjectInitMV(String className, int access, String name, String desc, MethodVisitor mv) { @@ -91,14 +93,16 @@ public ApiCallResponseObjectInitMV(String className, int access, String name, St this.className = className; this.name = name; this.desc = desc; + this.returnType = Type.getReturnType(desc); } @Override - public void visitCode() { - mv.visitVarInsn(ALOAD, 0); - mv.visitVarInsn(ALOAD, 1); - mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACE, START_METHOD, START_SIGNATURE, false); - - mv.visitCode(); + public void visitInsn(int opcode) { + if ((opcode >= IRETURN && opcode <= RETURN)) { + mv.visitVarInsn(ALOAD, 0); + mv.visitVarInsn(ALOAD, 1); + mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACE, END_METHOD, END_SIGNATURE, false); + } + mv.visitInsn(opcode); } } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java index f99b64df3..aee0316f7 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceApiCall.java @@ -347,7 +347,11 @@ public static void setCalleeToCtxInHttpClientResponse(Object _this, Object res) TraceContext ctx = TraceContextManager.getContext(); if(ctx == null) return; - ApiCallTraceHelper.setCalleeToCtxInHttpClientResponse(ctx, _this, res); + try { + ApiCallTraceHelper.setCalleeToCtxInHttpClientResponse(ctx, _this, res); + } catch (Exception e) { + e.printStackTrace(); + } } public static void setCalleeToCtxInSpringClientHttpResponse(Object _this, Object res) { @@ -370,36 +374,40 @@ public static void setCalleeToCtxInSpringClientHttpResponse(Object _this, Object } } - ApiCallTraceHelper.setCalleeToCtxInSpringClientHttpResponse(ctx, _this, res); + try { + ApiCallTraceHelper.setCalleeToCtxInSpringClientHttpResponse(ctx, _this, res); - if (step != null && step.async == 1) { - ctx.apicall_time -= step.elapsed; - step.elapsed = (int) (System.currentTimeMillis() - ctx.startTime) - step.start_time; - ctx.apicall_time += step.elapsed; + if (step != null && step.async == 1) { + ctx.apicall_time -= step.elapsed; + step.elapsed = (int) (System.currentTimeMillis() - ctx.startTime) - step.start_time; + ctx.apicall_time += step.elapsed; - MeterAPI.getInstance().add(step.elapsed, step.error != 0); + MeterAPI.getInstance().add(step.elapsed, step.error != 0); - if (conf.counter_interaction_enabled) { - int toHash = ctx.lastCalleeObjHash; - ctx.lastCalleeObjHash = 0; - if (toHash == 0) { - if (StringUtil.isEmpty(step.address)) { - step.address = "unknown"; - } - toHash = DataProxy.sendObjName(step.address); - MeterInteraction meterInteraction = MeterInteractionManager.getInstance() - .getNormalOutgoingMeter(conf.getObjHash(), toHash); - if (meterInteraction != null) { - meterInteraction.add(step.elapsed, step.error != 0); - } - } else { - MeterInteraction meterInteraction = MeterInteractionManager.getInstance() - .getApiOutgoingMeter(conf.getObjHash(), toHash); - if (meterInteraction != null) { - meterInteraction.add(step.elapsed, step.error != 0); + if (conf.counter_interaction_enabled) { + int toHash = ctx.lastCalleeObjHash; + ctx.lastCalleeObjHash = 0; + if (toHash == 0) { + if (StringUtil.isEmpty(step.address)) { + step.address = "unknown"; + } + toHash = DataProxy.sendObjName(step.address); + MeterInteraction meterInteraction = MeterInteractionManager.getInstance() + .getNormalOutgoingMeter(conf.getObjHash(), toHash); + if (meterInteraction != null) { + meterInteraction.add(step.elapsed, step.error != 0); + } + } else { + MeterInteraction meterInteraction = MeterInteractionManager.getInstance() + .getApiOutgoingMeter(conf.getObjHash(), toHash); + if (meterInteraction != null) { + meterInteraction.add(step.elapsed, step.error != 0); + } } } } + } catch (Exception e) { + e.printStackTrace(); } } diff --git a/scouter.server/src/main/scala/scouter/server/management/RemoteControlManager.scala b/scouter.server/src/main/scala/scouter/server/management/RemoteControlManager.scala index bd8924a4c..da287f691 100644 --- a/scouter.server/src/main/scala/scouter/server/management/RemoteControlManager.scala +++ b/scouter.server/src/main/scala/scouter/server/management/RemoteControlManager.scala @@ -44,7 +44,7 @@ object RemoteControlManager { } val control = queue.enqueue(remoteControl); if (control == null) { - Logger.println("S148", "[INFO] RemoteControlManager queue exceeded!command:" + control.commnad); + Logger.println("S148", "[INFO] RemoteControlManager queue exceeded!command:" + remoteControl.commnad); return false; } return true; From 62ca77fb6c41ac9be8b6b43ec1e496513f4dbfc4 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Sun, 26 Aug 2018 15:07:33 +0900 Subject: [PATCH 33/53] [client][server] add configuration type COMMA_COLON_SEPARATED_VALUE --- .../views/ConfigureItemDialog.java | 239 ++++++++++++- .../configuration/views/ConfigureView.java | 41 ++- .../src/scouter/client/util/ExUtil.java | 1 + .../scouter/lang/conf/ConfigValueType.java | 10 + .../scouter/lang/conf/ConfigValueUtil.java | 30 ++ .../java/scouter/lang/conf/ValueType.java | 1 + .../java/scouter/lang/conf/ValueTypeDesc.java | 211 ++++++++++++ .../java/scouter/lang/value/ListValue.java | 18 + .../src/main/java/scouter/net/RequestCmd.java | 1 + .../main/java/scouter/server/Configure.java | 15 +- .../service/handle/ConfigureService.scala | 316 +++++++++--------- 11 files changed, 723 insertions(+), 160 deletions(-) create mode 100644 scouter.common/src/main/java/scouter/lang/conf/ValueTypeDesc.java diff --git a/scouter.client/src/scouter/client/configuration/views/ConfigureItemDialog.java b/scouter.client/src/scouter/client/configuration/views/ConfigureItemDialog.java index 986c8fad8..b26aaac20 100644 --- a/scouter.client/src/scouter/client/configuration/views/ConfigureItemDialog.java +++ b/scouter.client/src/scouter/client/configuration/views/ConfigureItemDialog.java @@ -18,10 +18,16 @@ package scouter.client.configuration.views; import org.eclipse.jface.dialogs.IMessageProvider; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.ScrolledComposite; +import org.eclipse.swt.events.FocusEvent; +import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; @@ -30,34 +36,49 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; +import org.eclipse.swt.widgets.Widget; import scouter.client.model.AgentModelThread; import scouter.lang.conf.ValueType; +import scouter.lang.conf.ValueTypeDesc; import scouter.util.StringUtil; +import java.util.ArrayList; +import java.util.List; + public class ConfigureItemDialog extends TitleAreaDialog { String confKey; String valueOrg; String objName; String desc; ValueType valueType; + ValueTypeDesc valueTypeDesc; boolean isServer; int objHash; String objType; String value; + List texts = new ArrayList<>(); + ConfApplyScopeEnum applyScope = ConfApplyScopeEnum.THIS; + Widget lastFocusedText; public ConfigureItemDialog(Shell parentShell, String confKey, String valueOrg, String objName, String desc, - ValueType valueType, boolean isServer, int objHash) { + ValueType valueType, ValueTypeDesc valueTypeDesc, boolean isServer, int objHash) { super(parentShell); this.confKey = confKey; this.objName = objName; this.desc = desc; this.valueType = (valueType == null) ? ValueType.VALUE : valueType; + this.valueTypeDesc = (valueTypeDesc == null) ? new ValueTypeDesc() : valueTypeDesc; this.valueOrg = valueOrg; + if(this.valueOrg == null) { + this.valueOrg = ""; + } this.value = shape(valueOrg); + this.isServer = isServer; this.objHash = objHash; if (!isServer) { @@ -81,24 +102,161 @@ public void create() { protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); setShellStyle(SWT.CLOSE | SWT.MODELESS | SWT.BORDER | SWT.TITLE); + setBlockOnOpen(true); - container.setLayout(new GridLayout(1, true)); - Group group = new Group(container, SWT.NONE); + ScrolledComposite scrolled = new ScrolledComposite(container, SWT.V_SCROLL | SWT.H_SCROLL); + GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); + scrolled.setLayoutData(data); + + scrolled.setExpandHorizontal(true); + scrolled.setExpandVertical(true); + + Group group = new Group(scrolled, SWT.NONE); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - group.setLayout(new GridLayout(1, false)); -// Label label = new Label(filterGrp, SWT.NONE); -// label.setText("Service"); -// label.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false)); + scrolled.setContent(group); + scrolled.setMinSize(group.computeSize(SWT.DEFAULT, SWT.DEFAULT)); if (valueType == ValueType.VALUE) { + group.setLayout(new GridLayout(1, false)); Text serviceTxt = new Text(group, SWT.BORDER | SWT.SINGLE); serviceTxt.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); serviceTxt.setText(value); serviceTxt.addModifyListener(e -> value = ((Text) e.getSource()).getText()); + } else if (valueType == ValueType.COMMA_COLON_SEPARATED_VALUE) { + data.heightHint = 250; + + FocusListener focusListener = new FocusListener() { + @Override + public void focusGained(FocusEvent focusEvent) { + lastFocusedText = focusEvent.widget; + } + + @Override + public void focusLost(FocusEvent focusEvent) { + } + }; + + String[] strings = valueTypeDesc.getStrings(); + boolean[] booleans = valueTypeDesc.getBooleans(); + if(strings == null || strings.length == 0) { + group.setLayout(new GridLayout(1, false)); + Text serviceTxt = new Text(group, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); + GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); + gridData.heightHint = 150; + serviceTxt.setLayoutData(gridData); + serviceTxt.setText(value); + serviceTxt.addModifyListener(e -> value = ((Text) e.getSource()).getText()); + + } else { + group.setLayout(new GridLayout(strings.length, false)); + + Composite buttonArea = new Composite(group, SWT.NONE); + buttonArea.setLayout(new RowLayout()); + buttonArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, strings.length, 1)); + + Button buttonAdd = new Button(buttonArea, SWT.PUSH); + buttonAdd.setText("+"); + + Button buttonRemove = new Button(buttonArea, SWT.PUSH); + buttonRemove.setText("-"); + + buttonAdd.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + for(int i = 0; i < strings.length; i++) { + Text text = new Text(group, SWT.CENTER); + text.setText(""); + text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + text.addFocusListener(focusListener); + + texts.add(text); + } + group.layout(true, true); + group.setSize(group.computeSize(SWT.DEFAULT, SWT.DEFAULT)); + scrolled.setMinSize(group.computeSize(SWT.DEFAULT, SWT.DEFAULT)); + } + }); + + buttonRemove.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (lastFocusedText != null) { + int selectedIndex = texts.indexOf(lastFocusedText); + if(selectedIndex < 0) return; + int firstTextIndex = selectedIndex / strings.length * strings.length; + for (int i = firstTextIndex; i < firstTextIndex + strings.length; i++) { + texts.get(i).dispose(); + group.layout(true, true); + group.setSize(group.computeSize(SWT.DEFAULT, SWT.DEFAULT)); + scrolled.setMinSize(group.computeSize(SWT.DEFAULT, SWT.DEFAULT)); + } + + boolean focused = false; + for (int i = firstTextIndex + strings.length; i < texts.size(); i = i + strings.length) { + if (!texts.get(i).isDisposed()) { + texts.get(i).setFocus(); + focused = true; + break; + } + } + if (!focused) { + for (int i = firstTextIndex - strings.length; i >= 0; i = i - strings.length) { + if (!texts.get(i).isDisposed()) { + texts.get(i).setFocus(); + break; + } + } + } + } + } + }); + + for (int i = 0; i < strings.length; i++) { + String colName = strings[i]; + Label col = new Label(group, SWT.CENTER); + col.setText(colName); + col.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + if (booleans != null && booleans.length > i) { + if (booleans[i]) { + FontData fontData = col.getFont().getFontData()[0]; + Font font = new Font(null, new FontData(fontData.getName(), fontData.getHeight(), SWT.BOLD)); + col.setFont(font); + } + } + } + + String[] lines = StringUtil.split(valueOrg, ','); + for (String line : lines) { + String[] values = StringUtil.split(line, ':'); + if (values.length < 0) { + continue; + } + for(int i = 0; i < strings.length; i++) { + Text text = new Text(group, SWT.CENTER); + if (values.length > i && StringUtil.isNotEmpty(values[i])) { + text.setText(values[i]); + } + text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + text.addFocusListener(focusListener); + + texts.add(text); + } + } + + for(int i = 0; i < strings.length; i++) { + Text text = new Text(group, SWT.CENTER); + text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + text.addFocusListener(focusListener); + + texts.add(text); + } + } + } else if (valueType == ValueType.COMMA_SEPARATED_VALUE) { + group.setLayout(new GridLayout(1, false)); Text serviceTxt = new Text(group, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); gridData.heightHint = 100; @@ -107,6 +265,7 @@ protected Control createDialogArea(Composite parent) { serviceTxt.addModifyListener(e -> value = ((Text) e.getSource()).getText()); } else if (valueType == ValueType.NUM) { + group.setLayout(new GridLayout(1, false)); Text serviceTxt = new Text(group, SWT.BORDER | SWT.SINGLE); serviceTxt.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); serviceTxt.addVerifyListener(e -> e.doit = isNumber(e.text)); @@ -114,6 +273,7 @@ protected Control createDialogArea(Composite parent) { serviceTxt.addModifyListener(e -> value = ((Text) e.getSource()).getText()); } else if (valueType == ValueType.BOOL) { + group.setLayout(new GridLayout(1, false)); Button button = new Button(group, SWT.CHECK); button.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); button.setText(confKey); @@ -129,6 +289,7 @@ public void widgetSelected(SelectionEvent e) { }); button.setSelection("true".equals(value)); } else { + group.setLayout(new GridLayout(1, false)); Text serviceTxt = new Text(group, SWT.BORDER | SWT.SINGLE); serviceTxt.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); serviceTxt.setText(value); @@ -179,7 +340,6 @@ public void widgetSelected(SelectionEvent e) { } }); } - return container; } @@ -196,9 +356,72 @@ private boolean isNumber(String v) { @Override protected void okPressed() { + if (!checkData()) return; + super.okPressed(); } + private boolean checkData() { + if (valueType == ValueType.COMMA_COLON_SEPARATED_VALUE) { + String[] strings = valueTypeDesc.getStrings(); + boolean[] booleans = valueTypeDesc.getBooleans(); + + if (strings != null || strings.length > 0) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < texts.size(); i = i + strings.length) { + if (texts.get(i).isDisposed()) { + continue; + } + + boolean allBlank = true; + for (int j = i; j < i + strings.length; j++) { + if (StringUtil.isNotEmpty(texts.get(j).getText())) { + allBlank = false; + break; + } + } + + if (allBlank) { + for (int j = i; j < i + strings.length; j++) { + texts.get(j).dispose(); + } + } + } + + for (int i = 0; i < texts.size(); i++) { + if (texts.get(i).isDisposed()) { + continue; + } + int itemGroupPos = i % strings.length; + if (booleans != null && booleans.length > itemGroupPos && booleans[itemGroupPos]) { + if (StringUtil.isEmpty(texts.get(i).getText())) { + MessageDialog.openWarning(this.getShell(), "Missing required", "Missing required."); + texts.get(i).setFocus(); + return false; + } + } + } + + for (int i = 0; i < texts.size(); i++) { + if (texts.get(i).isDisposed()) { + continue; + } + + if (i != 0 && i % strings.length == 0) { + sb.append(','); + } else if (i != 0) { + sb.append(':'); + } + + sb.append(texts.get(i).getText()); + } + value = sb.toString(); + } + } + return true; + } + @Override protected Point getInitialSize() { return getShell().computeSize(600, SWT.DEFAULT); diff --git a/scouter.client/src/scouter/client/configuration/views/ConfigureView.java b/scouter.client/src/scouter/client/configuration/views/ConfigureView.java index c2c958fd0..b31d06615 100644 --- a/scouter.client/src/scouter/client/configuration/views/ConfigureView.java +++ b/scouter.client/src/scouter/client/configuration/views/ConfigureView.java @@ -78,8 +78,10 @@ import scouter.client.util.ExUtil; import scouter.client.util.ImageUtil; import scouter.lang.conf.ValueType; +import scouter.lang.conf.ValueTypeDesc; import scouter.lang.pack.MapPack; import scouter.lang.value.ListValue; +import scouter.lang.value.MapValue; import scouter.net.RequestCmd; import scouter.util.CastUtil; import scouter.util.StringUtil; @@ -126,6 +128,7 @@ public class ConfigureView extends ViewPart { HashMap descMap = new HashMap(); HashMap valueTypeMap = new HashMap(); + HashMap valueTypeDescMap = new HashMap(); public void createPartControl(Composite parent) { parent.setLayout(new FillLayout()); @@ -287,6 +290,7 @@ public void setInput(int serverId) { loadConfigList(RequestCmd.LIST_CONFIGURE_SERVER, null); loadConfigDesc(new MapPack()); loadConfigValueType(new MapPack()); + loadConfigValueTypeDesc(new MapPack()); } } @@ -389,7 +393,8 @@ public void mouseDoubleClick(MouseEvent e) { final String valuef = value; ExUtil.exec(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().getDisplay(), () -> { ConfigureItemDialog dialog = new ConfigureItemDialog(parent.getShell(), selectedText, valuef, displayName, - getInDescMap(selectedText), getInValueTypeMap(selectedText), objHash == 0 ? true : false, objHash); + getInDescMap(selectedText), getInValueTypeMap(selectedText), getInValueTypeDescMap(selectedText), + objHash == 0 ? true : false, objHash); if (dialog.open() == Window.OK) { setTheConfig(selectedText, dialog.getValue(), dialog.getApplyScope()); } @@ -449,6 +454,14 @@ private ValueType getInValueTypeMap(String text) { return valueType; } + private ValueTypeDesc getInValueTypeDescMap(String text) { + ValueTypeDesc valueTypeDesc = valueTypeDescMap.get(text); + if (valueTypeDesc == null) { + valueTypeDesc = valueTypeDescMap.get(removeVariableString(text)); + } + return valueTypeDesc; + } + public static String removeVariableString(String text) { StringBuilder resultBuilder = new StringBuilder(text.length()); char[] org = text.toCharArray(); @@ -697,6 +710,32 @@ public void run() { }); } + private void loadConfigValueTypeDesc(final MapPack param) { + ExUtil.asyncRun(new Runnable() { + public void run() { + MapPack pack = null; + TcpProxy tcp = TcpProxy.getTcpProxy(serverId); + try { + pack = (MapPack) tcp.getSingle(RequestCmd.CONFIGURE_VALUE_TYPE_DESC, param); + } catch (Exception e) { + e.printStackTrace(); + } finally { + TcpProxy.putTcpProxy(tcp); + } + if (pack != null) { + Iterator keys = pack.keys(); + while (keys.hasNext()) { + String key = keys.next(); + valueTypeDescMap.put(key, ValueTypeDesc.of((MapValue) pack.get(key))); + if (key.contains("$")) { + valueTypeDescMap.put(removeVariableString(key), ValueTypeDesc.of((MapValue) pack.get(key))); + } + } + } + } + }); + } + public void setFocus() { IStatusLineManager slManager = getViewSite().getActionBars().getStatusLineManager(); slManager.setMessage("CTRL + S : save configurations, CTRL + A : select all text"); diff --git a/scouter.client/src/scouter/client/util/ExUtil.java b/scouter.client/src/scouter/client/util/ExUtil.java index e1f236369..403583096 100644 --- a/scouter.client/src/scouter/client/util/ExUtil.java +++ b/scouter.client/src/scouter/client/util/ExUtil.java @@ -34,6 +34,7 @@ public void run() { try { r.run(); } catch (Throwable t) { + t.printStackTrace(); } } }); diff --git a/scouter.common/src/main/java/scouter/lang/conf/ConfigValueType.java b/scouter.common/src/main/java/scouter/lang/conf/ConfigValueType.java index 76dfc35aa..7562dcfd8 100644 --- a/scouter.common/src/main/java/scouter/lang/conf/ConfigValueType.java +++ b/scouter.common/src/main/java/scouter/lang/conf/ConfigValueType.java @@ -23,4 +23,14 @@ @Retention(RetentionPolicy.RUNTIME) public @interface ConfigValueType { ValueType value() default ValueType.VALUE; + + String[] strings() default {}; + String[] strings1() default {}; + String[] strings2() default {}; + String[] strings3() default {}; + + boolean[] booleans() default {}; + boolean[] booleans1() default {}; + int[] ints() default {}; + int[] ints1() default {}; } diff --git a/scouter.common/src/main/java/scouter/lang/conf/ConfigValueUtil.java b/scouter.common/src/main/java/scouter/lang/conf/ConfigValueUtil.java index aa33f7769..89fcb3f67 100644 --- a/scouter.common/src/main/java/scouter/lang/conf/ConfigValueUtil.java +++ b/scouter.common/src/main/java/scouter/lang/conf/ConfigValueUtil.java @@ -122,6 +122,36 @@ public static StringKeyLinkedMap getConfigValueTypeMap(Object o) { return valueTypeMap; } + public static StringKeyLinkedMap getConfigValueTypeDescMap(Object o) { + StringKeyLinkedMap valueTypeDescMap = new StringKeyLinkedMap(); + Field[] fields = o.getClass().getFields(); + for (int i = 0; i < fields.length; i++) { + int mod = fields[i].getModifiers(); + if (Modifier.isStatic(mod) == false && Modifier.isPublic(mod)) { + try { + ConfigValueType annotation = fields[i].getAnnotation(ConfigValueType.class); + if (annotation == null || annotation.value() != ValueType.COMMA_COLON_SEPARATED_VALUE) { + continue; + } + ValueTypeDesc valueTypeDesc = new ValueTypeDesc(); + valueTypeDesc.setStrings(annotation.strings()); + valueTypeDesc.setStrings1(annotation.strings1()); + valueTypeDesc.setStrings2(annotation.strings2()); + valueTypeDesc.setStrings3(annotation.strings3()); + valueTypeDesc.setBooleans(annotation.booleans()); + valueTypeDesc.setBooleans1(annotation.booleans1()); + valueTypeDesc.setInts(annotation.ints()); + valueTypeDesc.setInts1(annotation.ints1()); + + valueTypeDescMap.put(fields[i].getName(), valueTypeDesc); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return valueTypeDescMap; + } + public static Value toValue(Object o) { if (o == null) return new NullValue(); diff --git a/scouter.common/src/main/java/scouter/lang/conf/ValueType.java b/scouter.common/src/main/java/scouter/lang/conf/ValueType.java index f49f9527c..ec6777014 100644 --- a/scouter.common/src/main/java/scouter/lang/conf/ValueType.java +++ b/scouter.common/src/main/java/scouter/lang/conf/ValueType.java @@ -24,6 +24,7 @@ public enum ValueType { NUM(2), BOOL(3), COMMA_SEPARATED_VALUE(4), + COMMA_COLON_SEPARATED_VALUE(5), ; int type; diff --git a/scouter.common/src/main/java/scouter/lang/conf/ValueTypeDesc.java b/scouter.common/src/main/java/scouter/lang/conf/ValueTypeDesc.java new file mode 100644 index 000000000..c31730985 --- /dev/null +++ b/scouter.common/src/main/java/scouter/lang/conf/ValueTypeDesc.java @@ -0,0 +1,211 @@ +/* + * Copyright 2015 the original author or authors. + * @https://github.com/scouter-project/scouter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package scouter.lang.conf; + +import scouter.lang.pack.MapPack; +import scouter.lang.value.ListValue; +import scouter.lang.value.MapValue; + +/** + * @author Gun Lee (gunlee01@gmail.com) on 2018. 8. 25. + */ +public class ValueTypeDesc { + public final static String STRINGS = "strings"; + public final static String STRINGS1 = "strings1"; + public final static String STRINGS2 = "strings2"; + public final static String STRINGS3 = "strings3"; + public final static String BOOLEANS = "booleans"; + public final static String BOOLEANS1 = "booleans1"; + public final static String INTS = "ints"; + public final static String INTS1 = "ints1"; + + String[] strings; + String[] strings1; + String[] strings2; + String[] strings3; + boolean[] booleans; + boolean[] booleans1; + int[] ints; + int[] ints1; + + public String[] getStrings() { + return strings; + } + + public void setStrings(String[] strings) { + this.strings = strings; + } + + public String[] getStrings1() { + return strings1; + } + + public void setStrings1(String[] strings1) { + this.strings1 = strings1; + } + + public String[] getStrings2() { + return strings2; + } + + public void setStrings2(String[] strings2) { + this.strings2 = strings2; + } + + public String[] getStrings3() { + return strings3; + } + + public void setStrings3(String[] strings3) { + this.strings3 = strings3; + } + + public boolean[] getBooleans() { + return booleans; + } + + public void setBooleans(boolean[] booleans) { + this.booleans = booleans; + } + + public boolean[] getBooleans1() { + return booleans1; + } + + public void setBooleans1(boolean[] booleans1) { + this.booleans1 = booleans1; + } + + public int[] getInts() { + return ints; + } + + public void setInts(int[] ints) { + this.ints = ints; + } + + public int[] getInts1() { + return ints1; + } + + public void setInts1(int[] ints1) { + this.ints1 = ints1; + } + + public MapValue toMapValue() { + return toMapPack().toMapValue(); + } + + public MapPack toMapPack() { + MapPack pack = new MapPack(); + + ListValue stringsLv = new ListValue(); + stringsLv.add(this.strings); + ListValue strings1Lv = new ListValue(); + strings1Lv.add(this.strings1); + ListValue strings2Lv = new ListValue(); + strings2Lv.add(this.strings2); + ListValue strings3Lv = new ListValue(); + strings3Lv.add(this.strings3); + + ListValue booleanLv = new ListValue(); + booleanLv.add(this.booleans); + ListValue boolean1Lv = new ListValue(); + boolean1Lv.add(this.booleans1); + + ListValue intLv = new ListValue(); + intLv.add(this.ints); + ListValue int1Lv = new ListValue(); + int1Lv.add(this.ints1); + + pack.put(STRINGS, stringsLv); + pack.put(STRINGS1, strings1Lv); + pack.put(STRINGS2, strings2Lv); + pack.put(STRINGS3, strings3Lv); + pack.put(BOOLEANS, booleanLv); + pack.put(BOOLEANS1, boolean1Lv); + pack.put(INTS, intLv); + pack.put(INTS1, int1Lv); + + return pack; + } + + public static ValueTypeDesc of(MapValue mapValue) { + ValueTypeDesc vd = new ValueTypeDesc(); + + ListValue stringLv = mapValue.getList(STRINGS); + String[] strings = new String[stringLv.size()]; + for (int i = 0; i < stringLv.size(); i++) { + strings[i] = stringLv.getString(i); + } + + ListValue string1Lv = mapValue.getList(STRINGS1); + String[] strings1 = new String[string1Lv.size()]; + for (int i = 0; i < string1Lv.size(); i++) { + strings1[i] = string1Lv.getString(i); + } + + ListValue string2Lv = mapValue.getList(STRINGS2); + String[] strings2 = new String[string2Lv.size()]; + for (int i = 0; i < string2Lv.size(); i++) { + strings2[i] = string2Lv.getString(i); + } + + ListValue string3Lv = mapValue.getList(STRINGS3); + String[] strings3 = new String[string3Lv.size()]; + for (int i = 0; i < string3Lv.size(); i++) { + strings3[i] = string3Lv.getString(i); + } + + ListValue booleanLv = mapValue.getList(BOOLEANS); + boolean[] booleans = new boolean[booleanLv.size()]; + for (int i = 0; i < booleanLv.size(); i++) { + booleans[i] = booleanLv.getBoolean(i); + } + + ListValue boolean1Lv = mapValue.getList(BOOLEANS1); + boolean[] booleans1 = new boolean[boolean1Lv.size()]; + for (int i = 0; i < boolean1Lv.size(); i++) { + booleans1[i] = boolean1Lv.getBoolean(i); + } + + ListValue intLv = mapValue.getList(INTS); + int[] ints = new int[intLv.size()]; + for (int i = 0; i < intLv.size(); i++) { + ints[i] = intLv.getInt(i); + } + + ListValue int1Lv = mapValue.getList(INTS1); + int[] ints1 = new int[int1Lv.size()]; + for (int i = 0; i < int1Lv.size(); i++) { + ints1[i] = int1Lv.getInt(i); + } + + vd.setStrings(strings); + vd.setStrings1(strings1); + vd.setStrings2(strings2); + vd.setStrings3(strings3); + vd.setBooleans(booleans); + vd.setBooleans1(booleans1); + vd.setInts(ints); + vd.setInts1(ints1); + + return vd; + } +} diff --git a/scouter.common/src/main/java/scouter/lang/value/ListValue.java b/scouter.common/src/main/java/scouter/lang/value/ListValue.java index b09297012..295a0f395 100644 --- a/scouter.common/src/main/java/scouter/lang/value/ListValue.java +++ b/scouter.common/src/main/java/scouter/lang/value/ListValue.java @@ -208,6 +208,24 @@ public ListValue add(String[] str) { } return this; } + + public ListValue add(boolean[] booleans) { + if (booleans == null) + return this; + for (boolean s : booleans) { + this.add(s); + } + return this; + } + + public ListValue add(int[] ints) { + if (ints == null) + return this; + for (int s : ints) { + this.add(s); + } + return this; + } public Iterator iterator() { return this.valueList.iterator(); diff --git a/scouter.common/src/main/java/scouter/net/RequestCmd.java b/scouter.common/src/main/java/scouter/net/RequestCmd.java index 2f6be1d6a..9de5b3050 100644 --- a/scouter.common/src/main/java/scouter/net/RequestCmd.java +++ b/scouter.common/src/main/java/scouter/net/RequestCmd.java @@ -184,6 +184,7 @@ public class RequestCmd { public static final String REDEFINE_CLASSES = "REDEFINE_CLASSES"; public static final String CONFIGURE_DESC = "CONFIGURE_DESC"; public static final String CONFIGURE_VALUE_TYPE = "CONFIGURE_VALUE_TYPE"; + public static final String CONFIGURE_VALUE_TYPE_DESC = "CONFIGURE_VALUE_TYPE_DESC"; public static final String GET_ALERT_SCRIPTING_CONTETNS = "GET_ALERT_SCRIPTING_CONTETNS"; public static final String GET_ALERT_SCRIPTING_CONFIG_CONTETNS = "GET_ALERT_SCRIPTING_CONFIG_CONTETNS"; diff --git a/scouter.server/src/main/java/scouter/server/Configure.java b/scouter.server/src/main/java/scouter/server/Configure.java index aa29963d7..9d63102b6 100644 --- a/scouter.server/src/main/java/scouter/server/Configure.java +++ b/scouter.server/src/main/java/scouter/server/Configure.java @@ -22,6 +22,7 @@ import scouter.lang.conf.ConfigValueType; import scouter.lang.conf.ConfigValueUtil; import scouter.lang.conf.ValueType; +import scouter.lang.conf.ValueTypeDesc; import scouter.lang.value.ListValue; import scouter.lang.value.MapValue; import scouter.net.NetConstants; @@ -391,7 +392,10 @@ public final static synchronized Configure newInstanceForTestCase() { "If set, only the metric matching to this tag value is handled.\n" + "It can have multiple values. comma separator means 'or' condition. eg) cpu:cpu-total,cpu:cpu0\n" + "It also have not(!) condition. eg) cpu:!cpu-total") - @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + @ConfigValueType(value = ValueType.COMMA_COLON_SEPARATED_VALUE, + strings = {"filtering tag name(reqiured)", "filtering tag value(reqiured)"}, + booleans = {true, true} + ) public String input_telegraf_$measurement$_tag_filter = ""; @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + @@ -406,7 +410,10 @@ public final static synchronized Configure newInstanceForTestCase() { "When specified as a delta type, the difference in values per second is stored. and the counter name ends with '_delta'\n" + "double '&&' means BOTH type. AS BOTH type, the value and the difference value both are stored.\n" + " - {normalize sec} applies only to a delta counter if the counter is a 'BOTH' type counter. (This value can have min 4 to max 60)") - @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + @ConfigValueType(value = ValueType.COMMA_COLON_SEPARATED_VALUE, + strings = {"line protocol field\n(reqiured)", "mapping counter name\n(reqiured)", "display name", "unit", "totalizable\ndefault true", "norm. sec.\ndefault 30"}, + booleans = {true, true, false, false, false, false} + ) public String input_telegraf_$measurement$_counter_mappings = ""; @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + @@ -995,6 +1002,10 @@ public StringKeyLinkedMap getConfigureValueType() { return ConfigValueUtil.getConfigValueTypeMap(this); } + public StringKeyLinkedMap getConfigureValueTypeDesc() { + return ConfigValueUtil.getConfigValueTypeDescMap(this); + } + public static StringLinkedSet toOrderSet(String values, String deli) { StringLinkedSet set = new StringLinkedSet(); StringTokenizer nizer = new StringTokenizer(values, deli); diff --git a/scouter.server/src/main/scala/scouter/server/netio/service/handle/ConfigureService.scala b/scouter.server/src/main/scala/scouter/server/netio/service/handle/ConfigureService.scala index aa5fe0996..cf1d5eb46 100644 --- a/scouter.server/src/main/scala/scouter/server/netio/service/handle/ConfigureService.scala +++ b/scouter.server/src/main/scala/scouter/server/netio/service/handle/ConfigureService.scala @@ -16,11 +16,13 @@ * */ -package scouter.server.netio.service.handle; +package scouter.server.netio.service.handle + +; import scouter.io.DataInputX import scouter.io.DataOutputX -import scouter.lang.conf.ValueType +import scouter.lang.conf.{ValueType, ValueTypeDesc} import scouter.lang.pack.MapPack import scouter.lang.pack.ObjectPack import scouter.lang.pack.Pack @@ -39,165 +41,181 @@ import scouter.server.util.EnumerScala class ConfigureService { - @ServiceHandler(RequestCmd.GET_CONFIGURE_SERVER) - def getConfigureServer(din: DataInputX, dout: DataOutputX, login: Boolean) { - var result = new MapPack(); + @ServiceHandler(RequestCmd.GET_CONFIGURE_SERVER) + def getConfigureServer(din: DataInputX, dout: DataOutputX, login: Boolean) { + var result = new MapPack(); - result.put("configKey", Configure.getInstance().getKeyValueInfo().getList("key")); + result.put("configKey", Configure.getInstance().getKeyValueInfo().getList("key")); - var config = Configure.getInstance().loadText(); - if (config == null) { - config = ""; + var config = Configure.getInstance().loadText(); + if (config == null) { + config = ""; + } + result.put("serverConfig", config); + dout.writeByte(TcpFlag.HasNEXT); + dout.writePack(result); } - result.put("serverConfig", config); - dout.writeByte(TcpFlag.HasNEXT); - dout.writePack(result); - } - - @ServiceHandler(RequestCmd.SET_CONFIGURE_SERVER) - def setConfigureServer(din: DataInputX, dout: DataOutputX, login: Boolean) { - val param = din.readPack().asInstanceOf[MapPack]; - val setConfig = param.getText("setConfig"); - val success = Configure.getInstance().saveText(setConfig); - if (success) { - Configure.getInstance().reload(true); + + @ServiceHandler(RequestCmd.SET_CONFIGURE_SERVER) + def setConfigureServer(din: DataInputX, dout: DataOutputX, login: Boolean) { + val param = din.readPack().asInstanceOf[MapPack]; + val setConfig = param.getText("setConfig"); + val success = Configure.getInstance().saveText(setConfig); + if (success) { + Configure.getInstance().reload(true); + } + val result = new MapPack(); + result.put("result", String.valueOf(success)); + dout.writeByte(TcpFlag.HasNEXT); + dout.writePack(result); } - val result = new MapPack(); - result.put("result", String.valueOf(success)); - dout.writeByte(TcpFlag.HasNEXT); - dout.writePack(result); - } - - @ServiceHandler(RequestCmd.GET_CONFIGURE_WAS) - def getConfigureAgent(din: DataInputX, dout: DataOutputX, login: Boolean) { - val param = din.readPack().asInstanceOf[MapPack]; - val objHash = param.getInt("objHash"); - val o = AgentManager.getAgent(objHash); - val p = AgentCall.call(o, RequestCmd.GET_CONFIGURE_WAS, param); - if (p != null) { - dout.writeByte(TcpFlag.HasNEXT); - dout.writePack(p); + + @ServiceHandler(RequestCmd.GET_CONFIGURE_WAS) + def getConfigureAgent(din: DataInputX, dout: DataOutputX, login: Boolean) { + val param = din.readPack().asInstanceOf[MapPack]; + val objHash = param.getInt("objHash"); + val o = AgentManager.getAgent(objHash); + val p = AgentCall.call(o, RequestCmd.GET_CONFIGURE_WAS, param); + if (p != null) { + dout.writeByte(TcpFlag.HasNEXT); + dout.writePack(p); + } } - } - - @ServiceHandler(RequestCmd.SET_CONFIGURE_WAS) - def setConfigureAgent(din: DataInputX, dout: DataOutputX, login: Boolean) { - val param = din.readPack().asInstanceOf[MapPack]; - val objHash = param.getInt("objHash"); - val o = AgentManager.getAgent(objHash); - val p = AgentCall.call(o, RequestCmd.SET_CONFIGURE_WAS, param); - if (p != null) { - dout.writeByte(TcpFlag.HasNEXT); - dout.writePack(p); + + @ServiceHandler(RequestCmd.SET_CONFIGURE_WAS) + def setConfigureAgent(din: DataInputX, dout: DataOutputX, login: Boolean) { + val param = din.readPack().asInstanceOf[MapPack]; + val objHash = param.getInt("objHash"); + val o = AgentManager.getAgent(objHash); + val p = AgentCall.call(o, RequestCmd.SET_CONFIGURE_WAS, param); + if (p != null) { + dout.writeByte(TcpFlag.HasNEXT); + dout.writePack(p); + } } - } - - @ServiceHandler(RequestCmd.LIST_CONFIGURE_WAS) - def listConfigureWas(din: DataInputX, dout: DataOutputX, login: Boolean) { - val param = din.readPack().asInstanceOf[MapPack]; - val objHash = param.getInt("objHash"); - val o = AgentManager.getAgent(objHash); - val p = AgentCall.call(o, RequestCmd.LIST_CONFIGURE_WAS, param); - if (p != null) { - dout.writeByte(TcpFlag.HasNEXT); - dout.writePack(p); + + @ServiceHandler(RequestCmd.LIST_CONFIGURE_WAS) + def listConfigureWas(din: DataInputX, dout: DataOutputX, login: Boolean) { + val param = din.readPack().asInstanceOf[MapPack]; + val objHash = param.getInt("objHash"); + val o = AgentManager.getAgent(objHash); + val p = AgentCall.call(o, RequestCmd.LIST_CONFIGURE_WAS, param); + if (p != null) { + dout.writeByte(TcpFlag.HasNEXT); + dout.writePack(p); + } } - } - - @ServiceHandler(RequestCmd.LIST_CONFIGURE_SERVER) - def listConfigureServer(din: DataInputX, dout: DataOutputX, login: Boolean) { - val m = Configure.getInstance().getKeyValueInfo(); - val pack = new MapPack(); - pack.put("key", m.getList("key")); - pack.put("value", m.getList("value")); - pack.put("default", m.getList("default")); - dout.writeByte(TcpFlag.HasNEXT); - dout.writePack(pack); - } - - @ServiceHandler(RequestCmd.REDEFINE_CLASSES) - def applyConfigureAgent(din: DataInputX, dout: DataOutputX, login: Boolean) { - val param = din.readPack().asInstanceOf[MapPack]; - val objHash = param.getInt("objHash"); - - val o = AgentManager.getAgent(objHash); - val p = AgentCall.call(o, RequestCmd.REDEFINE_CLASSES, param); - if (p != null) { - dout.writeByte(TcpFlag.HasNEXT); - dout.writePack(p); + + @ServiceHandler(RequestCmd.LIST_CONFIGURE_SERVER) + def listConfigureServer(din: DataInputX, dout: DataOutputX, login: Boolean) { + val m = Configure.getInstance().getKeyValueInfo(); + val pack = new MapPack(); + pack.put("key", m.getList("key")); + pack.put("value", m.getList("value")); + pack.put("default", m.getList("default")); + dout.writeByte(TcpFlag.HasNEXT); + dout.writePack(pack); } - } - - @ServiceHandler(RequestCmd.GET_XML_COUNTER) - def getCounterXml(din: DataInputX, dout: DataOutputX, login: Boolean) { - val defaultXml = CounterManager.getInstance().getXmlContent(); - val customXml = CounterManager.getInstance().getXmlCustomContent(); - val p = new MapPack(); - p.put("default", new BlobValue(defaultXml)); - if (customXml != null && customXml.length > 0) { - p.put("custom", new BlobValue(customXml)); + + @ServiceHandler(RequestCmd.REDEFINE_CLASSES) + def applyConfigureAgent(din: DataInputX, dout: DataOutputX, login: Boolean) { + val param = din.readPack().asInstanceOf[MapPack]; + val objHash = param.getInt("objHash"); + + val o = AgentManager.getAgent(objHash); + val p = AgentCall.call(o, RequestCmd.REDEFINE_CLASSES, param); + if (p != null) { + dout.writeByte(TcpFlag.HasNEXT); + dout.writePack(p); + } } - dout.writeByte(TcpFlag.HasNEXT); - dout.writePack(p); - } - - @ServiceHandler(RequestCmd.DEFINE_OBJECT_TYPE) - def defineObjectType(din: DataInputX, dout: DataOutputX, login: Boolean) { - val param = din.readPack().asInstanceOf[MapPack]; - val success = CounterManager.getInstance().addObjectType(param); - dout.writeByte(TcpFlag.HasNEXT); - dout.writeValue(new BooleanValue(success)); - } - - @ServiceHandler(RequestCmd.EDIT_OBJECT_TYPE) - def editObjectType(din: DataInputX, dout: DataOutputX, login: Boolean) { - val param = din.readPack().asInstanceOf[MapPack]; - val success = CounterManager.getInstance().editObjectType(param); - dout.writeByte(TcpFlag.HasNEXT); - dout.writeValue(new BooleanValue(success)); - } - - @ServiceHandler(RequestCmd.CONFIGURE_DESC) - def getConfigureDesc(din: DataInputX, dout: DataOutputX, login: Boolean) { - val param = din.readPack().asInstanceOf[MapPack]; - val objHash = param.getInt("objHash"); - if (objHash == 0) { - val p = new MapPack() - val descMap = Configure.getInstance.getConfigureDesc(); - EnumerScala.foreach(descMap.entries(), (entry: StringKeyLinkedEntry[String]) => { - p.put(entry.getKey(), entry.getValue()) - }) - dout.writeByte(TcpFlag.HasNEXT); - dout.writePack(p); - } else { - val o = AgentManager.getAgent(objHash); - val p = AgentCall.call(o, RequestCmd.CONFIGURE_DESC, param); - if (p != null) { + + @ServiceHandler(RequestCmd.GET_XML_COUNTER) + def getCounterXml(din: DataInputX, dout: DataOutputX, login: Boolean) { + val defaultXml = CounterManager.getInstance().getXmlContent(); + val customXml = CounterManager.getInstance().getXmlCustomContent(); + val p = new MapPack(); + p.put("default", new BlobValue(defaultXml)); + if (customXml != null && customXml.length > 0) { + p.put("custom", new BlobValue(customXml)); + } dout.writeByte(TcpFlag.HasNEXT); dout.writePack(p); - } } - } - - @ServiceHandler(RequestCmd.CONFIGURE_VALUE_TYPE) - def getConfigureValueType(din: DataInputX, dout: DataOutputX, login: Boolean) { - val param = din.readPack().asInstanceOf[MapPack]; - val objHash = param.getInt("objHash"); - if (objHash == 0) { - val p = new MapPack() - val valueTypeMap = Configure.getInstance.getConfigureValueType(); - EnumerScala.foreach(valueTypeMap.entries(), (entry: StringKeyLinkedEntry[ValueType]) => { - p.put(entry.getKey(), entry.getValue().getType()) - }) - dout.writeByte(TcpFlag.HasNEXT); - dout.writePack(p); - } else { - val o = AgentManager.getAgent(objHash); - val p = AgentCall.call(o, RequestCmd.CONFIGURE_VALUE_TYPE, param); - if (p != null) { + + @ServiceHandler(RequestCmd.DEFINE_OBJECT_TYPE) + def defineObjectType(din: DataInputX, dout: DataOutputX, login: Boolean) { + val param = din.readPack().asInstanceOf[MapPack]; + val success = CounterManager.getInstance().addObjectType(param); dout.writeByte(TcpFlag.HasNEXT); - dout.writePack(p); - } + dout.writeValue(new BooleanValue(success)); + } + + @ServiceHandler(RequestCmd.EDIT_OBJECT_TYPE) + def editObjectType(din: DataInputX, dout: DataOutputX, login: Boolean) { + val param = din.readPack().asInstanceOf[MapPack]; + val success = CounterManager.getInstance().editObjectType(param); + dout.writeByte(TcpFlag.HasNEXT); + dout.writeValue(new BooleanValue(success)); + } + + @ServiceHandler(RequestCmd.CONFIGURE_DESC) + def getConfigureDesc(din: DataInputX, dout: DataOutputX, login: Boolean) { + val param = din.readPack().asInstanceOf[MapPack]; + val objHash = param.getInt("objHash"); + if (objHash == 0) { + val p = new MapPack() + val descMap = Configure.getInstance.getConfigureDesc(); + EnumerScala.foreach(descMap.entries(), (entry: StringKeyLinkedEntry[String]) => { + p.put(entry.getKey(), entry.getValue()) + }) + dout.writeByte(TcpFlag.HasNEXT); + dout.writePack(p); + } else { + val o = AgentManager.getAgent(objHash); + val p = AgentCall.call(o, RequestCmd.CONFIGURE_DESC, param); + if (p != null) { + dout.writeByte(TcpFlag.HasNEXT); + dout.writePack(p); + } + } + } + + @ServiceHandler(RequestCmd.CONFIGURE_VALUE_TYPE) + def getConfigureValueType(din: DataInputX, dout: DataOutputX, login: Boolean) { + val param = din.readPack().asInstanceOf[MapPack]; + val objHash = param.getInt("objHash"); + if (objHash == 0) { + val p = new MapPack() + val valueTypeMap = Configure.getInstance.getConfigureValueType(); + EnumerScala.foreach(valueTypeMap.entries(), (entry: StringKeyLinkedEntry[ValueType]) => { + p.put(entry.getKey(), entry.getValue().getType()) + }) + dout.writeByte(TcpFlag.HasNEXT); + dout.writePack(p); + } else { + val o = AgentManager.getAgent(objHash); + val p = AgentCall.call(o, RequestCmd.CONFIGURE_VALUE_TYPE, param); + if (p != null) { + dout.writeByte(TcpFlag.HasNEXT); + dout.writePack(p); + } + } + } + + @ServiceHandler(RequestCmd.CONFIGURE_VALUE_TYPE_DESC) + def getConfigureValueTypeDesc(din: DataInputX, dout: DataOutputX, login: Boolean) { + val param = din.readPack().asInstanceOf[MapPack] + val objHash = param.getInt("objHash") + val p = new MapPack() + if (objHash == 0) { + val valueTypeDescMap = Configure.getInstance.getConfigureValueTypeDesc + + EnumerScala.foreach(valueTypeDescMap.entries(), (entry: StringKeyLinkedEntry[ValueTypeDesc]) => { + p.put(entry.getKey, entry.getValue.toMapValue) + }) + } + dout.writeByte(TcpFlag.HasNEXT) + dout.writePack(p) } - } } From 715f154a8bdc6fa1e9af81cc66ed3f96d1022ec3 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Sun, 26 Aug 2018 17:26:33 +0900 Subject: [PATCH 34/53] [server] Fixed that When the collector configuration is saved, if there is a telegraf metric of delta type, the data is discarded for several tens of seconds. --- .../server/http/model/CounterProtocol.java | 515 +++++++++--------- 1 file changed, 264 insertions(+), 251 deletions(-) diff --git a/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java b/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java index 6a760efc8..471e25ab3 100644 --- a/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java +++ b/scouter.server/src/main/java/scouter/server/http/model/CounterProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2015 the original author or authors. * @https://github.com/scouter-project/scouter * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,254 +28,267 @@ import java.util.Map; public class CounterProtocol extends Counter { - private static final long KEEP_FRESH_MILLIS = 15 * 1000L; - private boolean fresh = true; - private long initTimestamp = System.currentTimeMillis(); - - private List nameTags = new ArrayList(); - private List displayNameTags = new ArrayList(); - private int normalizeSec = 0; - - private DeltaType deltaType = DeltaType.NONE; - - - public CounterProtocol() {} - - public CounterProtocol(String name) { - super(name); - } - - private void setFreshFalse() { - if (System.currentTimeMillis() - initTimestamp > KEEP_FRESH_MILLIS) { - this.fresh = false; - } - } - - public void setDeltaType(DeltaType deltaType) { - this.deltaType = deltaType - ; - } - - public DeltaType getDeltaType() { - return deltaType; - } - - public void setNormalizeSec(int normalizeSec) { - if (normalizeSec < MIN_NORMALIZE_SEC) { - this.normalizeSec = 0; - } else if (normalizeSec > MAX_NORMALIZE_SEC) { - this.normalizeSec = MAX_NORMALIZE_SEC; - } else { - this.normalizeSec = normalizeSec; - } - } - - public int getNormalizeSec() { - return normalizeSec; - } - - //TODO test case - public void setName(String nameWithTag) { - char[] chars = nameWithTag.toCharArray(); - StringBuilder nameBuilder = new StringBuilder(chars.length); - StringBuilder tagBuilder = new StringBuilder(chars.length); - boolean sink = false; - for (char c : chars) { - switch (c) { - case '$': - sink = !sink; - if (!sink) { - nameBuilder.append('*'); - tagBuilder.append('*'); - } - break; - default : - if (!sink) { - nameBuilder.append(c); - } else { - tagBuilder.append(c); - } - } - } - String name = nameBuilder.toString(); - super.setName(name); - if (tagBuilder.length() > 0) { - this.nameTags = StringUtil.splitAsList(tagBuilder.toString(), '*'); - } - } - - //TODO test case - public void setDisplayName(String displayNameWithTag) { - char[] chars = displayNameWithTag.toCharArray(); - StringBuilder nameBuilder = new StringBuilder(chars.length); - StringBuilder tagBuilder = new StringBuilder(chars.length); - boolean sink = false; - for (char c : chars) { - switch (c) { - case '$': - sink = !sink; - if (!sink) { - nameBuilder.append('*'); - tagBuilder.append('*'); - } - break; - default : - if (!sink) { - nameBuilder.append(c); - } else { - tagBuilder.append(c); - } - } - } - String displayName = nameBuilder.toString(); - super.setDisplayName(displayName); - if (tagBuilder.length() > 0) { - this.displayNameTags = StringUtil.splitAsList(tagBuilder.toString(), '*'); - } - } - - public String getTaggedName(Map tagMap) { - return generateTaggedName(this.getName(), this.nameTags, tagMap); - } - - public String getTaggedDelataName(Map tagMap) { - return generateTaggedDeltaName(this.getName(), this.nameTags, tagMap); - } - - public String getTaggedDisplayName(Map tagMap) { - return generateTaggedName(this.getDisplayName(), this.displayNameTags, tagMap); - } - - public String getTaggedDelateDisplayName(Map tagMap) { - return generateTaggedDeltaName(this.getDisplayName(), this.displayNameTags, tagMap); - } - - private String generateTaggedDeltaName(String name, List tags, Map tagMap) { - return generateTaggedName(name, tags, tagMap) + "_$delta"; - } - - private String generateTaggedName(String name, List tags, Map tagMap) { - if (tags == null || tags.size() == 0) { - return name; - } - if (name.indexOf('*') < 0) { - return name; - } - StringBuilder sb = new StringBuilder(name.length()); - int tagCounter = 0; - for (char c : name.toCharArray()) { - switch (c) { - case '*': - sb.append(tagMap.get(tags.get(tagCounter++))); - break; - default : - sb.append(c); - } - } - return sb.toString(); - } - - public List toCounters(Map tagMap) { - List counters = new ArrayList(); - - if (hasNormalCounter()) { - counters.add(toNormalCounter(tagMap)); - } - - if (hasDeltaCounter()) { - counters.add(toDeltaCounter(tagMap)); - } - return counters; - } - - public Counter toNormalCounter(Map tagMap) { - if (!hasNormalCounter()) { - return null; - } - Counter normalCounter = this.clone(); - normalCounter.setName(generateTaggedName(this.getName(), this.nameTags, tagMap)); - normalCounter.setDisplayName(generateTaggedName(this.getDisplayName(), this.displayNameTags, tagMap)); - - return normalCounter; - } - - public Counter toDeltaCounter(Map tagMap) { - if (!hasDeltaCounter()) { - return null; - } - Counter deltaCounter = this.clone(); - deltaCounter.setName(generateTaggedDeltaName(this.getName(), this.nameTags, tagMap)); - deltaCounter.setDisplayName(generateTaggedDeltaName(this.getDisplayName(), this.displayNameTags, tagMap)); - deltaCounter.setUnit(deltaCounter.getUnit() + "/s"); - - return deltaCounter; - } - - public boolean hasDeltaCounter() { - return (this.getDeltaType() == DeltaType.DELTA || this.getDeltaType() == DeltaType.BOTH); - } - - public boolean hasNormalCounter() { - return (this.getDeltaType() != DeltaType.DELTA); - } - - public boolean isNewOrChangedCounter(ObjectType objectType, InfluxSingleLine line) { - boolean isNew; - isNew = checkNewOrChanged4NormalCounter(objectType, line); - - if (!isNew) { - isNew = checkNewOrChanged4DeltaCounter(objectType, line); - } - - setFreshFalse(); - return isNew; - } - - private boolean checkNewOrChanged4NormalCounter(ObjectType objectType, InfluxSingleLine line) { - if (!hasNormalCounter()) { - return false; - } - - Counter counter = objectType.getCounter(getTaggedName(line.getTags())); - if (counter == null) { - return true; - } - - String taggedDisplayName = getTaggedDisplayName(line.getTags()); - if (checkChangedDeeper(counter, taggedDisplayName)) { - return true; - } - - return false; - } - - private boolean checkNewOrChanged4DeltaCounter(ObjectType objectType, InfluxSingleLine line) { - if (!hasDeltaCounter()) { - return false; - } - - Counter counter = objectType.getCounter(getTaggedDelataName(line.getTags())); - if (counter == null) { - return true; - } - - String taggedDisplayName = getTaggedDelateDisplayName(line.getTags()); - if (checkChangedDeeper(counter, taggedDisplayName)) { - return true; - } - - return false; - } - - private boolean checkChangedDeeper(Counter counter, String taggedDisplayName) { - if (this.fresh) { //deep search - if (!taggedDisplayName.equals(counter.getDisplayName()) - || !getUnit().equals(counter.getUnit()) - || isTotal() != counter.isTotal()) - { - return true; - } - } - return false; - } + private static final long KEEP_FRESH_MILLIS = 15 * 1000L; + private boolean fresh = true; + private long initTimestamp = System.currentTimeMillis(); + + private List nameTags = new ArrayList(); + private List displayNameTags = new ArrayList(); + private int normalizeSec = 0; + + private DeltaType deltaType = DeltaType.NONE; + + + public CounterProtocol() { + } + + public CounterProtocol(String name) { + super(name); + } + + private void setFreshFalse() { + if (System.currentTimeMillis() - initTimestamp > KEEP_FRESH_MILLIS) { + this.fresh = false; + } + } + + public void setDeltaType(DeltaType deltaType) { + this.deltaType = deltaType + ; + } + + public DeltaType getDeltaType() { + return deltaType; + } + + public void setNormalizeSec(int normalizeSec) { + if (normalizeSec < MIN_NORMALIZE_SEC) { + this.normalizeSec = 0; + } else if (normalizeSec > MAX_NORMALIZE_SEC) { + this.normalizeSec = MAX_NORMALIZE_SEC; + } else { + this.normalizeSec = normalizeSec; + } + } + + public int getNormalizeSec() { + return normalizeSec; + } + + //TODO test case + public void setName(String nameWithTag) { + char[] chars = nameWithTag.toCharArray(); + StringBuilder nameBuilder = new StringBuilder(chars.length); + StringBuilder tagBuilder = new StringBuilder(chars.length); + boolean sink = false; + for (char c : chars) { + switch (c) { + case '$': + sink = !sink; + if (!sink) { + nameBuilder.append('*'); + tagBuilder.append('*'); + } + break; + default: + if (!sink) { + nameBuilder.append(c); + } else { + tagBuilder.append(c); + } + } + } + String name = nameBuilder.toString(); + super.setName(name); + if (tagBuilder.length() > 0) { + this.nameTags = StringUtil.splitAsList(tagBuilder.toString(), '*'); + } + } + + //TODO test case + public void setDisplayName(String displayNameWithTag) { + char[] chars = displayNameWithTag.toCharArray(); + StringBuilder nameBuilder = new StringBuilder(chars.length); + StringBuilder tagBuilder = new StringBuilder(chars.length); + boolean sink = false; + for (char c : chars) { + switch (c) { + case '$': + sink = !sink; + if (!sink) { + nameBuilder.append('*'); + tagBuilder.append('*'); + } + break; + default: + if (!sink) { + nameBuilder.append(c); + } else { + tagBuilder.append(c); + } + } + } + String displayName = nameBuilder.toString(); + super.setDisplayName(displayName); + if (tagBuilder.length() > 0) { + this.displayNameTags = StringUtil.splitAsList(tagBuilder.toString(), '*'); + } + } + + public String getTaggedName(Map tagMap) { + return generateTaggedName(this.getName(), this.nameTags, tagMap); + } + + public String getTaggedDelataName(Map tagMap) { + return generateTaggedDeltaName(this.getName(), this.nameTags, tagMap); + } + + public String getTaggedDisplayName(Map tagMap) { + return generateTaggedName(this.getDisplayName(), this.displayNameTags, tagMap); + } + + public String getTaggedDelateDisplayName(Map tagMap) { + return generateTaggedDeltaName(this.getDisplayName(), this.displayNameTags, tagMap); + } + + public String getDelateUnit() { + return generateDeltaUnit(this.getUnit()); + } + + private String generateTaggedDeltaName(String name, List tags, Map tagMap) { + return generateTaggedName(name, tags, tagMap) + "_$delta"; + } + + private String generateTaggedName(String name, List tags, Map tagMap) { + if (tags == null || tags.size() == 0) { + return name; + } + if (name.indexOf('*') < 0) { + return name; + } + StringBuilder sb = new StringBuilder(name.length()); + int tagCounter = 0; + for (char c : name.toCharArray()) { + switch (c) { + case '*': + sb.append(tagMap.get(tags.get(tagCounter++))); + break; + default: + sb.append(c); + } + } + return sb.toString(); + } + + private String generateDeltaUnit(String unit) { + return unit + "/s"; + } + + public List toCounters(Map tagMap) { + List counters = new ArrayList(); + + if (hasNormalCounter()) { + counters.add(toNormalCounter(tagMap)); + } + + if (hasDeltaCounter()) { + counters.add(toDeltaCounter(tagMap)); + } + return counters; + } + + public Counter toNormalCounter(Map tagMap) { + if (!hasNormalCounter()) { + return null; + } + Counter normalCounter = this.clone(); + normalCounter.setName(generateTaggedName(this.getName(), this.nameTags, tagMap)); + normalCounter.setDisplayName(generateTaggedName(this.getDisplayName(), this.displayNameTags, tagMap)); + + return normalCounter; + } + + public Counter toDeltaCounter(Map tagMap) { + if (!hasDeltaCounter()) { + return null; + } + Counter deltaCounter = this.clone(); + deltaCounter.setName(generateTaggedDeltaName(this.getName(), this.nameTags, tagMap)); + deltaCounter.setDisplayName(generateTaggedDeltaName(this.getDisplayName(), this.displayNameTags, tagMap)); + deltaCounter.setUnit(generateDeltaUnit(deltaCounter.getUnit())); + + return deltaCounter; + } + + public boolean hasDeltaCounter() { + return (this.getDeltaType() == DeltaType.DELTA || this.getDeltaType() == DeltaType.BOTH); + } + + public boolean hasNormalCounter() { + return (this.getDeltaType() != DeltaType.DELTA); + } + + public boolean isNewOrChangedCounter(ObjectType objectType, InfluxSingleLine line) { + boolean isNew; + isNew = checkNewOrChanged4NormalCounter(objectType, line); + + if (!isNew) { + isNew = checkNewOrChanged4DeltaCounter(objectType, line); + if (isNew) { + System.out.println("##### is New Delta "); + } + } else { + System.out.println("##### is New Normal counter"); + } + + setFreshFalse(); + return isNew; + } + + private boolean checkNewOrChanged4NormalCounter(ObjectType objectType, InfluxSingleLine line) { + if (!hasNormalCounter()) { + return false; + } + + Counter counter = objectType.getCounter(getTaggedName(line.getTags())); + if (counter == null) { + return true; + } + + String taggedDisplayName = getTaggedDisplayName(line.getTags()); + if (checkChangedDeeper(counter, taggedDisplayName, getUnit())) { + return true; + } + + return false; + } + + private boolean checkNewOrChanged4DeltaCounter(ObjectType objectType, InfluxSingleLine line) { + if (!hasDeltaCounter()) { + return false; + } + + Counter counter = objectType.getCounter(getTaggedDelataName(line.getTags())); + if (counter == null) { + return true; + } + + String taggedDisplayName = getTaggedDelateDisplayName(line.getTags()); + if (checkChangedDeeper(counter, taggedDisplayName, generateDeltaUnit(getUnit()))) { + return true; + } + + return false; + } + + private boolean checkChangedDeeper(Counter counter, String taggedDisplayName, String unit) { + if (this.fresh) { //deep search + if (!taggedDisplayName.equals(counter.getDisplayName()) + || !unit.equals(counter.getUnit()) + || isTotal() != counter.isTotal()) { + return true; + } + } + return false; + } } \ No newline at end of file From 8643b3a479fadfd3bb200d22f99518865fa5ee41 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Sun, 26 Aug 2018 18:07:57 +0900 Subject: [PATCH 35/53] refresh maven central badge --- README.md | 2 +- README_kr.md | 4 ++-- scouter.document/img/main/scouter-paper.png | Bin 0 -> 403653 bytes 3 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 scouter.document/img/main/scouter-paper.png diff --git a/README.md b/README.md index 4c611cfee..071de40bb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.github.scouter-project/scouter-parent/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.github.scouter-project/scouter-parent) +[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.github.scouter-project/scouter-parent/badge.svg?t=1)](https://maven-badges.herokuapp.com/maven-central/io.github.scouter-project/scouter-parent) [![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/scouter-project/scouter/issues) diff --git a/README_kr.md b/README_kr.md index 7a4dc56c6..054442af9 100644 --- a/README_kr.md +++ b/README_kr.md @@ -1,4 +1,4 @@ -[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.github.scouter-project/scouter-parent/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.github.scouter-project/scouter-parent) +[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.github.scouter-project/scouter-parent/badge.svg?t=1)](https://maven-badges.herokuapp.com/maven-central/io.github.scouter-project/scouter-parent) [![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/scouter-project/scouter/issues) @@ -64,7 +64,7 @@ ### 3rd-party UIs - **scouter paper** : [scouter-paper](https://github.com/mindplates/scouter-paper) -![scouter-pater](https://3.bp.blogspot.com/-OqQ9sxQKAXU/Wsncf-NgbAI/AAAAAAAAdn4/yhLAgU46y1YaAfantShxxlFdVKA_1xBHwCLcBGAs/s1600/scouter-pager-img.png) +![scouter-pater](./scouter.document/img/main/scouter-paper.png) ### Plugins - **Server plugin** diff --git a/scouter.document/img/main/scouter-paper.png b/scouter.document/img/main/scouter-paper.png new file mode 100644 index 0000000000000000000000000000000000000000..a34067f92114090ffd2128b56996d728a0989c39 GIT binary patch literal 403653 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

qHHWSha4(M+w% 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

?8d@u>u`DT#v^CPBzmy>;Q8AMMJ1UX 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

?wCw&*g~di=beP`n!PexXvne#X|B}b3zdO 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 Date: Sun, 26 Aug 2018 18:30:21 +0900 Subject: [PATCH 36/53] [document] update images --- README.md | 4 ++-- README_kr.md | 2 +- scouter.document/img/main/scouter-movie.gif | Bin 0 -> 946424 bytes 3 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 scouter.document/img/main/scouter-movie.gif diff --git a/README.md b/README.md index 071de40bb..628230f57 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ SCOUTER can help you. - Metrics about resources : Cpu, Memory, Network and Heap usage, Connection pools etc. ## At a glance(Click to watch the video) -[![Demo gif](https://j.gifs.com/yDqbAa.gif)](https://youtu.be/iuArTzsD7Ws) +[![Demo gif](./scouter.document/img/main/scouter-movie.gif)](https://youtu.be/iuArTzsD7Ws) ## Documents - [Document home](./scouter.document/index.md) @@ -64,7 +64,7 @@ SCOUTER can help you. ### 3rd-party UIs - **scouter paper** : [scouter-paper](https://github.com/mindplates/scouter-paper) -![scouter-pater](https://3.bp.blogspot.com/-OqQ9sxQKAXU/Wsncf-NgbAI/AAAAAAAAdn4/yhLAgU46y1YaAfantShxxlFdVKA_1xBHwCLcBGAs/s1600/scouter-pager-img.png) +![scouter-pater](./scouter.document/img/main/scouter-paper.png) ### Plugins - **Server plugin** diff --git a/README_kr.md b/README_kr.md index 054442af9..4052dcc4a 100644 --- a/README_kr.md +++ b/README_kr.md @@ -28,7 +28,7 @@ - 자원 : Cpu, Memory, Network and Heap usage, Connection pool 등. ## 소개 동영상(클릭) -[![Demo gif](https://j.gifs.com/yDqbAa.gif)](https://youtu.be/iuArTzsD7Ws) +[![Demo gif](./scouter.document/img/main/scouter-movie.gif)](https://youtu.be/iuArTzsD7Ws) ## Documents - [Document Home](./scouter.document/index_kr.md) diff --git a/scouter.document/img/main/scouter-movie.gif b/scouter.document/img/main/scouter-movie.gif new file mode 100644 index 0000000000000000000000000000000000000000..a3cad5eaa8c002102a93d19fdbb18d9026e3534e GIT binary patch literal 946424 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

YEwnIbWpK@Bj8D-e_Z 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

uFLE5iNh=6G}U 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Ⓢy2bCwJk*Fpq-ZAG-xx%mWpo#$U4_KPwsZ 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 z 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


+F8|9j5$o!@{LP~R{Dd~ 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
hq_W?~fWi90 zcs9J$;8JRus6r>q*2*eT&tf>5YApFOHneiAxN^k5@{iC36Aa1ZaQWnPrQBTQ)Hc<0 zx7GAD)y$LCf;b61aMcW~^;ACekA*N#ay5B=Dffz3!By2WZoDXP)t!E{DC6hJAHGbG z%;p5KvOKZUue)kPy_S5nDihA?R<&MzRj37|#{|SONWBSpHNSi{S4_Q;O}(Cewf$7J z9e#DqezgQkvxHc^gh5kbRJF4_vHxQs+*9xJRPQ(la!v*u?E@Wa(6I7dA6N{?w|%eZ zNYEUJRG%hahk@Jd5!jrU(_E-r>8H_L4p;wJ2n_NzM&ELIm+2Xd7v~g?W2nA{qWV%z71z-46(5;t(!a$1O^9!$RoMj z2Qi>5+Q^Ou?K{IYAx+K0Fzw&*n>~T5`exd%vBRP1;@46uWDN0ld2sQK7_fO4-Gm{&xyZ0cEFA_U^h3%PqfF&f!B~bC*`!JmqZ5X z)P_v}z20=t7t|n*mVcLNwN30`c5XpVZeew6_g(Cu!RWz7!=J*(I{zArKYmvUloj{7 z)&7>Og}w27eGk!n_KP@_r@OYhQ1H5-u<`^pOyi4g zYxj_7qmWpafyA_)ziguIo3GN+&F zfrxtNo}xfDs}PiCrJgp!K^U-s4$e_S=@1Fn*B!5cf%f4S-2*xlAERgk6Ym2Prz5i_ z<4?+;MfZWlm67#N18WE)0M;+|7)N$YK7h;yjv7YJmIlrqMy`|pZos^IFfst>gfsd4tAGMJmmq~!MQGk|7@W(>nWfBT`5M+GdS7a2H{IL+2m~5HY zT$x1w{Dlr^6mxA5uw>%UbP`o<6xU^vtY{QTaT4ip5}IL>{;?2hoFsdgWMY_Ppa05y zJF#pu$iX>tpfXFmH?rw6%2zNdkUA^!GRu)NEB^T_ebV@^7J{L(vTc);;G;aJvs%C- z>u+ZD3}%gzNA;Q}jfO|H9}Z!}Sq_s~*|kY~r%CmoNk-IJHpfwSfLZU`Sr5uZZ=p$l zf>|H+Nt3qOfYik>;!$6-QRjr&Shd+$m&HWz$No zf@X79CJWgoRZ|wLktfTEW|NS=<~1xfnvMD?ES8+j7AGzin9N)m4Ypt{3al))J1*KC zERGA!jx#P+K(5x3Ew-etw%;r+n9uSz%{(bhE~w8gHx0as&klku?!2rXC9WQ(tey!i zPCX5t4^EyVtgZ`;Ky&p#C?eze}3_waP#GDOTcBf4S5Q^ zXiZXO4}EA&hI)+wa*uUn^8I#<6LtSX`kJ!x3?%g{afU5~mnC`UC26EhHGnn2lifv< zJsYkq>&Bf2^EFP@G5dr)$I&(2);Dj3ja`rr=#uppF!2AHBS8L1VmAQ50)zkq0z*SV zKqJB+!9pV;AtGTQVWFU4VPoPFVi6G&6LBaJ@hFi|5l~XoQSmC%GLkbevHlm1;2#!& zgcg^a);~pp|BoXO6OvH-he)7g{389KpX?1QzB-R?bEaMn(?a|Aiy?&lW-GKP>{sA9>)va|HkY7D3d%SOhWuON$^O z^`9KU|4ECW>VIkx-zsKi{Sl#*CO~=jsV>1ha>1CR)Tg=AD#WL9Kq^;;0T0uuN1m9#bb;m{|iUp z_z#Yt!ybxM=|6G=!`bB-;ZvF1)~ElCBlwto`i~re=?_N$0{LP;C;TrQ!3TpIK^)<~ zaRkQyi6fZ5qi*NgONY@$Wny1&>Pd!iolvnfmtgcWS2mSiNQwh5P?DxnWhvSz?ygUa znQkjv=oYzpL;CHwTM=g=fEbH)9)dE;7Hzu=o$0@__eccS=fKZ%io`}%a? zc(RbZUDj~oz9ffI+BPnbu2r$;1wPXlJ)~n@HZV=t6Ctf5V*P!X{KH3&+0Ll zYrrLzhaZLvlLrXL34fOtff;|O4+$Hr77P8`rr6N5BadZ0h6j+m(52MAA(ABGFTJ*+ zO=0W?1b26WI2a7mEug2=S;-b<<}M?cN+)x|l%v4bJ~)wKmmvwN{JzLeM%pM51bLDY z>j_a4)c_os?k@ihy7#HOszxJK;wW)WE@LTEvr)Ym(NN>PG;h_5L%5~quAda|C|TML zc?<_erhBXx#SYs>V{P z`c04q>iQWf{6mnjGXU#ns`adeOmF$Bpq6AVtXtr{Ew5U@+kMfSiJQV!Vjb%=HDb#^ zgcB{Xxa73eD;x&I;HsMyMUs>m>Xm3tsll>&iYE7u>~~*H=+siF?$Q*5@n-$pIHXG; zo$r?fPm27$)}Xl4I(T~Y4tjZMQ z;G6EHL=p3ydQAJq@d1E|;0^0=)nfIaJ50Lx{llwP1zU)D3a^@{tL-iX8C^Cmq2??u zo;EB5H_!qPmOrZuIVlRSJGh&^FIYQ$M=055xF^Sy5)|z+wrxvt>GYDM=~guRU}c-& zQlLr{lMfZl_k$_S@8k4oPK-N^WI0Q|#>Uf_=D_f5;N?ZBT(a&*@NMj zx}vjhuNwE?86++=v(KX85wnVF{@CEM%23v=`eL$`7DV_s-#j)^xyT|$`eUyWyh0_d z1_XJR*&eJBc9HeG2Whu{ef~Z0Ml{cVoZ;Q^1JaYDQI2>EtmgYY0F#7s0wBJ1!u%@! z`?z~CJEUk#EHL!<99?skjgfx<4Lc+_by5kSg`M0@?=ZbfUBBt&0cVLG5<}=+-?N=5 z_Gf#dJjGH5tWA-x%c~O6_c3t)Gn=(%=vky89}^ETg~*>2KLezTlR*jta$hwhEfm=! zkd`x8LabC`iNJFXeS(Cz+WW{#t7(7Pu$jI_vuvik+i35Hot^tsY=Hg>-23^7 zFyGiggst(|P$?o^q_NT0uv2d`3j?AOmN8M5`}nX(e6L!4y8D0O2#Ux=+r|{mM-oe< ziYQduB>u`pqgE2lP-?D4SghXv6wam6;EPSD=hr6`BJK5wu$Sw7IRpo5T*$Q62(SqRuZz6xb{7bMr7(9?sF`<%g|U%M_dxka~!Bo z+vhK2|FtS%yDR&aU1qz25O4$hofI2HWCW1DY{?H{!B^=hADj-`b<9F6F&9Q-Wb}Gj zA{{QqSa=zdMi+O0$=Ti-|5h(`RJSOahB6)5-H?r8O)m9(HlIGdSWFKy&X7G8h_(3( z41lgq}DC(+hfq=cpr1#>XJw2A<4`2|Sf&ngxO0CxtwVmq*-4vo@>uA-v4443X&Ng1Dkldv~(yUq` z1u_JX@jg?7=i0T$b4S+NHIkgX)*eO>TyFT4sWjyv-15GB&qiK6pT3IGY)e4O$IXALIN}HcQ2X#9#w!T5#I_xEG z)lfUvz);=#9T9Ixuuz1QK{X@Jy{)}8Klaf=z*`Y;?1JDn5B!+jMo_=*;$yT9nZB)C zJ8!hFJRdqX&|}=0g{|)s0y>Xbe{2S4n+q=9wwbj_R*~Q@ht%Jnrz)H5<4Mtu#jKz1 zGNkS^FbNm=->>JYGl~u^(~s4j+=sew9jhbJdi6bb(}?c%>*(lf+_(x=ux9J*GW_m#A@+W4Z>Cmpi^5Yh$=Ix3QhOSH7Me%x0JmDWot70wOs` zX7^uzUI zg?k@%ZD}jhlRX=$i0fl`FINnAlKI}wURv0%BRm5mQN^yXY#6g*i+GFA0$u|7#GB&nIvQuD__vzy zwg%%T<)M9<$PCaym+ATFC`la-k@p|^q$hd4#j9JY{P7(mcVkeVWFi+~WAYuee}4{? zel{ep1GkAK-yMeChKKQAhGjMjKtskl(Sy~icWrx=Vgdw)6b3{V1F$;%W%CmJdo&nz z)GwpXv|E5R=Fp4Hz+ZZhV9x-5&oN|W9^XokXILPVc9wDuHFWXb<@Fl~k+IbCP!*a_ zjOjw3PZ}SNSB&iQkz-1bR5=x=`Ik2`!x5FK9eA z=-L;H`4rqv53)@Sd1e=~Mi1_tFPL0Nr|y@e$Q~};Er10X;0zi7Bwf^^T9h4Ih*zHU zZ3Fr|0ov5Fm(QvkDO$khf%g^~?{R80+&*3eng3p@bQ~LQaV%tIs;7nm$x}*1+cQqn zk%XNAU;B$r*#kQ@y-M!v@6MBONOrpcItcezFiK*n-CwXRsn8uO*yY6FU}=c!wNSOc zpsba`*wqv!MzwJ9LXgk^DB9ww*5awk{6yj1u|v_;4H2hU6IQ;76C6cd+fib~0%Ac! zU@BG>Hsl2xK@(+KW8aTt=z{MQ;yvdgQD>8M&f@jX;vL9% zELD?DUZYII#79cJIL8vc@dE=wJc-a#oYYfX%wYx(MV?avQNv)})>672#V1bzFw|1f zO96t@Qp3e*m;kM}2U26nLu1xbYJrtwGn&nT+t)HW!!q=0Gg{dH!4ae)$a5HEj)Y}` z&qZzxde5R~Wjwpji)R&-1m34))up&b`v2gmHi-=)&);T5oU5`2ZQ=Q2zK>|mWyOg^ z&-SlntYXLa%t&+YOX|6xkXiG&S&$rmUYN0+4Px^N zVBF|*v&4ifLGnQULW%wCS^qL#FB!)F0)Ji7B`oK-Jjo_Y|MSL_%H*E5ltKt5f#$uR z!-P@r1(7xtgjQh6&9Ytq8lDB!p6h->R&fCOikv_9K&Hi(SM4k!nh!gBpsoN(#tOt# ze@Eg^m)F9aN1+&$a~hVO65E`TZzN$;pXT=9&YRd40&L;Ia9;4KUI0SDOS9^}%_=;< zmL^~54M9=pO7usIES#yCk%CE&eb~1GjEg5&SKxcK^shX*6o+6rbD70*o^g483ZyO2 z9_sK9eB4sP^HyxbQ4XqMo$Fc>c2JhLUc50n zy5g&8PBZxyJtUEVPMg8PyrxO(>|78Xx5 z5H%D|ay9#h@XCXJpmb9ft=Uwa+R8Q38aU5tTa1zw^4gjaacY2n=LpusYco0O1Y@be zI`ICQup;<_3VrKQm4%mMzt=9UfFNFgkoY!Cx1k@k*G+5G5M!1SR@DD+1Tyc9avL60 z9YD?ISz>njgko~ZEnc{OJR+Xu&LeI)kj=W7<#Q7C5*an)s|?kuC{~ugk}{whZ307 z%XPR=C@kOGdNDiK%bbbYb$?nD{RrxdJ&UP33g{%9%fq$Z$6FQu*1v(e(ucL8b2c|l zwCj7+SAP4|Bue^fu!_ElY4!hb1eo>5NNt`Sojw=ENAn0~=hf$}1Vs{E_nhA7fUE+T zxeH^JTkoyA6`dEJz2KR>kRI*A?;w`$wM-f9(G@*^JsaqKfstJ6zM*&lxq89gx&fhz zGWI<_`+egnDU6`a`Wo zW4}2)y)S%6$66)iTH`PKY9u|Z2uF}QM?*eJJf-^gHv-*9f8%&zwLh9i4iy8sD}O?7wV>e7AG+nwaaX=In*9hnm^In^Eu#_btrpBy75hok7$d zeZTCV`WU_4EMHXj0_&r=$)rxnoKE$c`lc8}42SGaA%*9jqpIpf-WqLK>qM=pZ2VrU z&bRRXommaYH493~$&Ed0uQi~Jmsp~;n3d_8eJL2ZIWN`KO}jNC5XBpcG?1J!x#B;< zoF5%VxPXi~_NhLL{#o9ff&1h!BkjGM^S+p&!Gm^H4tpPY{KAd*!u&+CvTQjbl^9Cg zPbsNa-5@!of8|aDQ|fjxd`w!k6Sf?_)n>t6Js7qWa|Wa*xU}a;xahK`hHVcpzEprZ z@0T?aN{v&WG9~mm6=b~}k+m+fu?oVuK)|126;5+XwOIX*mf7X)`?+RHw_2dR-t{@Q z2~Q?jIxktZK0MV}>AgX~ohi#wFu~pHwAtHEy=pPBQQS2<>c&O+!x3;Vmw$IIJ5J8A zXmzbIY&3o5j9b?pV=q>Jf^=Ii(g}@vL2u?maBXaDy-?Q<-fl&AWuAX5M>@Mxi!mdO z6uYP6(`izzD@>XyPApJ+EPr|oHH^7N;NDJkzh>?I%GlhqDhR(wMVjw9xZhKu-rseY z&HCgJ<#+T5CAkxXEPD3If{zt;lX*~z-f2f| z`#30SPh9wCY5DYVB-KgHW-SHm z{5jhKZg;fK!z4M~1a=hx&sDwB(@gr4e=p8uvJg+ZMa3vjwo3M5Uf20F>^SfBd13lM z3ipcr)mo#sH7$od>3wzI*_^x1$x`J+`@@6+=lRsvWkvO=baZg2TC(OlE+2QL7!IKj z4)De2?hfa&Qub+Z^>yg<^@C2|+qFB_))EqwH$KBL_tZ4K6xzbcp?&%+>0ZR}^^&_0!0gU;r zg~UcP?VXr;JpGn+m-sse@7PzwH#0k`YiKN2v%t&yJU7H{`1ED&7pD!S9t7IeJP@*L zyp(r={C5)-h7rGt42Z&cdd4ysG(kY`g=3Bgzo+gZ_Fp8mpN<=tEcX*|9)WbNMW+GXJLi z(f*Zn1DJIY5OE(I0m_tJgQdQFbp0xl^Fs5rTAnjq7iIa^$6!FFq+Qop+U_#3_$guD z(}wmPo#vK=c1b43oDF+vilebd_VO9l$p-ZjWH@E)&{*U<|EZgg+<)?XG-fB)b}m+X zAv6i?>>-rEr-ABb_fQQ~N*8!G|9;N%TY%M_p|#?NBiJc~ITW!&@A858{bsRZt6nVL z1WTbcEWP*NIfAhuOfWz_^+OP7I@9jNH1dWB>2!AIpW-^!a7V-jJI8(?VYg$Mc9_3zd;ZEnU-)9x#64ksQUK-ZSk zOU|yh>v{gE=6I#D@Px8h;@J;B9Kliz?a$%$bdEj@mlj5l8Lo3?3U501G1d@&7#se9K%>Zas=B^iBhyNHR6I5FhCJfAVngTQ?QyikSvHn)zi(!#2 zvr8&Yn82QiC=|O2@pj!(zt|+jz^gGt&T{Xo>Cvd zAk(R?Zw-W-9y}vR6ZQa^Y;*Ya+(vGI&A4GfhcLT& zX_5Sldc4Q>_p3!EW5COTwf_Ab+ez*hh6Nfd)Ai|hEQ+Uf*@7V3LKt3!(|YAaGbV8b zG3ff)mkZ&%ZBmSL;sIa@mgKhWf{%xF(~=D)cPi^SP~D3XtApi)w-Aa zF{!7l%$7WhH@RS0%x9nQNOSmR5k%M0Qo4n$oL#pj>vwUdC#~Y=%j%TBX%mjAl6^ex!4$z?d>TaP3k)$e`<>qlr04`rqu}#d0CA1$rw~Zr!I- zwe|u7xHioMLXE^z!6^`65KALbim7FEqqUp;E^fk>OEacC!29rVWX(mNHKL*)2JrR` zLK7b{4v7iCWRSmksfO#MxdXSy#@$30fx+wt`(n_Wo=0BMBE5Stjot~4v&3Jaq8*Hg zB2H5&X6N8zS|?VCcteNBOYaCsFTqGD=f&ijPvblr3W%s7#OB9t6Hf++B<$Q6Wr7uw zV?A+*TyF&xUE;jj5_O338YLK;?}^d_kEo*3vgJh-Qhc;XXuD#^iBRyvdOu?5r00d6 zzlG%$l`c2w=v<}jEUJ>r0rVKN+^0{K<6{<$mRO2a8kk+`qi!1w*r3d3Vu>0;Cl61^ z^VUkt>lp)YoN|bK{Av}Q#<|7@Nbxb#XY45ybB{A)I4b5x!U(3)iSbPYzUIYexRnZz z!cH?8-iBblLLy1I3HdjEPs9y7dE4z1NSdMzgeNaVxNe?G!KgRcjw_WSP?FPFxA!KN z-+eE8R5`<7Fd7nF#eF7(H!H#lNhwBGRd#ku{%*z`{^`m{72~$IR zbWUh1S3e$VV7s<2{lbAIMQVq^>kFSwMqJAKc!|Ky9ghQ}F+z|(oHk%ZUTM=|{;oh8 zx)44X;@_~Ush7eoM#p(yko|-;C62Tb43l3}08Fkg-?}iC4gk)mbgD3N9>v^+TsKHY zsVFtRvhaK-T|u;O=-`APzWfzg>XPV4IA0|tE2-G=rP5w8bjC68CcNH_4?oLB$&Ih6 zJjx;)F~vRR_DCYX^Tym&cA$q7axwjs%8$?zw4g!C7#2X>7;cVu1BJq`Gs&f@IhS?q zF{i#2(Y->HJxk-w7_a7TQ;ru_XK{?d_X`Z@rD(S4$eG(pZw_Q76p}_9Pbzay+GEAk zdyUro$^{g5RbYT-|0?8e9II$sc|^0{%t_%0M8v0gDv#xN7;@x91M$%&fOdL^PcxzL-gId%djLK%-}K z?Jp*mwOXpjVpxWd5y|cDa8PjjY*eD7c3VVnEc#?ys9~1`I2o2=BAdo0SPi z15;vGbP1v$hM$SmCQA?CedxrOj}S7h0V4ZxZ#*^v%k$o8TkwSqH2E-8P1X% zQF`bQ0SbN-nGKk}r<@D5koK&N81t;{G#eqDwP{R9rfh{|gl{uog^0J+Pp02FvC&l8 zl53E2wDpygR7ctD4|hK_vB%tjo0A%;x4r9jfz!~Z%Mi0Oj6gsmVSaBD2sIhEt;*H3S>#j@LQ^FMNtx4XM14Px!kf^fH8!+k<$IUBYnatlD zQtvZCxVO0+oX4z@l?AS-qugLFYRq3w@?W`5LdW2xeU={lek~Vu#A1j z{rS#Ea^BZ)6F<&+ygv?hz9=!VzEz(-mI;IW(R=9e`TACgSZ~|LU#Y${dax~e5+$n| z6Ix>La1%UuFWx&+H|SxdlEu`Mhxke*@u7!)(Z-wyR9O;QEAWD4;(`OCLuB@ro)_gofX?jK-z4XW8_kWw{2UEv^T)|gC03{&|vXM?^ zYODe=*k|uyrbmW_JKlA=;6q-YCFQAcuk#HuLl59)rV!`x1ITw3%OL_G2obRZ{9YAG z9uO+|l~%A?5nUEyf|#6NN-abAccnWDZ%U$nfr}OHJaEKF>60!#6AEmBpR0(AAl5> z)+dtal>;A$KFA5~Z-#EyIoj^d|EFT?!@LHSfC~nTti_%s=7lH?iT00FChQ_Hb7w*9 zns`Qer&mX3D)e}TAD@k&M1WwvzvMvvULWk@Se21POfPFW0o5*mMCm40nNkLCDp!>O z1{r%I?JxFGD3TNcW*zv(5~_(zcFCqo(&9dx{LHEyOsa_rFyKsKGQ{7YP7<9)srFnz zxK#exqdg-?Ib(_4VjYu*1Cu8U2vJ-VHP8%C0B8W66GKLmd0423Vu(vpQ$Hh*zfGTA zY;BP$Q;M$hZIXFlV16(i6*vXz)))Ha*EjTw^gfl$F48m}877k4ILzTV_66EoYtlyM z1lIag8rM__H~>7^^p%v~9@6ynr3{7K^sC+U&kSBi8hQ{S*!*CO&F>&-oGu-dxlQ!F zg_ikP^hFq*fmicKho6REn!#$2?!6SxHKar?q#a6}k*BA%T20ohoOwT#{rW5W3z-qR zovdoI^r@2e=`K;1ESuGUAC!5D_YeZ2XchuSmJpA$PJ$CadB*pg68%!*{DU1~as-r0 z9yxyo8Ds|cYUW$Y4~=^M7)uUadj{1a*Bc3`Uei3h*<21@n%cxH z(c>iM6sdQ_yyY5Oe>^C-@Eqlm>^Cw902J|jw%mM%#LQ}VFNSt2-4p}ElqBw!EQ|KS zr>s^TPpAi3cT z;smHqZyFdTv(C{n=;N}Q@iM08vYsEdP}IbxdAS^Tuxl%b#Xw6A6PFuI(y$cb*I&gT zWfc!@1^oS=*fRf_)MAkFo}fp@65MYU$9LZKeWwr9UB^Ke6vd zYnCP{8W8D=DDz8R4)ID2a!d76n06LB4_ZhJyc(IbX26pA4RA7k)kaSd5p9)Xt@C^V zu~hw%^q?~)kDS~Ph#bXZdKWdJCO52kmdet3nN4q?Cj64QxzZ#5#$*sy)BOM~W={3$ z8lJQNAIPncsLiz2qVKV(5+7sjn0z*whS62+gn%WP<0sbxSV!2C=Gq_9ID_E)vSK6M^Yr98Sm&DsL9tA1T6syQP zQ+l;S91GJ+zjCmv=d6*5eRX!~b&^uW-j@`=vM`W3cX*0^oh->vx@p03rQfB=XK<-5 zE&=ybYY|VjfOWGr`2S#DVPG%*U&&Z6L~POpQ>k?z95oP~4dTI^rR#2 z+IOIVbVqY*xsMI)^T~1a=#@*4E~`T9<$$Qaq?P-ArH1a<^wEmY6k+=rjW%UL_^Ct% zPLRLsXGxC3;Eb9vZS;kTa#DdeP~#tAOj*EgS_d8Ja}?Gl8q-AwntG%}EJe%9$=v>x zCHLYa=!Vc|VQ}Wh?2ZMlECuqm$@G?4BjJPM!t3;HhV+$*_$H|IgJm_nALscys|tK# zS1c@`SN%=Sg5Y=!nco}44h;nPx!HYSn`+UT}49;B47g@_s;iyMtc@`WPk!H~|ON92Lu z_R{yb4?_ENSQiR^`FfHGO@(mm=zs`&*;*`cqoK-Wgoq4}MwpeYAMIP$m4aYu0gg?_ zgrVl_9LT3tI5=Qsb};<%b~w$YBWMJinzi#+SggzzQJUG4iJnJx*kN3-$X87tn%RdA zFb$evpxyzn5%kyBNty{%GAKwo-I&I1bMqNcjT=_>@F63JU9h2{|Ao*fXnrs8M#N{k zty410iin7D1vg*QE%A+v!Jda15D`k#Guu^7H>0$d?Yja<%yw>$oPWbp1WzpBhfk2qDAToU#%wb;{28r>$tQqte;L&RK>j!opCB-} z3{(PxY~on4mIe;$(f_@>Z|uDXZh@fdF>iso8^F9Fak;BC4t=z782QNP3%dUUswQwf zEDnzEkP+fOYRSLrknQAf(U8k71Rk=yi(<`emsmV7Oo??D=BqT8CHHhp zM;m`xya&n<>tyuEKdu8f;BL7i&%(EEM+j~Pf1pR4fFg>aNJN8B#a`p+C%r@iP+u() z$nUhD-+I-LNzm>9nC!O)kOoW8U;08df7wO{y{RoHFLXaCs+n_4d(=%{0kS%b!`n5; z!grBQHio=g(L85^Ih4P}2i$>-IsqNggMQ{at*{QIQaaGkYs#!(pJpC^D?-$hh+{-hnd?6zK~Yfk78=Cld%l^ikF7p9T%}`Sfb~ZFY;-9|(!c zV0C(nKNyNgs!(Zmw_hJL9}2KqTdG1Ci^rH1e^?}zfX}1U9w%gXP)I^!*@kcMU|1J5 zVL?q1U?h>H)5WlK*gphQuFKSsDJ}sCCu21sweF?g5LuwX;r+-p5Hy06M%#8h*4O~I zDpneLZ)Ul4Dy3U;n>i+dT%?Ka-qqZ7&Pb(K;1AGaW%@#A;1-_tJ!Zj0OV2u>0Y;Oc zg@E1?kYQEF8$5TuM++v7!zi0N`kQhArG&;7!B+uILz z0^7}b8NJKxl;af#*z#~nqM~|~=Pwv?SzdA(YqJk*)4ip-AW~)Qw)%70hyWxmU+sFl zO7u@`e{krVeS3bmx%sothGE_qX%6u6sHwBmm84rh~xp5?-FkZ z=@E+P?>=Rc=RX-|hUHN=+Oka-U1g?jgh?ETZp?wLwDyPnyp=Ep1%Wx5BnppdJ#rPP z6)PO^=~y%VH;4Itg0w?xe4-9HMCQ+bOmgC&&d$+&LtPA$Z$g0*uLW5W?@1>^AMW;7 zlFW|}R2lj^V0E~RLIgLAL=B5EtP~_jj#4BRa(S{mpS$CeWc4R>;sWpd`Xreojr4`0 zC+`IEI8fy$8F5RGboI=lbdPdj>wWe^Ur`>6v!p147mC6r0UJ84ip0@b zMyk3Y49w#?+U*oMgDluWik}x`&MLmc%JK5->focKnhuwDO6$$=i>uZ>f2iU3&g72j z_Di3Q>W;g9%A2;o$&wU*9@wD}q8H!ZYcd88iH7M`Jk}|4{HHvFF%LPcZU*3Ke>8l^ z6;ApgbV)ChKTg;0ay`Eyxaxh<$?8NH+tfHIcySjLzcu=ydob&UnKv%!aywN_$%a|q zsUBFq$_yvF3rUhm$HXbA)9I(tB2S3oIwNcS*lP+EprJIdXs5I@-WxiCShSSK0xe@SG49%Z zw>s&1*O6sYZ>kGFRbrfGhBE`7A6dOFKg%ZaXTt3m?2qF7^sBU#h^+rGAO-Ha+{BPM-FF4@U_@W@i`kQa$hL{k`{z?)c%ofyMysoLJ+V^?P~umtE)8 zW4@YXTQfmlK*`JQ&)!|w>3%H921`&ie}u#}N<6)t~qCZ71&7$U3$ z6%yuA0fq&o3r1<6ME1U5aqB>&k9G1;=0pOHc>VT>4J9`6o)qUIDD%T%N=LD2I-Chq zDe*$Iibp=yUkXXo1yD2(?zCY@mKcYlAa`ikX`tS}>EWA0c?@pj8===fYWG5& z%NX-5&rF`t!c&E@!r`$Z=0tYdL`A3V)Fw59Y0O)Px&FczS`Zlsc8v(&6^CH9b&yLq zo=0TeBmMpbv*ioOmK%V`%p}cuOk=!Gfir2F;B7{ZKs+ZYB_PMMHz-F!(-x9E*vJY) zRDzj1uS}DfP-uc=4!ZQn6IL9rr2S354qM>bBZw~HipP!7kbU360kN2Bjkq71tGw8! zVFaUp2t?G_3e0mE7f}Go$8tlC=HeetZoK6WcC{vH-T${pFH(xC-$SJdvaU)mX-z#w zK_j;-(x3cw@B;%yG2!&LRYwFk$#5=&3R6HT5OS9K3qpLnSe$Plw@o?V;X*HdGbY%= zZ$JzU8QXDl@@Tu$b%8ZGYlg`xvyN+XcVbcYG~ni7^#LQ*4Q(A4Vfb#XLk$ZAO^<1~ z=<V9G`IfHQ(p| ztq(i*6HXRnOSSm$!A%m(@bL9z=!Sg{2SGG@a4~4c5o*vhy#OjRS?>JVR=3&!bo;A?!`LD zSymy;GZq=m*einuZi?R<;{1`$4~$7aH6YEA+s7{^;%nF;424o>c2ouo z`>iI<<6UtN?aaZtt^=I8-&;iqmPn4tYo03r0)aJ;be&uG?iK-t=d@dCT$Oq$+L63EIfHd(7ys%Al6-GAtULhkMd20fea9FeCg zA&Jw+jY06^#g+l~)&a!zO(n$1JhetVc;kUrPwzF#AOPd7?5dkWN1gZqLwNg3)^0=A z?|vo;zJ-48fHZF-P|K9>;ej3NA=l@?tJ&eK8383Pqe>h z`jPyCrb>#a+}V~jQ6)iVv_U>U0ka)Hg{F7d3OgmYPpCm~WJdtNKM}LE&%bA|QI%!z zs6`teH6Vpgm%Wo`WN3{IH#3?CSE~{43p0HhOPgi5a0jF_rMb$k;T45{!*;-El8v*A zN&Ztu&^e}y`lzd`7h@4Ax&~ax2Wu1nU&wzw)9ls9Dzk5mRLIY9DELJf$aF~Bn3;|EACAMf)|R7J1$*mo-dwEB#~_-QBEY;Tqs#hB;J20sj<-0fMXDtCZwPiU8J-N)AdLSdWIx(M%ZJw zR@_-6ZG1R+m!NJHC+&@c#xay)jg7R{KkK_43`xc>EkO(~$ciLL89AWsk|WDaW)v;W zms|p&_Jf#&Si6n#c9ZNko?7H$$a_dCpO&sU@$qhxAq0YX_=LC(Pgn(K-6($ts{_wZ z%x(qkuluALD~+leHYbM&lu~mkTdJ?8lpPt5g1q$xPk!Y7i3{xXgv2yve@(_EAXPls_n3}?+Y zjn0p@aWZ9Lp(tbkSLi4GWF{*;pWQZ3j8>9JSx45?7%VEB+4d{X{wnEaD;oh`H920T zHJbI801et78Spz&B~eWGIWHVMzl0y4jWx@>Hhi};#2z+jpn%O+GkGIE6E?~>Z8jpE z*F%!HKxM12u%T=@Mz{iBY8o$S-iP$i(wDEMR17DC<*>js-*Ox_5>o%(ks3ejnx^cY zH|a(+?YXAx1+DD8uMn3AZnmN*AhEkB9`gz1veNfGU zR?W_j&!SK(hmZXwu9_#XR$;iB=c!si#93sqUepkjp&MW}qF#m#m@c+rwK`h#v0jX( zUQ?)Ajjzfbj-0E$SO=BZXs6x;m0X*q-de8O+NQp)4dA-`iS%7<+W>8cTeGB=Ee2cf z;?V44RIYbZAJkiKB3>Q*57zE6II}QZ7j$gfwr$(CZM$PT>DYGCvE8w4+qTo+$=*|^ zX3wrOb!Mv0^LzbVRqtB$KKFHV+$en59%$4a8#wHI)SQ$JOm0BI%LA;mP;T~=^U1E# zU)Rx2$`}ql?2dS9k2)EySR7A>(*WBUNLUiuWC>JCEQM=QHmpt3Zpz) zB`kHXM#>bx3#0A%J3cKi!Yeaci#S}}Fam7qlxJ$cA();(YEM3DsOBK|DTd3>&_DW^`t1x*}(n#mw6?;r^2!2_Hwq6Z}+2Tda#!9?-b78uNqM0^s0Tlhx6 zLY&|{Z=d!Z0Xs|(hxJEQlHW7+Z~!JVq8KE?>F6g^Btqu34M05tBQq*zgR>AWjHL6+ z_a8J&I%L*sG|dJK$9uk^2p)?DS(SB{;WLMp6R$XONQ+!eoWL3v~R>pi**JW4GWY_d`*T`-L_IlR*&8}U?#!Tz3 zR^Fmh=dRk+qNe$zi`uM3>aM-oqCeZBLFle^$gZ*5V(8;0YwM;v*{nP2W{m2gx9Dzk z`fNzaZaC>~D(S&~*R#Q#e8E; z<_t9C3fJYbU3?D4We>G&Q@-_d4&gHUlLu+ z6@JKNRqkPd*dDXk9vRSX2+FNF`zG-R<1O0LGXj%4)KMsQmJ^IEFe$)`2J(MH2Q>dL z=m2ay?EjzxNPgS^!vD(+pr#|GrDyzc0~lDTSlBrJryIb+CZfiz%l98{fS}0#?FRhB z^hCtOB)G&RrT)LV0Xn)rZh)4)nXajhuBo-2hPIx*o}SJBiyNSzW~QfSW?*J!s%K_q zZuZ~x082YtGdp{GJO7gZUwVK~OuVm|l&^)Eubqysv$L;@nXk8xufMOaf2eP8uy4qJ z>H+aNp$=Z5{(+&vC7~gqp<%J1S=~{w#Zmt!>437FlIEPMrJVm`bU=M`Q+adCaC3KA z$MkO3K!101N_S^TcV~BZZ+G`lZTIj@_vCE%;!02N@ZZAn{?z>b^78(P!NJMKA@A6s z+UB938JQYdJRe&6uWms9)YSC<(+wD0T-jROTv*)PS!(;cG_$g_P`$L2vGg;WLrVvH zOBYvby#re-S6ds^TR(F!v~_j0_4u_tIkmk$yuCBJv$D3keY-b2wtu*Acyx4la&@#* zaQc5ID zp$_MvJ$Cos>43BULI(^R{O{-hw*N{84F4w`u=T&91HR`z{yQB23xx)BWCBZw7YDQh z6<#k!D4u{toatpIH5xO?6;9>Scs!X3i^*2mL1sQ&#YTVwH`bO4zaPlxJm;)GQr6!B~7@d!*pps~pBTeAgVP`G9xawpwdRXob~ zsi0-YDKpYsr3NODC|hd};bVu_;mjzxqy!ac4|fHX7^d$)5D0?T-1!I=hf?uLktn?f zXdcgH)HwP~I%zrD-M2*<#`3;aNP^KfS2@BMlg`N87^L)_tOnxD6C8)o#7zZY2tdN2 zFglh}A82CXm=QE?Nxdy3rCVPC7$Vf4ViEXOprQus{=WT2j*p8=BN%}gkY>gzA^IR9 z9UuEv8o4g}n7(kI;ttr_Ky5Ls=qCyT(HV3`8)1-4Le6@9XlXa0%6o9m*tfm>bSu0_ za#Gp-#yr=EsJ=zWTOrs4O+9xv*DnEYH3pH|q=W5j?*%3UoYUl+SAYg3* z3lUKCCz>mWzy9#8D-8a;4&e(Pf9y6oOwj1t=QW;MVFjjYUd(KKVs1>ydH}MHiVqM5 zw|mvUo}1?cmd2Not(rKOsC!K^k4N=hUYBT%K8)41(P1?SDQuN=2ni?t9pEbor7tfO z|MG7!ssR zbq}?AGxE4OE&@D)(t%FZh3E$&Y>-eyzWte`NMFc*=ztOu%<(Y^hKHz#UnRupTv8-> z3;t(*YC?M;3DXX31kPBS z+knO{{SVv;rTjV?w?jzA7+M)i`na6NjU;Ly92{mElRPPdaZ*B#2}fJyw1dh+Hr9PM zVZ+$4OI9+^$kLk2&9XSp0yF+4Svl{a^oT1)RPO6lG5(`9K=D^=6J14nR^ZrND6tT+ z-%?62MyrxMMnWJ2s7jGokMw-B&QsCak#73g`|Mr!U@?zqbif!W>Tc{)u{D^fGL4k% zzc;&*na6Sg^NIPJxur6$9&7o}@x|P##d3hJ4x6)42rgDLkyfOLis_LOj1m#l($UF# zpY(E-&U2N@_sLyC$_%@K31vB69`z}Q z<&07^geNj&_O-Z)=22MNv9k}A;vA5=`kG{2M69L)K#RjK30*NK1KZ8TJPfabI8&=c z>#Bojlm>tD8|FmYvSO;&_USMOmpI<-VU*>DrO;}TbSCZcnZ8Esjw_2%*`0?h%;=25YqO)Y)UL)JS~%Q}N>E9u=bJz(9{%3g*|Iyloa&{!DYZ z{$Xvv$GXsUOLMvWwckP0#{3LNYtZy{HxjP)#)WW%xS6zNDb@0gE=SX9&5e^tcK&ww zYwIb#<1gFKo!eT^URN7?zfD}}L4pclrE8*|%uQ{SV5Kg`iMcRY98$P_@E%Hq`)J** zU98d9URDN2)iy?E6)dh!&jb)BYp8u(fKBtD=8Vg~Z>K}Nzi)p(>0RRnzc!fv{+ijn zb`~c^+rD!6HOKwQkiGhK#-rG|kl6c_`}lK^;5V5tR6Z2y_C#w@@+>;{x|e%?UmEOI z&cCleN_}*b>}{V6t}>j@vbX_bK+H#>d?T@2PnKdWphE=$#@PeLasp<017@KDVUr3uH0Kyyu%gZYdldC* zMJ2U3_1-^`f@2Onfed|152Y*&=uUw7UJd+xh>!;&^JEk_%7&=LMN=n6z^oRS7i?5m zLhwOOfbbTGM8M_9=2(Su~RFeM{msEEUrUEOlbOsLS!C3 z=H=``Mg52bZy$-<+mEo50OtbbNB*D4fR+~e%nvf)g!t7Laan?2X@VAb6wH7GLR1hR znE@2{7Ek{cSsdZ9S|VUk?9WBwkd@(n$LVyr2)dK>+nhDwRKi7KOsx{i8M)Bs#TZ5b zN~8x;^&c_fTpN$HhY_d+&2@nYmNu>+7~e#4I7(#rc%=P+k!J87*W|I@f>hjCLJ%%B zYylBeK|(|)5NthQPechT@er9d80|OHSg;6pO1xBx*gJ60sTk$~QY4slDP~l4d35w@ z2wHyv4k-e_A{Lb!9cf+ikE*DCM>4r|k{P$XHMrwuU=X9WU(YGQ!5N&-T40xFd=%Di ziC^hn)=@=m=|Y|kzSdr<*6L~F0}fgJRo=7ev9poNHG@mTzsQr&(>)6* zJZZ5#FQ2o!*3JBmvs1NmM&2_f_L6I&#N>>?XRIM+v2%@`z?PtMSKh(r&S{K^P&TZ6 zHrH)-pmFvA)Om(Xq}j>=XPJ2y9eE9$V$g4SBk8`sUBz*KWn`VoJ+Fs;SZeWArY3Qw zwQDB=!xYS%N>99lM9=%xo)d3tW9_~dSOFEH@Dw7;6k_NUqEy+`jOXEP6cTj8-(eTQ zXqgdZ7!qaj%nR|h08s%`1=>->Qo``}1{!9NI47d8y@2b{!?2Z@7rCm0gW;5rW~PpN z7O1vy6kvfqwUuC96k>Y&$a@D+X>vkGi`}1=XkC=d6BX%AV4OM^dn^}qSZOpT7rQLW z)SOe?>LJfn)Rxp*#Nby<`L5YF}ht5IPO8SXxlt*&INmL1*iEvUL6oh+MXycSd zXXOP0Ec470To8d1BKu1SXtGl_ymdE9!;%7@v6JhCgJHddZiLN>aKgkTs@_XQ8PRop z0!7PVe4CESL23T9Sj7KW(Yw^*NzRo~(G}erg|hG78Bc$@WU5DCN;7eUN`nG(Co+ao zO=oaw7I zZgJ9@ZTh}8Ddq~h`f@ZTXRZPfkC${Y8t&4IzAFRVxStVhCaK;dmb z(`|sUt!q4}ARkp*A20zwhd5#-#%mOSl=azC=L{(X0T<3Xjsn@EsRvhX+|sGV;PuS| zEY-7TH}Q1+Xr4_1w7yup-~q~o$rm7aOrc3x%~uf+><1u4Ys4%*6%~~NscVgB&OS0Y zEr&F$Je!q*pDjkXttPy!!o1B*oQ(jk`l!}c;{4jk27^D9 zT~1B+nUV(4O{Tm*0zlhSlrJ4~*fVyKIV@I-WQBoIebQ##X-9>pZ3mW2DHL#%CvTHa zXA@aT|AReX9|*k)(#WLw=wmBE-W`$YSiQ$bn`cJ620C{IU!XGMEw z7yd*GcUPNUm1s~=jFF87UzTRwXZIX#k${C!&t7TBK^ts#&bn#qd*^TUdVLtcF9?sz zjty_@O%nHDskYy;z3H~K-jnsG7kU*>`Cr-u^FDvyY@1x(1#N}9TWxFhH-L{dOP@oU zNxSM&FZfCRw5|kmKwVVSo_2xqb_~SS7sT|uXZPcD_us9z*PJxV-GS0wf{l|@zH0U3 z@wN~xG*TP2z&G?#O%?w8?9DCu3l8-Q85R?7>MvjSpn#nykX~{P$W)iK zT_f1M2@GC6AghI0uKGr|VdOKcT#3yVyt$+^kP8FXsJhd@&dgM9q|SB3cnY?@VdPPL zq;+V-DR#sKZ`Ar~#NBtaDRk5?ZPXEO)MINj&~C&UBR|mlPpo%~YW0vT0M92&H$Y{o zHyUsJX|(hDu8l{|*ATebyGYbqgvx+tP_VnQkZ=iu1v>l^J((OlHzocf9LsYA$v%BX$D& zvi-c09{I!HN;b><(JJW&03+!I#U7}Ootn_AFXL;_-0Gjfo4%=@Wapdi?VjLQidxHQ z#YM?Vm7OBlGH2+Tb>!_mz>)36UHpeIUmu-dqy@deJ87sOKD4jEZp2dgpdi?sdPzcO9CGKVSONbvCL>2g=@b~pV><=18lAl<*?&s2hbTf=w9wBE!r z?gHUiQAf>o(bW#-N(2;zwc?Zawo5M(J zjgtNC5g}E6`@qlwke-}Lx+{fVv$TAR-}sv(@#ETh2N^X73-(7>dcM8z8^IYNh7>cB zZ|3$*c@l8P1bIV)bn6aEbCfrWVl$_+Zx~H~52c|oxsq((&|JHYM>j3mkSaBrvfb`>PzF}7eUowZ&yoH!I6qf7j z(=-M`gqht@o!|bPTY1c9V8IFdu^yZti~Eap7{Rk;Jr^>Q7okTNH9Hqi?4$e`vFrOP zb3F^YL}F-KqHBKVeZ8ld{v6w#VAK^1BY7nUdII*})3x@8_#%fjen=V&)nE~JYX)A) zJbcw;HmJ#$6#hq01Xo7{XWKOsK(>7$IvcNW7qdHkJ2(O-QCG;m8zA~;x<1QkaLs!L zM@I-(Cjz@SGxT_KvnmGrF0dPK{83-iC*-)N8Mqx*b7xK4>rhxH0Ecs6#%6k;`?RWE zBF41(vJK_Ql#C$Jm8k*20|WX6d%8oeSk3zzY;v z__w0wT)=e??QCrgBW#k$wILUk%quvQe@}vEF0IHt5!rN+4hjdHRpOqPieE>(AJ6#` zyqFSfoBi$iWmsQ$_B8&m!b#vz`nF+jkZ0|4d|Wf8TDO=Ee{voBCMEFlF!kn$ z<}w{E``$v#*dP?0PRX$1_!}T~x(tg{t_06_GF$N1;2MF!Y;A5|G!mIyp+sx`;6LdA zw#aK^Hgj;GShj_tVeAwG6@TF3#!}e~20x%o>k?Vy91h2q3Tbo8SbQOMB;X6PAh zH~Ku6*B2$y59;6A!rox$W$6rTSQBbN^^?xXt~&? zZ04mh_5)JLAu=%VlvR0C(M#|Eo2`y{y6cV4%hk~9P{aVqoOZ7E!PI9R1}`o8GsjP6 zH7P~?y&lLW+LN8_PtQASehvg~7NDf*B-+coSZ!9tIi-M;C+SWa?bS5bNxj@%8`y@Y z$0E8H6_J>>Oo%Ug;oVNCTKYp0uyHiwEo6s+-Xd$r6h)S1SkjRJRA(_1S+dxS-xDEM z;Lk8>@J(RQdUYIIz8kkAFIwFf0@a}+fBsf@f7wN(OR?VdL16nT4IGBxL*FNGo*-P*g}Z|%+rtSVebnZd(SIm`UdVFRODF2;lv*Zco`en>0^G>fN3_` zaV1Y&TUzcvZ_(7;Q7qOKWcR9bl3@P?x*8wY|RP-66fAaL}y>`5S`+*%TL-? z#nZ4POwTI!sv9ajCQ)NrM=Pu(NmvP#MQLmBif=lXK_lN*?j|&hN>s1Z#30uunjE+4 zOosZ`?sKb9rDz#*o)r8Tg$^m^95|Mx?r-~+-0+V&EV^*d{B99Bm>Mk0*NgIaA)TK3 zl{Y!^^Z}|Xp5|%V2G^tMrV_(zoi?qRCrqjK3X>tkFYlJff52l8o|?BkR*EK&Fvs)u zV!5la9k1GY?cVJHi#FBwE$QhZ*B3Y7QnCe$8oUj8pUAGmOtA`o&bN2K zG8;Qv!p?6x&&@R*`&P}?c?vy99pShcZz@x)#tyz>UQM$Na6VeqeZj4);F#Td<>WoR=`>9}FUAb` zNFvj|MiBh|bp~weE2l)?O295KE|1ylEI!!cz9~&R0oL@ z2hx5Wq6IW5&Rmh-C3y8c<1Q5p_2M(0oeYR zgk+})z~V>r*V}$B=$K-^R&eS0JfSEZPvo{Z&)P7f+|*c~Hk(n&Ybmkhk5OyJOLhHy zx&_6)ysi+~*`)d__LL9aTPcKNQ79Gc6#cz2ae$gG5ti3nh#qF%b0HK`P^^N#pL!;( zU0UKJ_QdmR9hq-UM7xBJgoE)z<=*TmjNsZzevn($GAYHC;+ni9%@Z>SYO$1w{KCYn zN-}pNg{8h*zA`B*JHq0q1cEuf@u_j9$fAW=lKxEfbFHe>8@-C}nS`;$d*!#2dbO_^ zP0mVmTg3?+iK>3=F={rhO|27T>{-7o{Oc&zS4wJrLvtwu+saxX+H zppehb1d$wP8z@uJ`9rVGDml@Tdsk*o2%pNjY&ap_NJsY%g zGW;_9nB)k)h;OAkzWNMHm*@F~vkV}vmAx6=+EcQpVPO~mLXeWo2| z9oz=>NXV&E4+V`m(ur#7==1lI2Mr6e{?WW*Tct%$k*s}aX}_8=aW(CXPs1sBzQq_=xEVBpe?^(Yt z#T12|W7yQHHEBIU6&5mSI&Q;7J;-m8cG11p(YoYBO-7RcDRCDs?XJ8zJ! zu{7l8AD*(=m*&w1Q%c?SNehoA)4qiQ2-b}*{$bo|dEGUYmU6Xk@_%=Clakk+t3c>2 z29heqxUjf`S)kS(oe`qW%-|M^#ckc^@~NfUo0N7@va}~E#D-uLxNqugfJEU__hT5VlwH;2h{U#NU#R0 z39Nh*lmTzPnM5<#BNa7kgGScDCH(#U-XfP{5G2LMmq+vuhiZP84_}Xsb;dBE^}e&Lnn4`{ujd@+qe1Bfs1hlh>Rg7JV;o~Ty*ij{rOG<$708+#Jp5&Ge}9ou&TT&2O`r%t!T?l=;5I z+?+m2`ufB0_Z3_Gb)^MC`18~dfIIm5@Aekpv@aO@bnC)FCRapor2M3fd2BjGqBD4(|P8ee;E5`>Xz*Vqa zs2VDzKerHpQ;7ALnH+vgi0ndWPql6Bu?)SMIJX!Y2~Q-cG1mY%U-CIBioPAZH5;(8U9?roNPXaMQtCcG(2V^A zNGf48FQPdvdjKBu!4BCaU!{K$uFrywf_7q>Aa=!rbuDj z>VE7Lq0*2Po-wd5?yxzVo@_N-M!4}pw26YD32;8)qN{QEg^2)c+(P1xWjCy&Mc@=Q`xg$JjLmB zB3=CMU{kH3Y)N|(8md!e6|zIkVjRt~BYbi_Zc{b`Qk9`{k;rnC0vQc|QA=;t(1$?I)A`5CoKifNgBJwaK_JqKKAP`$s4r3jP(&7X#R$zX?ff%!>EB1Hw7zT2G*gBDWR-sui3ZQ z*%!Cex^51l8Fg=IIgcREwv;H6|r6ekE{uCE`fb^}VU3A=z2H%6b)s zIXyNY{lZw77}T>lM6Eg4Hzj0zWh5YAO=hJ{srhn|Y5c=k*ln&Dy-7IwY53`3us9%; z=~z7U`D|YJwOFO-!}?MkLQL`;d)7#YkO?^i5}Hz~P_h~) zF$yfZ${XyGHai7}`=UO%x_;aux44LuIc?(@JZ9iz%LALjvKotdhN%`>iS2?Jze1kQ ziZ1@oV;b-eOi=2}8>kE8TItr{CH)&=?gdbt7p=-Rd}jEoiZr09MHsH)t4Q0+2K?%p zxvSH9YoXiJ+SiMNG<4+G9L~?HfPLuI=0QF}s5dQ3_PLPhg^4GcDl2)fak0weNmi_Cr7?&$X)J)R zR@O5L%S91zi+V6VunN06@|=n$j85S;yh*8ApRkURS45!whP~g09PmJPjZVn3dJ_1i z+MhXF`jr?c@PH<8Ir&k>L7{zQvF78X(Fx8Rb6vy?)tZ{6(1!&W_WIaJupiB!lwQ$6 zv`O><_JL>RFZ)W+_Ifb?DgyhKn!Dx@xU4O?%I09Ck`dU~frcJVyEfuFD_txzzj7YId# z!PR#+d%eLm`rx9;a!P{ch`7E07G$rR!BW543B6`q%RCLg+8n$-Iyx;(oTi=q8kLBS zl+*Ab|K>A0wLtsUH2yLr*3W6QS%YrC$FBdyPKneXdc3{)=2{>9ZMcDMl#LGa2Yg=K z9T>?dkyc3_+(Es4ySDuzykvM)K38vUVPLz-$b8ypwr3e+M-oiIh^c4j6J9kI3sTN# z<6kP_QV7E4)HG)Je#|r2x%DoSkp{xaJQr~gWxKILl_83NehgFu;fdk6IvrIk%DVVL zG*n||2_$38!tCQ703KtRHWe5V$QYSm|E?5-1|lzwS0VP=Bm>nHs0=JXD?;&k4%%xM zXGZ6}M)jrAG{sl6vjz%{WA`y`@A2SpXpRnx{qWowh)GN3cszuoJ+41&QN%$N!eUhv zBE%6FO0||>HE@D25^w%GZ^2IuAu&{4E>~ zMGTL(nx!%U1ow$pXLCq7g=!eV>P9kkHfrWpjxV!6y&vL`H}s7tUq zg9*i2K$o7ZbdW)aiA@gRICz9q!}S|jOQnnN>WS=nL~c_?MPLC zgo%NS>7VO*1%dZ)pHJ8FXoaZ11WQX9IR3L4r$+OxKW6O%ZThFpX?>YNM5*Y&-fGd( zNnqPXZ7Z$;z5djm@g)1Ke-V3Z5=sR2kL1KU^MZQ1Q#UZe7b8S?1&D|!R5!Bk;4Mtb zD`bqC+;lv@jp9DG>=zq!ead>EIWC zLyuKgrIIm$boL=_$62^%y&u;25}Z;r9HaoP)_1Cv0K+82r8E}LzsCA*JZvSwaU0sy z_$P9%^R}3GbhB}5Q%s@EBl}I%VX4LLVxi&{6EmnfhsT5N%omK<|L4>AIcSnI|*(2POCu1)z0mJt3>KMY~nMXG)S zfKIi0t`&+bNj+ZC?P2Fi+hL2De?q+5WJP6*S?+9nfAhBjoS@M);0$zC>%Q33HX;wf zxZsf&aX8W{Iu!*Lshq^09>tAl(VKao?Z!G(Nn1c%cER<6@o?>ej_@TCg)mBhen z`-MlOg)--1?_Rd$4wBz_$dCs6DR)?H-zA=5uxiFVx1P?DzwNP{Z81`sgMSoGz;kM4 zjX9tmQ$0ckGaTm1EolUte)d#3VCVD(lId1yB>X3W5-d7~LnEDEG*PtO#WKs=>Z~q zDNPleaSKks9IT@m1?lYBYw%csg(%(ErZ^U36`5Y$hQQ|4f0g2Mv2+dH{b}+`kaGM} zgU=z)6G~nSl!4JExi{gbF~g851QYe8timB5157&7VtxIYB*P+;F{%pSPN4aejC{8K z5F{-`{ZXJ-*XCO-=uIa64gcN|8Q|U`_$z;B;(Y3SRX}FbP+U-a7UrK1U?HY>nf$rj zO)uJSdo}zUKgwOJEeT#W81(_1#Ogb%Eh^p+Z29(NXP@xW6BOp}Zvmip9;`Rih@0Pr zj~L1x3CscYa{asYnlHA0o12Bxm*az}?wCO>b~vkoK3)zyvezM?m|}M3ZOi47N({jE zTXfYdjD(FdQCcr0XA29Wx9+eC55VF&y}vQgod;`-#B}GCcrF^v#;N1hY^Y;1h9bsO z5^Xl7q;Hq786AQxM6hepS>iCbA;cHe&Q#MC{&H2)ER(MM=}uudqH)cvH-Fq}5oKq# zSQkhpbGFT1BGhZo>@B=v=dAtP=Jon;efi3`*B1uV<0PV!FRWgZ@h+J*#ITr;RR^O53y}7lb|0!PCHXTW3pO;MQO|X131p_8Mj_K6?~0@AAP&;0OF-CQA#K8ahGu+AxuIg;u*H zrj=DB3;_ax)n*`}JPK^62XcE3>PH9pIDspEas(oD)-aK4J#q$;3Q^v^l&2PUqA8+S zu(L!QD9x*$n~w5piCAOgv9_-I3d#cW0G3+5arN{od4_Q`H{irrudI9u7^vc1FCL#F z6C|g;G;qu1;y*yu6$vrj4SA?@flDYm&FD_&xa3I&&LkUD7@}#}L zB;~@&vW#L*n=DTf1ZP`A(SS(IZVEH{GV{YrL*2iOK>4xy`}2^0hOqNU-P$uf7td(tv0NGGO?0XwznvNU z!T~BGkmYk58inw43zX8N6(2%}q-R^gMumU2lO#_iSsBtRZdpcjiIZQ^bhI$=6v{d$ zpSJ$P&sxKCD|a_5h{o@}q_m7rw|x?yrI+XX`OUfK$4JdJI$Geyb)Zk)+pePVds<7- zex9|?+g8{ASM5mx5%0w{ykJUhj+YL)bDNM3Qih6WUe(PZI;f zLUKPRTs`N@e%M*>3olcT?u#KrL+{JFfR5uU`$GZ#=ZLsg2-bG19oM5?(9L}%Jl4N_ z?=`IBR*ik>zrQ|c!?1a0>lP&(pPx4cwO$tO7yt`8k@@Ex`9kj51d+d;Dp>bE(japx z+l_Psc?v3~B7~p_nEYd!a%=l2aPD$~1(~`Cp_s8mT-b`RNGhe|&s5=n1crkabrMI& zxP)OS=8T1f)8aWaL|@ny<>q)*9cN6qZsO`ACCK(^nk5C%8|%ZQH&k6Mq(rH2nA{W> z_jgFN#8=;yehM-)Rb*ON&#@a~mtZ3Z)EdII=QvSPv-mHSuxs^HER5|5-e{)i=y9-L-kcp;&P&Ax z=4G!~OxaIrCRB-Qa5WHFe4ZvH)DD0QYBd^8IG|%`!GF9^@|Y$n_IV}5|LpYimc!I_ zAJ|=l!)O`FX$Br+iyMym!qfpS^8-K8!nEmCCSS?Gzc7t-f)592YJys*;{KIGAg7vn_`yVrqbkwIDid>6L7(>KEpx`Ot8{kiAm=!muBbYNvsNLab zJxy^ny5KmwvCTFpstrfh*A@DYwW|0nXEQi_m6VhzGG-)~uzg2L1KHAP35II+9*f1> z7cN@NwpdVvM97$OOhJfuR-^!lMYQCdx%qq>dMjR~?Ct`R8BEq1MaHv84Bc+^zkp{r zC1n-eZ;!~a=Bp8gexX85_+h`Tb8>RjGrj>M6SyoRaMrwRec0P8hV84F^|7^mW=IO$ zu0~2rk?wsfffJw`)>}0e92w%lghFPpVF}xF9j?uFWN&c-f&pV>X(eG4@b{5~Ngox` z)nn1jc9o+E>s@LPm4;3pG2A4p0T|U82El&OFqI5U=H!m0mqIG0z=j?pysT*}6QEnI z3yq!kgWf)0D~fAxD`}_lI2Vv~r%ZQ@GUQAJ zcRsG~Vf=uxUyJPQ?SBE0p@u-Ba2j4B3{K%U>^fPj^Hf09`vaEm5<}EOBhUV1ATm;h zWTflpHM;ipYUNO$tbcpmF@gH6jCgU0xz%Z;yhXOGNyCvN0>#vu_%qK$l9%=&UKt69 zAN1;V$o?9Ep@<9)flOh}-H3+u5$ZVEzI}96g2@QdHxmWm^41M%|GQTaJlL|v66dQ(?9sj3N1$1xB(OPr3^yu6 z2`D>4S`<+;6ZLLa;*?LmgzxQy?C9~-bV~%D-HYT)Y*ti&7ejwbTw19{!kley)$Vv6 zA0@|h<{BW?B8CKT#1i+5JF}b71e)?4{8?#7^PN5)R__6zOMOu^vywJKNuH692Q2@5 z4R6~32)gYG--i-Y{K*U${@sRmyisT&ug5uNGlbfOwY4bxLQo9}HCz=ftNS_||25lX zimO03CsZEdYV~`;;Xi+ zxjD>Rc-zJq5^7>Y5-LLXXjwBwUC0@=yY>?*a+-Iyv!=M8KUk6f!y z-I(LoK1R>ng5J0@|JoSaih|X88g{aBJ>)f&@sHjItqe-SS2$7_fd&FEl$l&4r$hls=rAAb0dtdZMw@Wr>^|n`r!Nou?U}+7FRn}lW%v>yMwlXwF6Lm^ z<`MuLP}3YNZj-9XW%{nkm5=XJR>+_<9uhia;Rq945o55xav~54hMNZRnUKjG zF)45Qnx*os?1SKxNY;o%b&#IY=i_LTGO8?!CXq-elyEx4GPNFY^Ow+Q9QcgMPz0Mr z*o)v81^?qqmimDbB6Xsl4`d`tWC_d#IF`g&isXACku7o+G*+3&49m`oaOPA*NlNXz z$*B2{&{yWrmCaQC< zs(t~Rm##+uf#LJL5x~kZ?*%( z0L4)tBwAQ!QP^-Kv=vZjODH8;9a@)_*^Qjo6`fG>Z3S`TIC!hJiSKaZXvH6AcJ0ra zkefP}k(_ucLp-b};vwDhCD35pXD|R4g459>*=^ zl+Rs}{wn$nKrh=d6IYEp_L(W~$T9lEH`ckd-xIq?ldE$)HsK1XVXh^C%RfOTpJf;~V6|``Mn`~3r&9LYLk~4bL5^h9c;xiMYv^pOe9;+joR~DD z`XFQKuwdpu_FE;wRppe&Xu0xuhKIy-TJ7{zeA(DeD>dz0%seBLXT?oIEP-I#mMXfP zY(gt*!HQeoUcf9%5aaJRXGksfY*9>k&&a$tlSuJr3!>}O=bMd@Qb>+ zi?gJ|j6$`96sOP%o1H~vIOQ1{bo8Em8miSR`(@s%(X=Cg>NHg<$jewF z`PtQ4n0_ve3w#My=0#W_B=gn4=`qD$WV>#HvA-IT;c{vLu_@g%>A`Z9T`kl;Bj>^M zX9hBt!Tj?o0=A<0`^I z<;^q^FC?bls)Z2fU9Qituvd#aZ5AXH=LGUatS(fA?N>5JE`*cou*es|^^3^ykXix&*HFAgqYVYen$cQB0i@iccA4#5O< z4=UGp6g4b?^6J8Mt89$V|3L>hVg)%gZ^6H2mB0Ek`h`2bD*SX1%XQ{3;)9rc)G~gq z5F_$rd=AuojNE=M)P3(Teg%WC+Q9=D>Hsfek2lq~S&oP&b!>)$No-g)Z(STR9*-Vt~+L9On0wS)5Rh45w6^N$TedENo*%3sIJeTLV= z&DMj8-fd~!!E4qd9NvMy)_c+*z(Y15AvQod4zlMk!4w0WXz&<6cFLy+Y7QgoX^6mx zGZIiynJ`crFlL!xkM9tCoVR@&ux_0o92>CnnUNjgQ7D;zJZap)NOQY0#ZvIdtw@a8 z0vTcv@-yKyeP$d0Gv?(r)+5so9Y7r7jM+y7YspN+>4HPZjGN8G)zN@!86H|89&kT^ zUl>%KsOeq}lAzXbg4IBp-Uy+nYC!NnRL4S#=z^W?0yo%*jeCzn+2Bdn@aT~MbXbNb zfgn zzN|v8c6(54!f0`3Iu_1=W)VhLk!)B2)+f=e$Ak4D7-hE8paVY9W(iIHMH42&NpE7l9vfATcf4 z(XQI%&)RkD+HEbmP3(HrZhC#}`fDwEbI;|{bnrK3xUoD2~C8QSUH@594@Es zE`qO)kB_=b9B#aAZkn9#7Ozf!Ufdiw9l_n5!Z{s^pFL#TJa64xyWEWPIepqZyo1|( zMB9AlJUo%yooqP$Z8$wnJv<&c{farg(m9=guRdcQfk<3Il5Khj$K@#$?ahdT(NWQ zv46PYy4>R!Ib&YiNk@|&k&FH6f~|Z#rLdguM9Y@wCMK?Ebhc5ucYAj?5z&3 z@Q&Q?B**NIP*zd+P)6O)ajv8K{OvcZq=+;ujt`-|_=hydgU}qhWyNT4Nq06g1 zo2O2;tKOrtWXQWL|FiAz!_cFv&cW*2W$xt{@9Inbtd-<3fa8li zh7lW z?Okgr)$AG)p4H1Ft(gM zgxI*d>MtBBE&bKO)T7s`E2N%5FH_HDm)Dd4#3X%(Wv{1rXMaqp2=JVg$$a9rT&l{= zhPFvm!Kjm|lyv5$`oFx+Z`=220#jpGE0~VI$;j+YS%+ z&K_`bwj@|2VkJ;h>>eXwm~eJ%EhEZdkYPA!wsss0|9j-%5MN=lAeadG{SYH0fK+BM zMO=omWO!+S36}WVN+t?%tq{NreO61$p(^#nG+q!2CQadb-olI}i%ulM&%C1njLayb zznC}EwI2kWUhX|RP4)Z{mhx>nFx6qo2rXBso(W9)TVr4@wSV~^jbXygO+iGK>FYll z!%OahFI41rq; zAO}ECB}gdrI}kHU2CYFT>a)!O7y>$~0q}v73gmCUOv_e+$+p5aw&#ULD`>Xpt|ppB zj(0D7MJM_K@n23bN|88CzgrJjkG93mbNGMlztJ0Dr;&=baV_86DjtWjF zQ6CdVx`oaojb^6xFiCfNZjw#*8unA4BBOP4k}ng4hiEQ?M?F%J?=qw$i3u8`S_~6e z2qY~mb6yCt8>%a?&fr(BTl8*Jv~lw`MKnh(w(uu?Ge*aC5R!8_z4qo#-X*s5%`9+B zwL4&m_RZRWo1huVjpg`g;}XG5rcTr3{66iA|CxOFEJfVO@yWOms`TkTv4(L6^w~w5 zo6kWbA+P1pUOd z`ntV+-2=kOlvz4Ov0m>BspoVb~B>|M;HM=Np~yBC$mOpo8= zmb56VKG7!$)~F;H)YfDCLdpXw!E}7PlMw?6ZY@(93m0wIa#1CURE{$@#ek?o4AV7I zl9F-Djhj?jz$NCVh?JGcHkw>m@NO_HHL}*Y78jf8Uy)%GzMp^LzpmTvksZifyMNC z{CNKmZJ9{+QsW`&G8P{z8D%J!)M>s_ijW@}W&Yp0gfa+lJzZhtWp8E<3mr=wMc6(WVxO0D%s9DFsrc%6~ zGXZm+rSwgKcgliDFtR-%Uk^z z^-5J7Q1hEkJ@@v2hQ@e&#Y^hJ_#vwG#~!eNUBLpwPO_z8TFJS!ZG!CB=vSBa9#mUh zH-D{Dd6nD|m_`RGFP%w?(aZ?pa)WrTuo+wxKm--FX%C^!b0j-g5mz&~J^NaRA8v?W zf5^*;K;2fJHe#!`wZ#w;(pU4fsUZu)>Q3B1`x-VUm2zP?m9OEG1#obW>s&LW#Kf>uO{BYvs(O=J zFuSa3fOl(!#T|DIVuLe9;t)BC#8DTV{2z^BV*;g&i8MOEL|*58Qfu}hrES`r-lt3v#2qA6=F=O;(o25`nP?vcSw+JbxQeU<~Ws76KZnDLkAaDcm0G^G5Q zOq$2UsN7RB)^AHOqR@pn`!~vX}Qf3;dk|9M!=y*Y=MtTO+G4bp!M_PFRsrNA9QGNO#u30Ug3#Hfi0YDbgVt z*?y~eFRC8<*Z!ZMe~vjkT0s@A96otAGHN)R`i^_N9zlj*uuw~e;j2T<}HnJ7;Z(12sFs;YT{dU$$=OhC_R3x&sYK+YV6CfD%uj7u7)TNFD| z=e)VVQ&AUg0ZklxnNM8eH74%r((09Cxqu$HVETpDT<2=rtX{3p-^;+iJg^RN)+S0VKgHL{iNxzL>ZSj|@om-yBg z%(J)$h$hrfeG2qu(DsW7Q$_kEyYIpcr2q_np_BNyk1&dTJsj4vW?{{cM$6mK`JEo~ zB*9+}ci+dQvK@|dQh-!azq;od<19U#A^NhNMcUhU|K?fiUx4s_21MiEvb@?!w=^Jb ziI(F2URInCMwo1X^H!n!x}$b-X7p3z$3O6yU;#xg03{3n#c~WJN(cnh2jW#&t)UCL zSRk95(j^b`vodkUq`Ut%;Rqid#Ld-kxcqT^LceDqh zn!%gGLzYP1Q;HU*5LROl?rZ#d!wT(_upn>wVP8+(s!I0v6+Tlnpqt&_HwELEi9+8~ z^RrNr@>r51>3^gJ)O8SNu5j0N5S)U*;3LmCXu78p<6zgIxl>o~3KHURzz-1)>V$~X z0|0RZhXWAJFQT0;%#vhH(jOlSt`Zq;#RxN##ZVpvsWm)o6@|Beg~nlo`m+teo=NB{ zl}G*!^$9w(F~eykK%*2aM8h+*=N{ot0Q}B8f_a5(90+t7NQn9ZeC;0WwOW`*>VL2W z>$5Nt5U`~m;V??!>r#Q}RA62eq}EMg)|`G)ZhoO!afASYog(@ODGuFM@C2?%<^pH? z2bIhWSmG2k-x671I*-m-6d75JbCA!ixyIj6D83X!Mh}ms_5?yK`0{lwC@74}yXZMb z_>X@hz$i}WLK4ZDOKyX! z0T9_+7X?$~hyApR{a1t}37IG%dP)OTDEzsT=c_uuRmz!CB7`N^%XrMpT_OT^l9N;* zO-HI;M{KyJvms3K&vZxANaqBzWajNQR-6qcYr;~BA;8LN$fCoGu>?-?mLnWK_6N9~#T%$mXG zjs+npoNjJLntHR(9{Q*0zo@OMq^(LjviwSA8^8qe2Ou;LqnxJAhdJ z@KR*<=t+)|PEOP*(m0`cC1H`EzQJXFBO6{%UimB9`EQl^BUXZ<0tNBt&(Ksd!7BqZmoqB&)~_l%OT0i%hCg7|G%9VC?W%IMqh|m^OjUKj|eo?1v_Tk{4cn9#sSOQM}|`V4+p_ zmR0xBS@-oVFnrX3WD`z+BYzLPA<3;uFjt@gT&LY&pM4Ixk$%^^~?Hk&k%g>5BOe)BNp#&GSN zQOFapt##J5;o0qZoUI_A7)z4~1p%fhAGleLg`6Q3=AW%uT^(;am7n)fd0>1mxV6ZD z;xO7OU%d7Q+}v{OPQ2>QCFy1}+QwhFhEknB8KuYiGd{%zF?+FJcSy=PtC zJMWyfyqyr2MW}FqyQBni-UK0XnbG2-L3T0QU4?4|MFywgf7wj*%?Ln){ zK^h-~+s`VC;vNdDev+I%&1$RQ=pg|9;F@-G2%tnyJVCS@v-q^5X_-*2yFvjTPf@Ng zEGoE8c|^9`RLOTlrF%pVe?&fJ#3*OPq-MnQ>!-2rs8P(QncRr&)kwp#w>xdk;$_RP z=={3uAs+l5=Cc;!oH2jjv7Cu^8ouga{BE%rSk4kkN#J%c-Pd3o{7^jngk*IG4RiHv zWw*C){@iC-=GU0#mlw!aiy-`PqTXa#P88*IeDoD{DBVQu*Q6WV7y=*UAx|!dUSIY` zPyTdyGb;|iUVE`zZqQX-1%3$?=+t=5v?JXVD}HW_WkVD;`M+wCoAK^IJkn)e&OPi& zKm6$;p6S0j)61KalX|mt+tg`%Q!O=P{Qbn}(Q*Ia#_ws$Uy2(FahrGXbA|EiRvn7Sujs%Q1# zst|MM=r%h=N7~-x7VThXX??p#qQ|LQ#zAKm*nqkHganNP7iGvf@^-jVnA5dM_fsfa zO=;qcS`7Ma zQER|}9c`;yG&a8%Y55m^PVuVoul3rjIMu9Nb%HIn$1TaV7!l0m#~AZ>(TVKL*!y|W z{mw1BS}vAdi~HT-9=qb{2jHD@WRID`cJ4#?Y%=weLTaB4^IIoMT>o)V-YC~y8505` zKO4WZNrksD6SJl$8)RZPmK(d=3%_|pv$-v~dCoUcp4%FHKy6OGRCB#KuHOuK-Jd({ zl@8IqtGC|ew_H`d>=fHg14ngS?%!FkFai9#Lk716C0}e3ITpmV+Rul&_;4v*S@y= zZEDra;BNBdE=dz&e2`;tB8~>gvW^zhNfm$l`&46SsIXi~rNyO=J!IC-p1P#;f`sw- zGk3P(Z|xnffO*fvr_anPWss|H6YA$m4#8ul-8D4c(L441_|)UjBLRN?eaSAho!g1B z-&3f-19Q&O^82*+W$kl;Os2ufRFPJwc- zpYXGhNV{v&vh>D7!tmqm`gX@3=g;Zc>Bo}C%|N~3SChlnn4!?TTFAFCQy21C*+!Y> zY}irv`N!{_$nGtf-mez;XGNc2t|-P2+P@f6mb5jm_+rr2c8nid`Ln*mY}|iZ&U$BxGut;XCDe$rx0HSx@RA$HH%oA=XtGJ2+% z=2JLTXXQe@M!UuScyr}av)*_lj$HQ{ceMx-s_xM`4 zOc12zL2M>!*)TN}H75L{$)RzW>`@thCU)aN7%ZcMKMcm{X?dm6jPEPk(s^-#K;h~+ zTg_!-gZW&U{?-f7u6Agig15f)`cL}+Iar78`rUR~3N4v|3BiR-<^&|8o|Ht4m6i+O-?MIrF`zDtm&hnf69B-90yY*!=2Q(;h2Kr9 zjS9+EcKr6S53O6q{rYos9I9qA)axed9{TQ0oyp=Ywj=CIdY6r~Q&+fj4|QkwJ!!I# zl-9EwV`t*-d%@+gtuj}9OXtQBf=53OB4}IJDc^dnTlC|2!`L%-4*t#Yi1S=_D(O zouEwzY?D*-nANhWwX4q3NIb>J8W=ChDEwp1TZ*}H`Qs#7l_?Fe(W*25rfKBED5e3a zLLu2q-qq>G+i`Fz3U?=eMB?u3=KG-y#w7e$lb0q@gF*BfmGnobq2>=0>AC3UY^Sci zvW=gv?|IOv0&g5p)EdDwzV4e{EIX(5oKYRN6MlY<&Tt*1J=~LUG9-pZJ2w?%ePp6r z4|qQb-3UCOd>NLMI}Z%AA42r7z)yHq;aP4tbojJuNYU7QO#}KKL&|-B!V_!&8|i#V~*ucZzoQs!(p>v6ba7a zt5q#{FFg6}*-xpq>yqbx@PiX0i`Xx2BrTdvJqN=zAA+-9mfK58t~UA+mJC< zrUF}ww8Ne#oo=YGddR_Z?PiDpIw*xU=lWCBsAsUwx#!}nH)b;oft?-3*}5I>u z0r}M)T&awCQ9+KfZSjY8+$3DycTL6=`N22(&`NaSDN39}qH*-oPR|A-pCHx;FL#lt zd4{|W@t%8nya+Rgfh`!I*HxS+EQ*TBA4&l-rhWh354Q1_f!Bg|?ICKFbnf{?w)8Uc zqBmW`?I}j_CR+L44HU%ftghxCo)IW?Qti3uwMYrx4`f=;%4QZ6X%hTioi}16jM)WU ztZZX!@V9QfJa|_RT1;EDwVw6RYmfz8J~_>Slp@=YKiooDB!x2Mwm_40it7_ z@M=bMx~v&C+FNQ&Zli`y;o&9EJFZ-4ytts1HqB*HU;8Ch+PyaCHbA;etk+W0S2mKO zk3%ApIMGk~o*}P{J3XqWF{bBY{e-;AGb#+V_7QoursSpe(t+-pC1iULXskg2O#1;k zLxWvfQ9zM*N(doiST6q|86~%+)^(YNv~wTP3iq;;o=nBqwyC+K>PiFeanlSviVfIf zp4$si1331L8q)hV^C;~k>JA4ZTb-gq*J8s5g0}Ts=#CZ+9gu!G5P@W}OI#Okt3W%Y6!n{R)Gccpq@bdQPddL(kbAJPAMpR_P|%r5sma+;~vb)bH_LE}G{ z7yOtn&U+G{Z)w*9eqfFGPX|KL9TIJ*1k;@C-pU!=`T>DH)R29`g2+5~(TcvieJ%h5 zdcQ~L$M+@P@4Z-lmmUZ{CK;C>yH$BufknT~wg|)81-0K59sbG6_sQT3_nmJz0W96OorKRw%V_?QwHLSZMc;;hv*dy;fFW}*_v*Y_rf%nKv@IM}Q zbTxHRbn?!Eq$=%4DsMmnU}2%*24bbd1@>5*brAj)^*}x~v^fic3<<%Z6MTvi(nhA7 zurfx$Rf0Bgw(ko)%tI{@BRFy)s6~V?%;N0D{ zo{b)l(pYi~Q&M#$+XPl!B-k~R#oHuhN3f1>90DOSf^_4RC4iOm0yUYEnv&XW z*mAyfR1~R(E8K0-d_ioI-{^%+5aMF{G{qkgZAT5wOQF@gkV7nEoy%EJ_>-XrNz^zJ zQOJ|f+a(mk)Y@WQ;?CgGTm^E)QzP4%Nn~-%dZNS`+17IME89IQ=;((&Go}z+CzYrZ zxN^*!;7*q-9NS3WsK3$9R09-ILoU1wHsATgy$l z5AvH<{rdMH2>k(Yd$Tw2iuYd%(oXPbLQ_`Rvn42T>{Zj{%*>UbQhiOyc1z~mK^5lU@eCm5P$EEXuM|<*mEf=E zXc9mbrzxKCm0n`TL+|1?;VH8&!#`AFhh3Eh1C@}$;9+;>5LT4nA(b$Ym8d3(O40N1 zrtscvVYRR+*Q}JVFp7h0195&UN=?cjMc(R;$}ahwMi^3Y%{;3$j~)$tdG+d$ z+8Ha+QwZc;SV&v00$>)}x+c4pp179M^$MK6R+#$AHcuWZf<|H1x}jsZ)rgkkiWXU_ zOkl%Oh?{1@@!GQ(uBuw`O~G_BMzqqniVHfsK3CMnQcIAVw#tE4e9wZU{2YPbL<@9%mvW#?xk9 zZv5)PEL9?C&yH^I^;X-wZgAE>dS?p?f?Py~mblbL+uzD8qvYS`6P>>kiDXnLzyAUJ z{!1pb>&*~=&-_lAN7XC5kahU0%oPeDfDBz{HkcN>Efur@bF7Ygob&J$Akw7$N;lQa zuE!*_&9Ao&jB(p>JqC9{*dq4>i|yK>5+_}}Ua;?3Uh9V#Uzu(JY_h7#?LX%?nkea| zVBtUp9xW@DK^nH~5LNDg=Ebh3DAC&&XqlPUH<>7R&KUHt?&65=qA3|{6I2aT>Fr+c z)FVU7wQKFIZ2rRCd@nU@JvQ(}nf-(}ygycYgx~qwLb5}z4}q`;`fsPEv@`dr>s;Mv zQ>gw|4m9@P%vW8tjS<7YsWmwxMrV-GFX}rh<^%E=`}?IK=T)j0qZ+F8e_F*RK?kZP zz6{xn4CM>!5jlv=OKQ!9IQH}e3`3Y=IH>m!7+C2e^uP z&@LsSLhivuv0Yr0Q~iAKzkty=@xFA_Vq+`gmb+Upg3^+ckP{lzJ(_t$|RI1Opyn9xJ39Q7& z5$!|CUXK-*ez5MimB46joo+Z=Ry+ny?g9n63iKrbQ1!dkDfJg&OgcJeaXiFm!u1jAiHu3RR!I~gSc&&G zW<)H_cBM~iTekcHL$}i=j{YEh3bdLQsdpey!4d`G99&LN9JZ<(wnXEKz$gg@b!>}8 zTTB%radFH?qll2jv;yyccC8dAPqW8QH-C5y?^P`wK)LN8!+-Gpu@3FOZ5y@i(tr{9 z163bpiX^(QeM5MMXUSku2^)XKYzRQmTr7CGTY<4g6ABUqq2l5UA~K{mN_Ge%4oPQ- zRF||BI1R@ET8dG|S}Wn`hCBgI?2y?|!YpZ4RUFVQo=hc4!0JlP{3hk{5iXZbSfEEz z=N~;RL*s}IB(gFp97Dp!!JinK^vBJFrOc8GoOH*Y1tcR~gdtr|Axpc>9wfl&SMW~b z4hiBeDx|_p8ma0j>Z~x2$pw}z()W1|0X5p@VwCcso>$*@I}Gr3pxOEr6UgwDeXk1K ztD<9&4ps-ShH8maTw7z$WF`gXU>cV?~S4=PO z1ZW*%GU2&*_cQk=JF_fBGYpr+-1vzcCaAbI8|eVLWFQ#JhUe707Y+Jjt)}2bQ{2BU zse#k98yl3FAV)Bbj}>)$VY3@|teV>EYI<&`_%gvs=qIK^cm1)C$^0K3r(c>kSS=4w z%rQS9()*l6Dbf5bY{Vs{J$vDQCGp2XNbdaU1x72=XnE#7`ZFDBd~GMV z_vX2`S9mYo-J}VEALo0X)Hz_bd2ev~xW39k#9gPgyBd&+7@VPRkc7$FY-a!+OH*84 z9Yx|P=*{KseC3dM^hO#52R~#6J5MM*3J&)ajSf7#1J0o7wF3cv-$-)GnMl~AEjrt& z55us!LZFk?k52EVD`PNE%`Z$!kOuAiD!8-{D2hobX;Do0G7>ZrvH7Fqp4yo*u`qbM zUBBAtNogXs5HX*@5@lvXv9J!5JJn2Z5@j8BeKSx?)oTr?HQ;I8YZ}#xOeSP~VAaax zcGrLJxWSq>X0Sl^qIstu?DYBr!4T;@nf3?6kVqA3fS$~Uy%QivbVkOBdOB%awZEep zDO9D=p=F#8a8mJRQ=kz`TBKZZ^}AV8F}W9<)#3)E@}cxkpe<7K!o8|_&uJ#N>t5UC zTgS%6HR>}z>o+p7+!ihH&0Ap!s^x!6aM|o$xbdwwoILKvmC_k>d5JFdl&2~X?~Fyp z64=%J5(NJH2LzYO@bedk3II6}AKS*+dT$nmqkh}dhgVovD-6=zCtLBvbEY!Tlh@Ma+!D`Lc*?S~!bQfhD& zsR5!`ZW@*dQ*NF_qRcB0Jh2Tyoi|F;4TGpNfLsZ}?((2en8w3u1}GE6*>+K9#p?TR zS|z#Ut4AVP9`&XlB9c=6nM|Ak}*pv5K@m-pY)rK z%Z!6?t15~yp|ZKM*bcNZEeI{mihaFbtqYqvWvXj_?dnh#*qmflhd%_mRHh7snO4@{ zAv`Gy3QLQOJNTT7RW&cE;1P2T^#{}N`}~gj`Mc+)indnbqtc{9ia292@8qJBq1|AF z=QPYUO1Cbn!YH$@cNL_~p?u)_a#>Z)KS)2#T|K*g5DpLXchxTp?0~NQUfqVCRu#R| z4xGnH+(`UjTW0K0E=a41n}Y6y`n4bM*T57OugUsp);Ye}RtR@Ep$?+QX_GlY@ZZMs zgh=|X3lbl;u8T6PJ5M-_UXe8>KbG`bR*GQ3w=o8`r|E|wytbUg6lGhQmn?!on>Q>z zBU`r|R8wEZc6}!lR#ka@TXub3%cU`F=v<;_n3`&+_iI>WIBFbOce&^^6*~Q zsebWZh2_`SP6g`Qv{Sf_h1RVVh!XXf9I}Z_w_@BUxojm4RWRI`!#VgI-^U>oWgkT& zy&fxD+^ip`w}`MzZ%Y~W{WZbm;{x74RnA_}D>uiHSW(ZW( z)XAz`!uf6|)}8J!2ID~dhe?3a@}2bi%UUphHy_>rIuin^8%?alCD1kyZOgE{^I}jT zFnz7al)FTXbUB6~(htzu+B6)t=IUy2Ba>Nu&$Li0O9<;92t!0SfRnZqqb`cIznU^O zs#qOjTvhakU{PI1Tt^R`FA7K+SG+e`5~9OJ##IIzp0E8eRwkYx>&}XgHxeYw1g2s< z?+8u=wI+VuVNZiZ0)wlV7`{o*Lg6?NBMId+#wo%=*8;lf!9Xp_cQDT=41-8>@-QY; zq@uIkAF>w*o%}|E3Sdo{1OiTyNY#u5qKpS%dB#1b=L$@dSn%F@G~?J*Wz^G_`OQ3q#49_62XR8X*!vMt`K;}+^;7GRoLufoHCv4e}_>D67 zUA++c!$0%9?~iI50(CG98%1;8&qav>n$V~YK&7>EC7Gq{ilXlI662o)TIIQ-=*)yTnEo%Z6-76Ayl?dPZqm_RHEo}{fZjH2|`tJ?v4Md zk-C782t|gG2#Kg?`Zxr6tn37}R0^0Tj|fYdo=ve~x@-|y8441eGQPyGOTrGqkTNf; zF&bM$LL_ z+6Xt5Dco|1#@@K+RDvxxPn?c}{Yr+mnuf9OZDcRtet4#~ZP+qGn$cR$6yg+-m#XES zH>_A<@j!zlpO`xKm!3g!`wCo0JBw8dl>r;)EIFsV9BD?kxu?*3*WCz~gm}!cBqrTP)xaE*T5u!pt*mBnZvp%SE3#3u3_zVt)Zay&y;(_MM&>~%jspU_?QIcq+-3ljS75Q)_n;(F(nj29&!Iyn)NF8pw&sj{9j_hrL;11M zT=@GaH3{H&qxDcwTi)szj`pGokFt+>nFXfrW%T0mr_mYq5G>h6i)S_{B1=A3QjJxpskwOqUbQf674bI z07R&)x4d$y+xdoOK-b@ml7HN1X?*(To47<9*S`^B`fdbji*nvoAU99 z={u&}Is|taD3V4@AVx{CFUSjW%qx5;IhOb8_bl}*XU7s zT0Eu*iipg`UM;B3o3mH``Co$9UIla8qH4V7Qku=as{k)JaKj}#&2;6RV7FMN;l-_$ zFar9e!24Z5fhO#N`tw8rtoj1;%qm1&EKI6mSU?uMZ~+8I0XqGFVn*}_q?~Rcysi^6 zSk%PmzTC!N0}vBzIKU>``Yr;C!9|Mlg4}qbz6uzQJY_6#0f`bzu5bfFSb{hZ58fJP zX~75~ZfF_f&%?+fG86&wf%F%(0)Rj(3%$^22XTQOih9o=lWmJlyl}~GFiD+&RVo=S zZsEr}F_yLQpPkux$eB>S1cJ#?9L!OFuLW!zh0|#Q>*+mQg*51IBmrLs-@usQWgq>0 zAIqDB6=k1*Q0t0n-(L=Se?CYEJ%)iRrI@-Xj5`xiU>g5rZ@xkZ6PKia0D$E!MS!43 zr*RNPlGoxI6#_a13%WOd{01ZC|*Qw4SmhZ68KRIQ82QE)O4La5g9-AP?PaO7(($8|XrrXCR7&V3&H4l3mzDt!0@goHI*>yh!wYRoLtT%*Be$|cjx}hO z1r-qG{KJD|N;PZEbsJ0LeMM50GU}c;^`=MoQj@9>@=Wz$dO?D0+T|w62r~Kfj0sDO z34ba9PE1&Snm`?RaF>}hu3Q$U;YU$RbI=w2O?>%&$-YK}9C#V086c4wL2%u#^s{7KUIJPJmO#RS{fq_1eu!iX0QTG%e20=}aw?}lK0JZ+!x0tA-V9X%!L0V+U#PU}I|@1g2~t>2_@*GR zv)n9gI0V+*lp{t+Y2H6}!kih8U{~)FS?1Liu#r$2YDuoZAzyT6=BfmWWJKrzu@lm5 z9-mW+bQ0NlhZn^n?*lc;TMFgRw!o{8QGtH|1f5QG1x|7rS5R?;;IBaH?S(tjXnEJK zxFsEktFQYSodH3o98u-o&W}y~gVIjQjs~C;ccF_HM)v7b+2l&8`LQAdhUM`mfx`hX z!^o7!mO3($mwF{S0NALK{%BN52I=u!Z$*^lAE=uqaV5tdDFGTBiQh+d?pE4wBrU6X3E;z^+uMm~{axY(evxI+R({Bvq}Eaf{5Q1#WD7 zk+E!O{$h__NMO}@%Q?w|IY0nPL*<0Kg2k&k*N7XBxg_-1KQagr{qIm2N!D}gtQS~h!;GABSa|4{QwilXspu2Zb) zC=MeZzt_DqdK~Ri8$fMc^Unho`@>q> z9^&*x6xkHH+9MhHW0jkR>9S)HA~<(ot(Wgjik|(Mw>@Mm!)cN@I|y`NeeG`N%_XY+ zRg&GgKg0P?hLgqG>!6$KliHh?+S^qI0v`JwKKpyz+k1vub+OtLgQzo>+eZ
xp1 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

xX%o9B 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 Date: Sun, 26 Aug 2018 23:45:47 +0900 Subject: [PATCH 37/53] [server][document] make work objType prepend default value. documentation for telegraf server configuration --- .../main/configure-widow-countermapping.png | Bin 0 -> 138598 bytes .../img/main/configure-widow-hostmapping.png | Bin 0 -> 150663 bytes scouter.document/main/Telegraf-Server_kr.md | 223 ++++++++++++++++++ .../main/java/scouter/server/Configure.java | 6 +- 4 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 scouter.document/img/main/configure-widow-countermapping.png create mode 100644 scouter.document/img/main/configure-widow-hostmapping.png create mode 100644 scouter.document/main/Telegraf-Server_kr.md diff --git a/scouter.document/img/main/configure-widow-countermapping.png b/scouter.document/img/main/configure-widow-countermapping.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab536a8043f652cc9146e8a7707e663cf79be68 GIT binary patch literal 138598 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�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%0DYbVA<`-w1{uM`tu&;AhGJ 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�F&uv!_cN=twc#@=}ezUY<{ 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,**host**=sc-api-demo-s01.localdomain,**port**=30779,**scouter_obj_type_prefix**=SC-DEMO,**server**=172-0-0-0.internal keyspace_hits=5507814i,expired_keys=1694047i,total_commands_processed=17575212i 1535289664000000000 + +맨 앞의 `redis`는 **measurement**이고, 그 뒤에 나오는 `host`, `port`, `obj_type_prefix`, `server`는 **tag**이다. +이어 나오는 수치 정보는 line protocol 에서는 **field**라고 한다. 여기엔 `keyspace_hits`, `expired_keys`, `total_commands_processed`라는 field가 존재한다. + +위 설정으로 정해지는 object name은 결국 **redis_30779** 가 된다. +만약 `input_telegraf_$redis$_objName_append_tags`를 `server,port`로 설정한다면, object name은 **redis_172-0-0-0.internal_30779**가 된다. + +#### 3.4. Object type 설정 +object type은 scouter에서 한번에 모니터링하는 대상의 집합이다. +일반적으로 하나의 system에 존재하는 동일한 Family들을 생각하면 된다. + +예를 들어 Order 시스템의 여러 redis 인스턴스는 한번에 모니터링해야 하는 대상일 것이다. +이러한 단위를 scouter에서는 **object type**이라고 한다. +따라서 이 redis 인스턴스들의 object type을 정한다면, **ORDER\_SYSTEM\_redis**와 같은 식으로 정할 수 있을 것이다. +여기서 앞에 붙는 ORDER\_SYSTEM과 같은 prefix를 telegraf의 tag에 추가하고 scouter에서는 이를 조합하여 object type을 정하게 된다. +이 tag명은 `scouter_obj_type_prefix`이며 `input_telegraf_$redis$_objType_prepend_tags=xxx` 설정을 통해 변경할 수도 있다. + +```ini +input_telegraf_$redis$_objType_base=redis +#input_telegraf_$redis$_objType_prepend_tags=scouter_obj_type_prefix +#input_telegraf_$redis$_objType_append_tags= +``` +이렇게 설정하면 object type은 **X$SC-DEMO_redis**가 된다. + +telegraf에 tag를 추가할 수 있는 여러가지 방법이 있는데 가장 쉬운 방법은 global tag로 설정하는 방법이다. +이 외에 각 input 별로 설정하는 등 다양한 방식으로 설정이 가능하다. +```javascript +[global_tags] + ## 기본 제공되는 object type과 중복 방지를 위해 X$는 자동으로 붙는다. + scouter_obj_type_prefix = "SC-DEMO" +``` + +#### 3.5. Counter mapping 설정 +이제 line protocol의 field를 scouter의 counter로 설정한다. +```ini +input_telegraf_$redis$_counter_mappings=keyspace_hits:ks-hits:ks-hits:ea:true,&expired_keys:expired::ea:true +``` +위와 같이 모니터링할 field에 대한 정보를 comma로 구분하여 명시해 준다. +여기서 설정되지 않은 field는 버려지므로 모니터링 대상이 아닌 field는 telegraf에서 버려지도록 처리하여 scouter로 전달되지 않도록 하는 것이 더 좋다. +각 field의 설정 항목은 colon으로 구분되는데 내용은 아래와 같다. + - **fn:cn:cd?:u?:t?:s?** + - `fn` - field name, **required** + - line protocol에서 전달되는 field명이다. + - 만약 이 이름앞에 &를 붙이게 되면 delta counter로 지정된다. + - delta counter는 초당 변경량을 보여주는 counter이다. + - 만약 이 이름앞에 &&를 두개 붙이게 되면 normal counter와 delta counter를 둘 다 보여주게 된다. + - `cn` - counter name, **required** + - scouter에서의 counter 명이다. + - `cd` - counter desc - optional, default : counter name + - scouter에서 해당 counter를 화면에 표시할때 사용되는 값이다. + - `u` - unit - optional + - 해당 값의 단위이다. + - `t` - totalizable - optional, default : true + - 여러개의 값을 summarize하여 보여줄 수 있는지 여부이다. + - 예를 들어 throughput은 true이고 memory 사용율은 false이다.(여러 VM의 memory 사용율을 sum하여 보여주면 이상하다.) + - 이 값이 true인 경우 scouter의 화면에서 total 차트를 열 수 있다. + - `s` - nomalizing seconds + - counter의 평균값을 구하는 time window의 값이다. + - default 0s, delta counter의 경우는 30s이다. + +마찬 가지로 client 화면을 통해 보다 쉽게 설정할 수 있다. + +![configure-widow-countermapping](../img/main/configure-widow-countermapping.png) + + +#### 3.6. Counter mapping - tag filter +전송되는 항목중에 특정한 tag 값을 가지는 경우만 수집할 수 있다. +예를 들어 4개의 cpu를 가진 VM의 cpu 정보를 수집하는데 이때 각 cpu별 사용량, 전체 cpu의 사용량이 모두 수집되고 이를 특정 tag값으로 구분할 수 있다.. +만약 `cpu` tag의 값이 cpu-total, cpu-0인 경우만 수집하기를 원한다면 아래와 같이 설정한다. +```ini +input_telegraf_$cpu$_tag_filter=cpu:cpu-total,cpu:cpu-0 +``` + +만약 `cpu` tag의 값이 cpu-total만 제외하고 수집하고 싶다면 이렇게 설정한다. +```ini +input_telegraf_$cpu$_tag_filter=cpu:!cpu-total +``` + + +### 4. counters.site.xml 확인 +위와 같이 설정한 후 telegraf를 통해 해당 정보가 scouter collector로 들어오면 counter에 대한 meta 정보가 counters.site.xml에 자동으로 등록된다. +설정에서 삭제한다고 해당 counter의 meta 정보가 삭제되지는 않는다. +이를 삭제하기 위해서는 counters.site.xml에서 직접 삭제하여야 하며 특히 여러번 수정하면 동일한 type들의 garbage가 남을 수 있으므로 이때는 counters.site.xml에서 이를 확인하고 적절히 수정하도록 한다. +(counters.site.xml을 수정하면 collector server를 재시작하여야 한다.) + +counters.site.xml은 collector의 conf 디렉토리에 위치한다. + + - counters-site.xml 예제 (간략하게 수정됨) +```xml + + + + + + + + + + + + + + + + + + + + + + + +``` + diff --git a/scouter.server/src/main/java/scouter/server/Configure.java b/scouter.server/src/main/java/scouter/server/Configure.java index 9d63102b6..48e71f6db 100644 --- a/scouter.server/src/main/java/scouter/server/Configure.java +++ b/scouter.server/src/main/java/scouter/server/Configure.java @@ -463,7 +463,10 @@ public final static synchronized Configure newInstanceForTestCase() { @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + "which host value defined with $measurement$_host_tag option is mapped to scouter's host.\n" + "It can have multiple values. eg)hostValue1:scouterHost1,hostValue2:scouterHost2") - @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + @ConfigValueType(value = ValueType.COMMA_COLON_SEPARATED_VALUE, + strings = {"telegraf host name(reqiured)", "scouter host name(reqiured)"}, + booleans = {true, true} + ) public String input_telegraf_$measurement$_host_mappings = ""; //Visitor Hourly @@ -724,6 +727,7 @@ protected void applyTelegrafInputConfig() { TgMeasurementConfig tConfig = tConfigMap.get(measurement); if (tConfig == null) { tConfig = new TgMeasurementConfig(measurement); + tConfig.setObjTypePrependTags(Arrays.asList(input_telegraf_$measurement$_objType_prepend_tags)); tConfigMap.put(measurement, tConfig); } From 2b4d27c1966ff1f5a4e9dcc8417c135474becb41 Mon Sep 17 00:00:00 2001 From: "gookeun.lim" Date: Mon, 27 Aug 2018 13:33:08 +0900 Subject: [PATCH 38/53] =?UTF-8?q?Tomcat=208.0=20=EC=9D=98=20=20dbcp2=20pac?= =?UTF-8?q?kage=20=EB=AA=85=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java index 84b068287..1ec7ba2e3 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java @@ -48,7 +48,7 @@ public static void regist(String klass, String method) { } public JDBCConnectionOpenASM() { - AsmUtil.add(reserved, "org/apache/tomcat/dbcp/dbcp/BasicDataSource", "getConnection"); + AsmUtil.add(reserved, "org/apache/tomcat/dbcp/dbcp2/BasicDataSource", "getConnection"); AsmUtil.add(reserved, "org/apache/tomcat/jdbc/pool/DataSourceProxy", "getConnection"); AsmUtil.add(reserved, "org/apache/commons/dbcp/BasicDataSource", "getConnection"); AsmUtil.add(reserved, "org/apache/commons/dbcp2/BasicDataSource", "getConnection"); From 7bbc460b8a6a4492c19855e06a4307d9a384a35f Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Mon, 27 Aug 2018 22:01:58 +0900 Subject: [PATCH 39/53] [document] telegraf server configuration added --- scouter.document/main/Telegraf-Server.md | 236 ++++++++++++++++++++ scouter.document/main/Telegraf-Server_kr.md | 150 +++++++------ 2 files changed, 312 insertions(+), 74 deletions(-) create mode 100644 scouter.document/main/Telegraf-Server.md diff --git a/scouter.document/main/Telegraf-Server.md b/scouter.document/main/Telegraf-Server.md new file mode 100644 index 000000000..cdd83b857 --- /dev/null +++ b/scouter.document/main/Telegraf-Server.md @@ -0,0 +1,236 @@ +# Telegraf Server Feature +[![English](https://img.shields.io/badge/language-English-orange.svg)](Telegraf-Server.md) [![Korean](https://img.shields.io/badge/language-Korean-blue.svg)](Telegraf-Server_kr.md) + +It can be integrated with Telegraf using the Telegraf Server feature of the Scouter collector. + +The Scouter collector is now interoperable with the HTTP output of Telegraf and will be provided with dedicated telegraf-scouter output later. + - [Telegraf HTTP Output plugin](https://github.com/influxdata/telegraf/tree/master/plugins/outputs/http) + +You can monitor the performance information of various products through Telegraf's Input Plugin. Refer to the telegraf plugin page for current input. + - [Telegraf Input plugins](https://github.com/influxdata/telegraf/tree/master/plugins/inputs) + + +## Apply Telegraf Server function + +### 1. Enable the Telegraf Server option +First, the Collector's http server must be enabled. + - `net_http_server_enabled=true` + +And enable telegraf server function. + - `input_telegraf_enabled=true` + +If you want to change the http port, set it to `net_http_port=xxx`. The default value is 6180. +If you changed the above option, you must restart the collector. + +If the requested data needs to be checked, set `input_telegraf_debug_enabled=true' to log all the requested data. + +### 2. Telegraf Http output settings +Set the end point of the Telegraf http output to the scouter server set above. +```javascript + [[outputs.http]] + url = "http://my-scouter-server:6180/telegraf/metric" + timeout = "5s" + method = "POST" + data_format = "influx" +``` + +The scouter processes the request every 2 seconds and mainly be used with the real time chart, so the request interval of telegraf is also adjusted to be between 2 seconds and 10 seconds. + +```javascript +[agent] + ... + interval = "4s" + ... + flush_interval = "4s" +``` + +### 3. Set counter mapping to Scouter Collector +You must map fields of measurement that is passed in telegraf to the scouter counter. +There are a few things you need to do. +  - Set line protocol measurement to the monitoring family of scouter counter. +  - Set object type. +  - Set object name. +  - Map fields of line protocol to counters +  +Set the following items and replace the $measurement$ part with the actual measurement name. +The value on the right side of the equal sign indicates the default value. +```properties +input_telegraf_$measurement$_debug_enabled=false +input_telegraf_$measurement$_objFamily_base= +input_telegraf_$measurement$_host_tag=host +input_telegraf_$measurement$_host_mappings= +input_telegraf_$measurement$_objName_base= +input_telegraf_$measurement$_objName_append_tags= +input_telegraf_$measurement$_objType_base= +input_telegraf_$measurement$_objType_prepend_tags=scouter_obj_type_prefix +input_telegraf_$measurement$_objType_append_tags= +input_telegraf_$measurement$_tag_filter= +input_telegraf_$measurement$_counter_mappings= +``` +For example, if the measurement name is redis, `input_telegraf_$measurement$_debug_enabled` becomes` input_telegraf_$redis$_debug_enabled`. + +Let's take an example of telegraf's redis input. + +#### 3.1. Family Settings +Family can be thought of as a name that refers to a collection that has the same performance monitoring items. +For example, the Host Family has performance information such as cpu, memory, and disk io. + +Here we set Family to redis. +```properties +# In case of setting as below, Family is registered as X$redis internally to prevent duplication of name with already provided family. +input_telegraf_$redis$_objFamily_base=redis +``` + +#### 3.2. Host Mapping Settings +일반적으로 설정을 변경할 필요는 없으나 간혹 특정 line protocol이 host tag를 가지지 않을 수 있으니 이런 경우는 다음 내용을 참고하여 설정하도록 한다. +Usually, performance information is transmitted from several VMs, so it is necessary to identify the host name. +Generally, it is not necessary to change the setting, but sometimes a certain line protocol may not have a host tag. + +The host name is sent to the `host` tag of the line protocol. If the tag that identifies host name is not `host`, you can change it with the following option. + - `input_telegraf_$redis$_host_tag` + +If the transmitted host name is different from the host name set in the scouter, you can also configure the mappings. +(Usually the same.) + - `input_telegraf_$redis$_counter_mappings` + - eg) `input_telegraf_$redis$_counter_mappings=hostname1:hostname-S1,hostname2:hostname-S2` +If you configure as above, you can also configure easily by using the screen of Scouter client. +  - Enter `input_telegraf_$redis$_counter_mappings =` on the client's configuration input screen and double click on it, the following input window will pop up. + +![configure-widow-hostmapping.png](../img/main/configure-widow-hostmapping.png) + +#### 3.3. Object name settings +The scouter calls the monitored things **object**. +Now let's set the name of this object. + +The object name is the actually set to `/host-name/object-name`, so if the host is different, the same object name is OK. + +```properties +input_telegraf_$redis$_objName_base=redis +input_telegraf_$redis$_objName_append_tags=port +``` +I have set `port` in` input_telegraf_$redis$_objName_append_tags`, assuming there are multiple redis in one host. +The incoming data(line protocol) is shown below. + +>redis,**host**=sc-api-demo-s01.localdomain,**port**=30779,**scouter_obj_type_prefix**=SC-DEMO,**server**=172-0-0-0.internal keyspace_hits=5507814i,expired_keys=1694047i,total_commands_processed=17575212i 1535289664000000000 + +The first `redis` is **measurement**, followed by` host`, `port`,` obj_type_prefix`, and `server` are **tag**. +The following numeric information is called **field** in the line protocol. There are `keyspace_hits`,` expired_keys`, and `total_commands_processed` fields. +  +The object name defined by the above setting will eventually become **redis_30779**. +If you set `input_telegraf_$redis$_objName_append_tags` to `server,port`, the object name will be **redis_172-0-0-0.internal_30779**. + +#### 3.4. Object type settings +Object type is a set of objects that are monitored at one time by the scouter. +Generally, you can think of the same families in a system. + +예를 들어 Order 시스템의 여러 redis 인스턴스는 한번에 모니터링해야 하는 대상일 것이다. +이러한 단위를 scouter에서는 **object type**이라고 한다. +따라서 이 redis 인스턴스들의 object type을 정한다면, **ORDER\_SYSTEM\_redis**와 같은 식으로 정할 수 있을 것이다. +여기서 앞에 붙는 ORDER\_SYSTEM과 같은 prefix를 telegraf의 tag에 추가하고 scouter에서는 이를 조합하여 object type을 정하게 된다. +이 tag명은 `scouter_obj_type_prefix`이며, 이 값은 `input_telegraf_$redis$_objType_prepend_tags=xxx` 설정을 통해 변경할 수도 있다. + +For example, multiple redis instances of the Order system might be targets that you need to monitor at once. +These units are called **object type** in the scouter. +Therefore, if you specify the object type of these redis instances, you can set them like **ORDER\_SYSTEM\_redis**. +Here, prefixes such as `ORDER_SYSTEM` which precedes them are added to the telegraf's tag, and the scouter combines them to determine the object type. +This tag name is `scouter_obj_type_prefix` and this value can be changed by setting `input_telegraf_$redis$_objType_prepend_tags=xxx`. + +```properties +input_telegraf_$redis$_objType_base=redis +#input_telegraf_$redis$_objType_prepend_tags=scouter_obj_type_prefix +#input_telegraf_$redis$_objType_append_tags= +``` +This sets the object type to **X$SC-DEMO_redis**. +  +There are many ways to add tags to telegraf. The easiest way is to set them with global tags. +Or you can add tags to each input, and you can set it up in various ways. + +```javascript +[global_tags] + ## To prevent overlap with the built-in object types, 'X$' is automatically added by the scouter. + scouter_obj_type_prefix = "SC-DEMO" +``` + +#### 3.5. Counter mapping settings +Finally, set the field of the line protocol to the counter of the scouter. +```properties +input_telegraf_$redis$_counter_mappings=keyspace_hits:ks-hits:ks-hits:ea:true,&expired_keys:expired::ea:true +``` +Specify the comma-separated information for the field to be monitored as above. +Fields that are not set here are discarded, so it is better to avoid fields that are not being monitored, so that they are discarded in the telegraf and are not forwarded to the scouter. +The setting items of each field are separated by a colon. + + - `fn:cn:cd?:u?:t?:s?` + - `fn` - field name, **required** + - The field name passed in the line protocol. + - If you precede this name with &, it is designated as a delta counter. + - The delta counter is a counter showing the amount of change per second. + - If delta counter is specified, **_$delta** is added to name and **/s** is added to unit. + - If you put 2-&('&&') before this name, you have both normal and delta counters. + - `cn` - counter name, **required** + - It is the counter name in the scouter. + - `cd` - counter desc - optional, default : counter name + - This value is used when the scouter displays the counter on the screen. + - `u` - unit - optional + - It is the unit of the value. + - `t` - totalizable - optional, default : true + - Whether this value can be summarized. + - For example, throughput is true and memory utilization percent is false (it is strange to sum the memory usage percent of several VMs) + - If this value is true, you can open the total chart on the screen of the scouter. + - `s` - nomalizing seconds + - This is the size of the time window to obtain the mean value of the counter. + - default 0s for normal counter, default 30s for delta counter. + +Likewise, it is easier to configure via the client screen. + +![configure-widow-countermapping](../img/main/configure-widow-countermapping.png) + + +#### 3.6. Counter mapping - tag filter +It can only be collected if the tag has a certain tag value. +For example, when collecting cpu information of a VM with 4 cpu, the usage amount of each cpu and the usage amount of the entire cpu are all collected and can be classified by a specific tag value._ +_f you want to collect only if the value of `cpu` tag is `cpu-total` or `cpu-0`, set it as follows. +```properties +input_telegraf_$cpu$_tag_filter=cpu:cpu-total,cpu:cpu-0 +``` + +If you want to collect only the value of `cpu` tag except `cpu-total`, set this. +```properties +input_telegraf_$cpu$_tag_filter=cpu:!cpu-total +``` + + +### 4. check counters.site.xml +If the telegraf performance information is requested to the scouter collector after setting up as above, the meta information about the counter is automatically registered in counters.site.xml. +However, even if you delete it from the configuration, the counter meta information is not deleted. +To delete it, you have to delete it directly in counters.site.xml. Especially, if you modify the same counter many times, garbage of the same type may remain. Check this in counters.site.xml and modify it appropriately. +(If you modify counters.site.xml, you must restart the collector server.) + +counters.site.xml is located in the collector's conf directory. + - counters-site.xml Example (Below are the automatically registered counters. The contents were briefly revised.) +```xml + + + + + + + + + + + + + + + + + + + + + + + +``` + diff --git a/scouter.document/main/Telegraf-Server_kr.md b/scouter.document/main/Telegraf-Server_kr.md index eabc64d60..4ece268a2 100644 --- a/scouter.document/main/Telegraf-Server_kr.md +++ b/scouter.document/main/Telegraf-Server_kr.md @@ -6,7 +6,7 @@ Scouter collector는 현재 Telegraf의 HTTP output과 연동이 가능하며 te - [Telegraf HTTP Output plugin](https://github.com/influxdata/telegraf/tree/master/plugins/outputs/http) Telegraf의 Input Plugin을 통해 다양한 제품의 성능 정보를 모니터링 할 수 있으며 현재 제공되는 Input들은 telegraf plugin 페이지를 참고한다. - - [Telegraf HTTP Input plugin](https://github.com/influxdata/telegraf/tree/master/plugins/inputs) + - [Telegraf Input plugins](https://github.com/influxdata/telegraf/tree/master/plugins/inputs) ## Telegraf Server 기능 적용 @@ -18,13 +18,13 @@ Telegraf의 Input Plugin을 통해 다양한 제품의 성능 정보를 모니 그리고 telegraf server 기능을 활성화 한다. - `input_telegraf_enabled=true` -만약 http port를 변경하고 싶다면 `net_http_port` 를 변경한다. 기본값은 6180 이다. +만약 http port를 변경하고 싶다면 `net_http_port=xxx` 로 설정한다. 기본값은 6180 이다. 위 옵션을 변경하였으면 collector를 재시작하여야 한다. -Debug가 필요한 경우 `input_telegraf_debug_enabled`을 true로 설정하면 요청되는 모든 데이터를 로깅한다. +요청되는 data의 확인이 필요한 경우 `input_telegraf_debug_enabled=true` 로 설정하면 요청되는 모든 데이터를 로깅한다. ### 2. Telegraf Http output 설정 -Telegraf output의 end point를 위에서 설정한 scouter server로 설정한다. +Telegraf http output의 end point를 위에서 설정한 scouter server로 설정한다. ```javascript [[outputs.http]] url = "http://my-scouter-server:6180/telegraf/metric" @@ -43,16 +43,16 @@ Scouter는 2초마다 요청을 처리하고 실시간 차트를 주로 활용 ``` ### 3. Scouter Collector 에 counter mapping 설정 -모니터링 할 Telegraf의 measurement의 field를 scouter의 counter에 mapping 해야한다. -여기선 몇가지 작업이 필요한데 요약하면 아래와 같은 항목들을 설정한다. - - line protocol measurement를 scouter counter의 family로 설정 - - object type을 설정 (한번에 모니터링할 그룹 - 일반적으로 시스템 구분과 동일) - - object name을 설정 (어느 서버의 성능 정보인가?) - - line protocol field를 counter에 매핑 - -아래 항목들로 설정하는데 중간에 $measurement$를 실제 measurement 이름으로 대체한다. +telegraf에서 전달되는 measurement의 field를 scouter counter에 mapping 해야한다. +몇 가지 작업이 필요한데, 요약하자면 아래와 같은 항목들을 설정하면 된다. + - line protocol measurement를 scouter counter의 monitoring family로 설정 + - object type을 설정 + - object name을 설정 + - line protocol의 field를 counter에 매핑 + +아래 항목들로 설정하는데 중간에 $measurement$ 부분을 실제 measurement 이름으로 대체한다. 항목에 값이 있는 부분은 기본값을 나타낸다. -```ini +```properties input_telegraf_$measurement$_debug_enabled=false input_telegraf_$measurement$_objFamily_base= input_telegraf_$measurement$_host_tag=host @@ -70,89 +70,92 @@ input_telegraf_$measurement$_counter_mappings= telegraf의 redis input을 예를 들어 설명해 보겠다. #### 3.1. Family 설정 -Family는 동일한 성능 metric를 가지는 단위라고 생각하면 된다. -예를 들어 Host Family는 cpu, memory, disk io 등의 성능 메트릭을 가진다. -Family를 redis로 설정하자. -```ini -#이미 제공되는 family와 이름 중복을 막기위해 X$redis 라는 이름으로 Family가 등록된다. +Family는 동일한 성능 모니터링 항목을 가지고 있는 집합을 지칭하는 이름이라고 생각하면 된다. +예를 들어 Host Family는 cpu, memory, disk io 등의 성능 정보를 가진다. + +여기서는 Family를 redis로 설정한다. +```properties +#아래와 같이 설정시, 이미 제공되는 family와 이름 중복을 막기 위해 내부적으로는 X$redis 라는 이름으로 Family가 등록된다. input_telegraf_$redis$_objFamily_base=redis ``` #### 3.2. Host Mapping 설정 -여러대의 장비에서 성능 정보를 전송하므로 Host 정보는 필수이다. -보통 기본 설정으로 잘 동작하므로 설정을 변경할 필요는 없으나 간혹 특정 line protocol이 host tag를 가지지 않을 수 있으니 이런 경우는 다음 내용을 참고하여 설정하도록 한다. -일반적으로 line protocol의 `host` tag에 host name 정보가 전송되는데 만약 host 정보를 알 수 있는 tag가 `host`가 아니라면 아래 옵션으로 이를 변경할 수 있다. +보통 여러대의 장비에서 성능 정보를 전송하므로 이를 구분하기 위한 Host 정보는 필수이다. +일반적으로 설정을 변경할 필요는 없으나 간혹 특정 line protocol이 host tag를 가지지 않을 수 있으니 이런 경우는 다음 내용을 참고하여 설정하도록 한다. + +line protocol의 `host` tag에 host name 정보가 전송되는데 만약 host 정보를 알 수 있는 tag가 `host`가 아니라면 아래 옵션으로 이를 변경할 수 있다. - `input_telegraf_$redis$_host_tag` -그리고 전송된 host name이 scouter에서 설정된 host name과 다르다면 이에 대한 mapping도 설정할 수 있다. -(일반적으로는 동일하다.) +그리고 전송된 host name이 scouter에서 설정된 host name과 다르다면 이에 대한 mapping도 설정할 수 있다. +(보통 동일하다.) - `input_telegraf_$redis$_counter_mappings` - eg) `input_telegraf_$redis$_counter_mappings=hostname1:hostname-S1,hostname2:hostname-S2` -위와 같이 입력하는 경우 Scouter client의 화면을 이용하면 보다 쉽게 입력이 가능하다. - - Client의 설정 입력 화면에서 `input_telegraf_$redis$_counter_mappings=` 이라고 입력하고 이를 더블클릭하면 아래와 같은 입력창을 통해 입력이 가능하다. +위와 같이 입력하는 경우 Scouter client의 화면을 이용하면 보다 쉽게 입력이 가능하다. + - Client의 설정 입력 화면에서 `input_telegraf_$redis$_counter_mappings=` 이라고 입력하고 이를 더블클릭하면 아래와 같은 입력창이 뜨는데, 이를 통해 입력도 가능하다. ![configure-widow-hostmapping.png](../img/main/configure-widow-hostmapping.png) #### 3.3. Object name 설정 -Scouter는 모니터링 대상을 object라고 부른다. -이 대상의 이름을 설정한다. -object name은 실제 `/host-name/object-name` 으로 설정되므로 host가 다르다면 object name이 중복되어도 상관없다. +Scouter는 모니터링 대상을 object라고 부른다. +이 대상의 이름을 설정한다. +object name은 실제 `/host-name/object-name` 으로 설정되므로 host가 다르다면 object name이 중복되어도 상관없다. -```ini +```properties input_telegraf_$redis$_objName_base=redis input_telegraf_$redis$_objName_append_tags=port ``` -`input_telegraf_$redis$_objName_append_tags`에 `port`를 설정했는데 이는 하나의 host에 여러개의 redis가 존재하는 경우를 가정한 설정이다. +`input_telegraf_$redis$_objName_append_tags`에 `port`를 설정했는데 이는 하나의 host에 여러개의 redis가 존재하는 경우를 가정한 설정이다. telegraf를 통해 들어오는 입력값(line protocol)은 아래와 같은데 >redis,**host**=sc-api-demo-s01.localdomain,**port**=30779,**scouter_obj_type_prefix**=SC-DEMO,**server**=172-0-0-0.internal keyspace_hits=5507814i,expired_keys=1694047i,total_commands_processed=17575212i 1535289664000000000 -맨 앞의 `redis`는 **measurement**이고, 그 뒤에 나오는 `host`, `port`, `obj_type_prefix`, `server`는 **tag**이다. -이어 나오는 수치 정보는 line protocol 에서는 **field**라고 한다. 여기엔 `keyspace_hits`, `expired_keys`, `total_commands_processed`라는 field가 존재한다. - -위 설정으로 정해지는 object name은 결국 **redis_30779** 가 된다. -만약 `input_telegraf_$redis$_objName_append_tags`를 `server,port`로 설정한다면, object name은 **redis_172-0-0-0.internal_30779**가 된다. +맨 앞의 `redis`는 **measurement**이고, 그 뒤에 나오는 `host`, `port`, `obj_type_prefix`, `server`는 **tag**이다. +이어 나오는 수치 정보는 line protocol 에서는 **field**라고 한다. 여기엔 `keyspace_hits`, `expired_keys`, `total_commands_processed`라는 field가 존재한다. + +위 설정으로 정해지는 object name은 결국 **redis_30779** 가 된다. +만약 `input_telegraf_$redis$_objName_append_tags`를 `server,port`로 설정한다면, object name은 **redis_172-0-0-0.internal_30779**가 된다. #### 3.4. Object type 설정 -object type은 scouter에서 한번에 모니터링하는 대상의 집합이다. -일반적으로 하나의 system에 존재하는 동일한 Family들을 생각하면 된다. - -예를 들어 Order 시스템의 여러 redis 인스턴스는 한번에 모니터링해야 하는 대상일 것이다. -이러한 단위를 scouter에서는 **object type**이라고 한다. -따라서 이 redis 인스턴스들의 object type을 정한다면, **ORDER\_SYSTEM\_redis**와 같은 식으로 정할 수 있을 것이다. -여기서 앞에 붙는 ORDER\_SYSTEM과 같은 prefix를 telegraf의 tag에 추가하고 scouter에서는 이를 조합하여 object type을 정하게 된다. -이 tag명은 `scouter_obj_type_prefix`이며 `input_telegraf_$redis$_objType_prepend_tags=xxx` 설정을 통해 변경할 수도 있다. - -```ini +object type은 scouter에서 한번에 모니터링하는 대상의 집합이다. +일반적으로 하나의 system에 존재하는 동일한 Family들을 생각하면 된다. + +예를 들어 Order 시스템의 여러 redis 인스턴스는 한번에 모니터링해야 하는 대상일 것이다. +이러한 단위를 scouter에서는 **object type**이라고 한다. +따라서 이 redis 인스턴스들의 object type을 정한다면, **ORDER\_SYSTEM\_redis**와 같은 식으로 정할 수 있을 것이다. +여기서 앞에 붙는 ORDER\_SYSTEM과 같은 prefix를 telegraf의 tag에 추가하고 scouter에서는 이를 조합하여 object type을 정하게 된다. +이 tag명은 `scouter_obj_type_prefix`이며, 이 값은 `input_telegraf_$redis$_objType_prepend_tags=xxx` 설정을 통해 변경할 수도 있다. + +```properties input_telegraf_$redis$_objType_base=redis #input_telegraf_$redis$_objType_prepend_tags=scouter_obj_type_prefix #input_telegraf_$redis$_objType_append_tags= ``` 이렇게 설정하면 object type은 **X$SC-DEMO_redis**가 된다. - -telegraf에 tag를 추가할 수 있는 여러가지 방법이 있는데 가장 쉬운 방법은 global tag로 설정하는 방법이다. -이 외에 각 input 별로 설정하는 등 다양한 방식으로 설정이 가능하다. + +telegraf에 tag를 추가할 수 있는 여러가지 방법이 있는데 가장 쉬운 방법은 global tag로 설정하는 방법이다. +또는 각 input 별로 tag를 추가하는 등 다양한 방식으로 설정이 가능하다. ```javascript [global_tags] - ## 기본 제공되는 object type과 중복 방지를 위해 X$는 자동으로 붙는다. + ## 기본 제공되는 object type과 중복 방지를 위해 X$는 scouter에서 자동으로 추가한다. scouter_obj_type_prefix = "SC-DEMO" ``` #### 3.5. Counter mapping 설정 -이제 line protocol의 field를 scouter의 counter로 설정한다. -```ini +마지막으로 line protocol의 field를 scouter의 counter로 설정한다. +```properties input_telegraf_$redis$_counter_mappings=keyspace_hits:ks-hits:ks-hits:ea:true,&expired_keys:expired::ea:true ``` -위와 같이 모니터링할 field에 대한 정보를 comma로 구분하여 명시해 준다. -여기서 설정되지 않은 field는 버려지므로 모니터링 대상이 아닌 field는 telegraf에서 버려지도록 처리하여 scouter로 전달되지 않도록 하는 것이 더 좋다. -각 field의 설정 항목은 colon으로 구분되는데 내용은 아래와 같다. - - **fn:cn:cd?:u?:t?:s?** +위와 같이 모니터링할 field에 대한 정보를 comma로 구분하여 명시해 준다. +여기서 설정되지 않은 field는 버려지므로 모니터링 대상이 아닌 field는 telegraf에서 버려지도록 처리하여 scouter로 전달되지 않도록 하는 것이 더 좋다. +각 field의 설정 항목은 colon으로 구분되는데 내용은 아래와 같다. + - `fn:cn:cd?:u?:t?:s?` - `fn` - field name, **required** - line protocol에서 전달되는 field명이다. - 만약 이 이름앞에 &를 붙이게 되면 delta counter로 지정된다. - delta counter는 초당 변경량을 보여주는 counter이다. - - 만약 이 이름앞에 &&를 두개 붙이게 되면 normal counter와 delta counter를 둘 다 보여주게 된다. + - delta counter로 지정되면 name에 **_$delta**가 추가되며 unit에는 **/s**가 추가된다.. + - 만약 이 이름앞에 &&를 두개 붙이게 되면 normal counter와 delta counter를 둘 다 가지게 된다. - `cn` - counter name, **required** - scouter에서의 counter 명이다. - `cd` - counter desc - optional, default : counter name @@ -164,37 +167,36 @@ input_telegraf_$redis$_counter_mappings=keyspace_hits:ks-hits:ks-hits:ea:true,&e - 예를 들어 throughput은 true이고 memory 사용율은 false이다.(여러 VM의 memory 사용율을 sum하여 보여주면 이상하다.) - 이 값이 true인 경우 scouter의 화면에서 total 차트를 열 수 있다. - `s` - nomalizing seconds - - counter의 평균값을 구하는 time window의 값이다. - - default 0s, delta counter의 경우는 30s이다. - -마찬 가지로 client 화면을 통해 보다 쉽게 설정할 수 있다. + - counter의 평균값을 구하는 time window의 크기이다. + - default 0s, delta counter의 경우는 default 30s이다. +마찬 가지로 client 화면을 통해 보다 쉽게 설정할 수 있다. ![configure-widow-countermapping](../img/main/configure-widow-countermapping.png) #### 3.6. Counter mapping - tag filter -전송되는 항목중에 특정한 tag 값을 가지는 경우만 수집할 수 있다. -예를 들어 4개의 cpu를 가진 VM의 cpu 정보를 수집하는데 이때 각 cpu별 사용량, 전체 cpu의 사용량이 모두 수집되고 이를 특정 tag값으로 구분할 수 있다.. -만약 `cpu` tag의 값이 cpu-total, cpu-0인 경우만 수집하기를 원한다면 아래와 같이 설정한다. -```ini +전송되는 항목중에 특정한 tag 값을 가지는 경우만 수집할 수 있다. +예를 들어 4개의 cpu를 가진 VM의 cpu 정보를 수집하는데 이때 각 cpu별 사용량, 전체 cpu의 사용량이 모두 수집되고 이를 특정 tag값으로 구분할 수 있다. +만약 `cpu` tag의 값이 cpu-total, cpu-0인 경우만 수집하기를 원한다면 아래와 같이 설정한다. +```properties input_telegraf_$cpu$_tag_filter=cpu:cpu-total,cpu:cpu-0 ``` -만약 `cpu` tag의 값이 cpu-total만 제외하고 수집하고 싶다면 이렇게 설정한다. -```ini +만약 `cpu` tag의 값이 cpu-total만 제외하고 수집하고 싶다면 이렇게 설정한다. +```properties input_telegraf_$cpu$_tag_filter=cpu:!cpu-total ``` ### 4. counters.site.xml 확인 -위와 같이 설정한 후 telegraf를 통해 해당 정보가 scouter collector로 들어오면 counter에 대한 meta 정보가 counters.site.xml에 자동으로 등록된다. -설정에서 삭제한다고 해당 counter의 meta 정보가 삭제되지는 않는다. -이를 삭제하기 위해서는 counters.site.xml에서 직접 삭제하여야 하며 특히 여러번 수정하면 동일한 type들의 garbage가 남을 수 있으므로 이때는 counters.site.xml에서 이를 확인하고 적절히 수정하도록 한다. -(counters.site.xml을 수정하면 collector server를 재시작하여야 한다.) - -counters.site.xml은 collector의 conf 디렉토리에 위치한다. - - - counters-site.xml 예제 (간략하게 수정됨) +위와 같이 설정한 후 telegraf 성능 정보가 scouter collector로 요청되면 해당 counter에 대한 meta 정보가 counters.site.xml에 자동으로 등록된다. +단 설정에서 삭제한다고 해당 counter의 meta 정보가 삭제되지는 않는다. +이를 삭제하기 위해서는 counters.site.xml에서 직접 삭제하여야 하며 특히 동일한 counter에 대해 여러번 수정하다보면 동일한 type들의 garbage가 남을 수 있으므로 이때는 counters.site.xml에서 이를 확인하고 적절히 수정하도록 한다. +(counters.site.xml을 수정하면 collector server를 재시작하여야 한다.) + +counters.site.xml은 collector의 conf 디렉토리에 위치한다. + + - counters-site.xml 예제 (아래는 자동으로 등록된 counter들이다. 내용은 간략하게 수정되었다.) ```xml From 4b1fa243a3c3c5952631fee729b56b73c3084cc8 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Mon, 27 Aug 2018 22:08:54 +0900 Subject: [PATCH 40/53] [document] telegraf server configuration added --- scouter.document/main/Telegraf-Server.md | 133 ++++++++++---------- scouter.document/main/Telegraf-Server_kr.md | 130 +++++++++---------- 2 files changed, 129 insertions(+), 134 deletions(-) diff --git a/scouter.document/main/Telegraf-Server.md b/scouter.document/main/Telegraf-Server.md index cdd83b857..eb3a73d45 100644 --- a/scouter.document/main/Telegraf-Server.md +++ b/scouter.document/main/Telegraf-Server.md @@ -1,31 +1,31 @@ # Telegraf Server Feature [![English](https://img.shields.io/badge/language-English-orange.svg)](Telegraf-Server.md) [![Korean](https://img.shields.io/badge/language-Korean-blue.svg)](Telegraf-Server_kr.md) -It can be integrated with Telegraf using the Telegraf Server feature of the Scouter collector. +It can be integrated with Telegraf using the Telegraf Server feature of the Scouter collector. -The Scouter collector is now interoperable with the HTTP output of Telegraf and will be provided with dedicated telegraf-scouter output later. +The Scouter collector is now interoperable with the HTTP output of Telegraf and will be provided with dedicated telegraf-scouter output later. - [Telegraf HTTP Output plugin](https://github.com/influxdata/telegraf/tree/master/plugins/outputs/http) -You can monitor the performance information of various products through Telegraf's Input Plugin. Refer to the telegraf plugin page for current input. +You can monitor the performance information of various products through Telegraf's Input Plugin. Refer to the telegraf plugin page for current input. - [Telegraf Input plugins](https://github.com/influxdata/telegraf/tree/master/plugins/inputs) ## Apply Telegraf Server function ### 1. Enable the Telegraf Server option -First, the Collector's http server must be enabled. +First, the Collector's http server must be enabled. - `net_http_server_enabled=true` -And enable telegraf server function. +And enable telegraf server function. - `input_telegraf_enabled=true` -If you want to change the http port, set it to `net_http_port=xxx`. The default value is 6180. -If you changed the above option, you must restart the collector. +If you want to change the http port, set it to `net_http_port=xxx`. The default value is 6180. +If you changed the above option, you must restart the collector. If the requested data needs to be checked, set `input_telegraf_debug_enabled=true' to log all the requested data. ### 2. Telegraf Http output settings -Set the end point of the Telegraf http output to the scouter server set above. +Set the end point of the Telegraf http output to the scouter server set above. ```javascript [[outputs.http]] url = "http://my-scouter-server:6180/telegraf/metric" @@ -34,7 +34,7 @@ Set the end point of the Telegraf http output to the scouter server set above. data_format = "influx" ``` -The scouter processes the request every 2 seconds and mainly be used with the real time chart, so the request interval of telegraf is also adjusted to be between 2 seconds and 10 seconds. +The scouter processes the request every 2 seconds and mainly be used with the real time chart, so the request interval of telegraf is also adjusted to be between 2 seconds and 10 seconds. ```javascript [agent] @@ -45,15 +45,15 @@ The scouter processes the request every 2 seconds and mainly be used with the re ``` ### 3. Set counter mapping to Scouter Collector -You must map fields of measurement that is passed in telegraf to the scouter counter. -There are a few things you need to do. +You must map fields of measurement that is passed in telegraf to the scouter counter. +There are a few things you need to do.   - Set line protocol measurement to the monitoring family of scouter counter.   - Set object type.   - Set object name.   - Map fields of line protocol to counters -  -Set the following items and replace the $measurement$ part with the actual measurement name. -The value on the right side of the equal sign indicates the default value. +  +Set the following items and replace the $measurement$ part with the actual measurement name. +The value on the right side of the equal sign indicates the default value. ```properties input_telegraf_$measurement$_debug_enabled=false input_telegraf_$measurement$_objFamily_base= @@ -67,14 +67,14 @@ input_telegraf_$measurement$_objType_append_tags= input_telegraf_$measurement$_tag_filter= input_telegraf_$measurement$_counter_mappings= ``` -For example, if the measurement name is redis, `input_telegraf_$measurement$_debug_enabled` becomes` input_telegraf_$redis$_debug_enabled`. - -Let's take an example of telegraf's redis input. +For example, if the measurement name is redis, `input_telegraf_$measurement$_debug_enabled` becomes` input_telegraf_$redis$_debug_enabled`. + +Let's take an example of telegraf's redis input. #### 3.1. Family Settings -Family can be thought of as a name that refers to a collection that has the same performance monitoring items. -For example, the Host Family has performance information such as cpu, memory, and disk io. - +Family can be thought of as a name that refers to a collection that has the same performance monitoring items. +For example, the Host Family has performance information such as cpu, memory, and disk io. + Here we set Family to redis. ```properties # In case of setting as below, Family is registered as X$redis internally to prevent duplication of name with already provided family. @@ -82,69 +82,64 @@ input_telegraf_$redis$_objFamily_base=redis ``` #### 3.2. Host Mapping Settings -일반적으로 설정을 변경할 필요는 없으나 간혹 특정 line protocol이 host tag를 가지지 않을 수 있으니 이런 경우는 다음 내용을 참고하여 설정하도록 한다. -Usually, performance information is transmitted from several VMs, so it is necessary to identify the host name. -Generally, it is not necessary to change the setting, but sometimes a certain line protocol may not have a host tag. - +일반적으로 설정을 변경할 필요는 없으나 간혹 특정 line protocol이 host tag를 가지지 않을 수 있으니 이런 경우는 다음 내용을 참고하여 설정하도록 한다. +Usually, performance information is transmitted from several VMs, so it is necessary to identify the host name. +Generally, it is not necessary to change the setting, but sometimes a certain line protocol may not have a host tag. + The host name is sent to the `host` tag of the line protocol. If the tag that identifies host name is not `host`, you can change it with the following option. - `input_telegraf_$redis$_host_tag` -If the transmitted host name is different from the host name set in the scouter, you can also configure the mappings. -(Usually the same.) +If the transmitted host name is different from the host name set in the scouter, you can also configure the mappings. +(Usually the same.) - `input_telegraf_$redis$_counter_mappings` - eg) `input_telegraf_$redis$_counter_mappings=hostname1:hostname-S1,hostname2:hostname-S2` -If you configure as above, you can also configure easily by using the screen of Scouter client. -  - Enter `input_telegraf_$redis$_counter_mappings =` on the client's configuration input screen and double click on it, the following input window will pop up. +If you configure as above, you can also configure easily by using the screen of Scouter client. +  - Enter `input_telegraf_$redis$_counter_mappings =` on the client's configuration input screen and double click on it, the following input window will pop up. ![configure-widow-hostmapping.png](../img/main/configure-widow-hostmapping.png) #### 3.3. Object name settings -The scouter calls the monitored things **object**. -Now let's set the name of this object. - +The scouter calls the monitored things **object**. +Now let's set the name of this object. + The object name is the actually set to `/host-name/object-name`, so if the host is different, the same object name is OK. ```properties input_telegraf_$redis$_objName_base=redis input_telegraf_$redis$_objName_append_tags=port ``` -I have set `port` in` input_telegraf_$redis$_objName_append_tags`, assuming there are multiple redis in one host. +I have set `port` in` input_telegraf_$redis$_objName_append_tags`, assuming there are multiple redis in one host. The incoming data(line protocol) is shown below. - + >redis,**host**=sc-api-demo-s01.localdomain,**port**=30779,**scouter_obj_type_prefix**=SC-DEMO,**server**=172-0-0-0.internal keyspace_hits=5507814i,expired_keys=1694047i,total_commands_processed=17575212i 1535289664000000000 -The first `redis` is **measurement**, followed by` host`, `port`,` obj_type_prefix`, and `server` are **tag**. -The following numeric information is called **field** in the line protocol. There are `keyspace_hits`,` expired_keys`, and `total_commands_processed` fields. -  -The object name defined by the above setting will eventually become **redis_30779**. -If you set `input_telegraf_$redis$_objName_append_tags` to `server,port`, the object name will be **redis_172-0-0-0.internal_30779**. +The first `redis` is **measurement**, followed by` host`, `port`,` obj_type_prefix`, and `server` are **tag**. + +The following numeric information is called **field** in the line protocol. There are `keyspace_hits`,` expired_keys`, and `total_commands_processed` fields. +  +The object name defined by the above setting will eventually become **redis_30779**. +If you set `input_telegraf_$redis$_objName_append_tags` to `server,port`, the object name will be **redis_172-0-0-0.internal_30779**. #### 3.4. Object type settings -Object type is a set of objects that are monitored at one time by the scouter. -Generally, you can think of the same families in a system. - -예를 들어 Order 시스템의 여러 redis 인스턴스는 한번에 모니터링해야 하는 대상일 것이다. -이러한 단위를 scouter에서는 **object type**이라고 한다. -따라서 이 redis 인스턴스들의 object type을 정한다면, **ORDER\_SYSTEM\_redis**와 같은 식으로 정할 수 있을 것이다. -여기서 앞에 붙는 ORDER\_SYSTEM과 같은 prefix를 telegraf의 tag에 추가하고 scouter에서는 이를 조합하여 object type을 정하게 된다. -이 tag명은 `scouter_obj_type_prefix`이며, 이 값은 `input_telegraf_$redis$_objType_prepend_tags=xxx` 설정을 통해 변경할 수도 있다. - -For example, multiple redis instances of the Order system might be targets that you need to monitor at once. -These units are called **object type** in the scouter. -Therefore, if you specify the object type of these redis instances, you can set them like **ORDER\_SYSTEM\_redis**. -Here, prefixes such as `ORDER_SYSTEM` which precedes them are added to the telegraf's tag, and the scouter combines them to determine the object type. -This tag name is `scouter_obj_type_prefix` and this value can be changed by setting `input_telegraf_$redis$_objType_prepend_tags=xxx`. - +Object type is a set of objects that are monitored at one time by the scouter. +Generally, you can think of the same families in a system. + +For example, multiple redis instances of the Order system might be targets that you need to monitor at once. +These units are called **object type** in the scouter. +Therefore, if you specify the object type of these redis instances, you can set them like **ORDER\_SYSTEM\_redis**. +Here, prefixes such as `ORDER_SYSTEM` which precedes them are added to the telegraf's tag, and the scouter combines them to determine the object type. +This tag name is `scouter_obj_type_prefix` and this value can be changed by setting `input_telegraf_$redis$_objType_prepend_tags=xxx` + ```properties input_telegraf_$redis$_objType_base=redis #input_telegraf_$redis$_objType_prepend_tags=scouter_obj_type_prefix #input_telegraf_$redis$_objType_append_tags= ``` -This sets the object type to **X$SC-DEMO_redis**. +This sets the object type to **X$SC-DEMO_redis**.   -There are many ways to add tags to telegraf. The easiest way is to set them with global tags. -Or you can add tags to each input, and you can set it up in various ways. - +There are many ways to add tags to telegraf. The easiest way is to set them with global tags. +Or you can add tags to each input, and you can set it up in various ways. + ```javascript [global_tags] ## To prevent overlap with the built-in object types, 'X$' is automatically added by the scouter. @@ -156,9 +151,9 @@ Finally, set the field of the line protocol to the counter of the scouter. ```properties input_telegraf_$redis$_counter_mappings=keyspace_hits:ks-hits:ks-hits:ea:true,&expired_keys:expired::ea:true ``` -Specify the comma-separated information for the field to be monitored as above. -Fields that are not set here are discarded, so it is better to avoid fields that are not being monitored, so that they are discarded in the telegraf and are not forwarded to the scouter. -The setting items of each field are separated by a colon. +Specify the comma-separated information for the field to be monitored as above. +Fields that are not set here are discarded, so it is better to avoid fields that are not being monitored, so that they are discarded in the telegraf and are not forwarded to the scouter. +The setting items of each field are separated by a colon. - `fn:cn:cd?:u?:t?:s?` - `fn` - field name, **required** @@ -181,13 +176,13 @@ The setting items of each field are separated by a colon. - This is the size of the time window to obtain the mean value of the counter. - default 0s for normal counter, default 30s for delta counter. -Likewise, it is easier to configure via the client screen. +Likewise, it is easier to configure via the client screen. ![configure-widow-countermapping](../img/main/configure-widow-countermapping.png) #### 3.6. Counter mapping - tag filter -It can only be collected if the tag has a certain tag value. +It can only be collected if the tag has a certain tag value. For example, when collecting cpu information of a VM with 4 cpu, the usage amount of each cpu and the usage amount of the entire cpu are all collected and can be classified by a specific tag value._ _f you want to collect only if the value of `cpu` tag is `cpu-total` or `cpu-0`, set it as follows. ```properties @@ -200,13 +195,13 @@ input_telegraf_$cpu$_tag_filter=cpu:!cpu-total ``` -### 4. check counters.site.xml -If the telegraf performance information is requested to the scouter collector after setting up as above, the meta information about the counter is automatically registered in counters.site.xml. -However, even if you delete it from the configuration, the counter meta information is not deleted. -To delete it, you have to delete it directly in counters.site.xml. Especially, if you modify the same counter many times, garbage of the same type may remain. Check this in counters.site.xml and modify it appropriately. -(If you modify counters.site.xml, you must restart the collector server.) - -counters.site.xml is located in the collector's conf directory. +### 4. check counters.site.xml +If the telegraf performance information is requested to the scouter collector after setting up as above, the meta information about the counter is automatically registered in counters.site.xml. +However, even if you delete it from the configuration, the counter meta information is not deleted. +To delete it, you have to delete it directly in counters.site.xml. Especially, if you modify the same counter many times, garbage of the same type may remain. Check this in counters.site.xml and modify it appropriately. +(If you modify counters.site.xml, you must restart the collector server.) + +counters.site.xml is located in the collector's conf directory. - counters-site.xml Example (Below are the automatically registered counters. The contents were briefly revised.) ```xml diff --git a/scouter.document/main/Telegraf-Server_kr.md b/scouter.document/main/Telegraf-Server_kr.md index 4ece268a2..69e937fda 100644 --- a/scouter.document/main/Telegraf-Server_kr.md +++ b/scouter.document/main/Telegraf-Server_kr.md @@ -1,27 +1,27 @@ # Telegraf Server Feature [![English](https://img.shields.io/badge/language-English-orange.svg)](Telegraf-Server.md) [![Korean](https://img.shields.io/badge/language-Korean-blue.svg)](Telegraf-Server_kr.md) -Scouter collector의 Telegraf Server 기능을 사용해 Telegraf와 통합해 사용할 수 있다. -Scouter collector는 현재 Telegraf의 HTTP output과 연동이 가능하며 telegraf-scouter 전용 output이 제공될 예정이다. +Scouter collector의 Telegraf Server 기능을 사용해 Telegraf와 통합해 사용할 수 있다. +Scouter collector는 현재 Telegraf의 HTTP output과 연동이 가능하며 telegraf-scouter 전용 output이 제공될 예정이다. - [Telegraf HTTP Output plugin](https://github.com/influxdata/telegraf/tree/master/plugins/outputs/http) -Telegraf의 Input Plugin을 통해 다양한 제품의 성능 정보를 모니터링 할 수 있으며 현재 제공되는 Input들은 telegraf plugin 페이지를 참고한다. +Telegraf의 Input Plugin을 통해 다양한 제품의 성능 정보를 모니터링 할 수 있으며 현재 제공되는 Input들은 telegraf plugin 페이지를 참고한다. - [Telegraf Input plugins](https://github.com/influxdata/telegraf/tree/master/plugins/inputs) ## Telegraf Server 기능 적용 ### 1. Telegraf Server 옵션 활성화 -먼저 Collector의 http server 기능이 활성화 되어야 한다. +먼저 Collector의 http server 기능이 활성화 되어야 한다. - `net_http_server_enabled=true` -그리고 telegraf server 기능을 활성화 한다. +그리고 telegraf server 기능을 활성화 한다. - `input_telegraf_enabled=true` 만약 http port를 변경하고 싶다면 `net_http_port=xxx` 로 설정한다. 기본값은 6180 이다. -위 옵션을 변경하였으면 collector를 재시작하여야 한다. - -요청되는 data의 확인이 필요한 경우 `input_telegraf_debug_enabled=true` 로 설정하면 요청되는 모든 데이터를 로깅한다. +위 옵션을 변경하였으면 collector를 재시작하여야 한다. + +요청되는 data의 확인이 필요한 경우 `input_telegraf_debug_enabled=true` 로 설정하면 요청되는 모든 데이터를 로깅한다. ### 2. Telegraf Http output 설정 Telegraf http output의 end point를 위에서 설정한 scouter server로 설정한다. @@ -33,7 +33,7 @@ Telegraf http output의 end point를 위에서 설정한 scouter server로 설 data_format = "influx" ``` -Scouter는 2초마다 요청을 처리하고 실시간 차트를 주로 활용하므로 telegraf의 요청 간격도 가능한 2초 ~ 10초 사이로 조절한다. +Scouter는 2초마다 요청을 처리하고 실시간 차트를 주로 활용하므로 telegraf의 요청 간격도 가능한 2초 ~ 10초 사이로 조절한다. ```javascript [agent] ... @@ -43,14 +43,14 @@ Scouter는 2초마다 요청을 처리하고 실시간 차트를 주로 활용 ``` ### 3. Scouter Collector 에 counter mapping 설정 -telegraf에서 전달되는 measurement의 field를 scouter counter에 mapping 해야한다. -몇 가지 작업이 필요한데, 요약하자면 아래와 같은 항목들을 설정하면 된다. +telegraf에서 전달되는 measurement의 field를 scouter counter에 mapping 해야한다. +몇 가지 작업이 필요한데, 요약하자면 아래와 같은 항목들을 설정하면 된다. - line protocol measurement를 scouter counter의 monitoring family로 설정 - object type을 설정 - object name을 설정 - line protocol의 field를 counter에 매핑 - -아래 항목들로 설정하는데 중간에 $measurement$ 부분을 실제 measurement 이름으로 대체한다. + +아래 항목들로 설정하는데 중간에 $measurement$ 부분을 실제 measurement 이름으로 대체한다. 항목에 값이 있는 부분은 기본값을 나타낸다. ```properties input_telegraf_$measurement$_debug_enabled=false @@ -65,76 +65,76 @@ input_telegraf_$measurement$_objType_append_tags= input_telegraf_$measurement$_tag_filter= input_telegraf_$measurement$_counter_mappings= ``` -예를 들어 measurement가 redis라면 `input_telegraf_$measurement$_debug_enabled`는 `input_telegraf_$redis$_debug_enabled`가 된다. - -telegraf의 redis input을 예를 들어 설명해 보겠다. +예를 들어 measurement가 redis라면 `input_telegraf_$measurement$_debug_enabled`는 `input_telegraf_$redis$_debug_enabled`가 된다. + +telegraf의 redis input을 예를 들어 설명해 보겠다. #### 3.1. Family 설정 -Family는 동일한 성능 모니터링 항목을 가지고 있는 집합을 지칭하는 이름이라고 생각하면 된다. -예를 들어 Host Family는 cpu, memory, disk io 등의 성능 정보를 가진다. - -여기서는 Family를 redis로 설정한다. +Family는 동일한 성능 모니터링 항목을 가지고 있는 집합을 지칭하는 이름이라고 생각하면 된다. +예를 들어 Host Family는 cpu, memory, disk io 등의 성능 정보를 가진다. + +여기서는 Family를 redis로 설정한다. ```properties -#아래와 같이 설정시, 이미 제공되는 family와 이름 중복을 막기 위해 내부적으로는 X$redis 라는 이름으로 Family가 등록된다. +#아래와 같이 설정시, 이미 제공되는 family와 이름 중복을 막기 위해 내부적으로는 X$redis 라는 이름으로 Family가 등록된다. input_telegraf_$redis$_objFamily_base=redis ``` #### 3.2. Host Mapping 설정 -보통 여러대의 장비에서 성능 정보를 전송하므로 이를 구분하기 위한 Host 정보는 필수이다. -일반적으로 설정을 변경할 필요는 없으나 간혹 특정 line protocol이 host tag를 가지지 않을 수 있으니 이런 경우는 다음 내용을 참고하여 설정하도록 한다. - -line protocol의 `host` tag에 host name 정보가 전송되는데 만약 host 정보를 알 수 있는 tag가 `host`가 아니라면 아래 옵션으로 이를 변경할 수 있다. +보통 여러대의 장비에서 성능 정보를 전송하므로 이를 구분하기 위한 Host 정보는 필수이다. +일반적으로 설정을 변경할 필요는 없으나 간혹 특정 line protocol이 host tag를 가지지 않을 수 있으니 이런 경우는 다음 내용을 참고하여 설정하도록 한다. + +line protocol의 `host` tag에 host name 정보가 전송되는데 만약 host 정보를 알 수 있는 tag가 `host`가 아니라면 아래 옵션으로 이를 변경할 수 있다. - `input_telegraf_$redis$_host_tag` -그리고 전송된 host name이 scouter에서 설정된 host name과 다르다면 이에 대한 mapping도 설정할 수 있다. +그리고 전송된 host name이 scouter에서 설정된 host name과 다르다면 이에 대한 mapping도 설정할 수 있다. (보통 동일하다.) - `input_telegraf_$redis$_counter_mappings` - eg) `input_telegraf_$redis$_counter_mappings=hostname1:hostname-S1,hostname2:hostname-S2` -위와 같이 입력하는 경우 Scouter client의 화면을 이용하면 보다 쉽게 입력이 가능하다. - - Client의 설정 입력 화면에서 `input_telegraf_$redis$_counter_mappings=` 이라고 입력하고 이를 더블클릭하면 아래와 같은 입력창이 뜨는데, 이를 통해 입력도 가능하다. +위와 같이 입력하는 경우 Scouter client의 화면을 이용하면 보다 쉽게 입력이 가능하다. + - Client의 설정 입력 화면에서 `input_telegraf_$redis$_counter_mappings=` 이라고 입력하고 이를 더블클릭하면 아래와 같은 입력창이 뜨는데, 이를 통해 입력도 가능하다. ![configure-widow-hostmapping.png](../img/main/configure-widow-hostmapping.png) #### 3.3. Object name 설정 -Scouter는 모니터링 대상을 object라고 부른다. -이 대상의 이름을 설정한다. -object name은 실제 `/host-name/object-name` 으로 설정되므로 host가 다르다면 object name이 중복되어도 상관없다. +Scouter는 모니터링 대상을 object라고 부른다. +이 대상의 이름을 설정한다. +object name은 실제 `/host-name/object-name` 으로 설정되므로 host가 다르다면 object name이 중복되어도 상관없다. ```properties input_telegraf_$redis$_objName_base=redis input_telegraf_$redis$_objName_append_tags=port ``` -`input_telegraf_$redis$_objName_append_tags`에 `port`를 설정했는데 이는 하나의 host에 여러개의 redis가 존재하는 경우를 가정한 설정이다. +`input_telegraf_$redis$_objName_append_tags`에 `port`를 설정했는데 이는 하나의 host에 여러개의 redis가 존재하는 경우를 가정한 설정이다. -telegraf를 통해 들어오는 입력값(line protocol)은 아래와 같은데 +telegraf를 통해 들어오는 입력값(line protocol)은 아래와 같은데 >redis,**host**=sc-api-demo-s01.localdomain,**port**=30779,**scouter_obj_type_prefix**=SC-DEMO,**server**=172-0-0-0.internal keyspace_hits=5507814i,expired_keys=1694047i,total_commands_processed=17575212i 1535289664000000000 -맨 앞의 `redis`는 **measurement**이고, 그 뒤에 나오는 `host`, `port`, `obj_type_prefix`, `server`는 **tag**이다. -이어 나오는 수치 정보는 line protocol 에서는 **field**라고 한다. 여기엔 `keyspace_hits`, `expired_keys`, `total_commands_processed`라는 field가 존재한다. - -위 설정으로 정해지는 object name은 결국 **redis_30779** 가 된다. -만약 `input_telegraf_$redis$_objName_append_tags`를 `server,port`로 설정한다면, object name은 **redis_172-0-0-0.internal_30779**가 된다. +맨 앞의 `redis`는 **measurement**이고, 그 뒤에 나오는 `host`, `port`, `obj_type_prefix`, `server`는 **tag**이다. +이어 나오는 수치 정보는 line protocol 에서는 **field**라고 한다. 여기엔 `keyspace_hits`, `expired_keys`, `total_commands_processed`라는 field가 존재한다. + +위 설정으로 정해지는 object name은 결국 **redis_30779** 가 된다. +만약 `input_telegraf_$redis$_objName_append_tags`를 `server,port`로 설정한다면, object name은 **redis_172-0-0-0.internal_30779**가 된다. #### 3.4. Object type 설정 -object type은 scouter에서 한번에 모니터링하는 대상의 집합이다. -일반적으로 하나의 system에 존재하는 동일한 Family들을 생각하면 된다. - -예를 들어 Order 시스템의 여러 redis 인스턴스는 한번에 모니터링해야 하는 대상일 것이다. -이러한 단위를 scouter에서는 **object type**이라고 한다. -따라서 이 redis 인스턴스들의 object type을 정한다면, **ORDER\_SYSTEM\_redis**와 같은 식으로 정할 수 있을 것이다. -여기서 앞에 붙는 ORDER\_SYSTEM과 같은 prefix를 telegraf의 tag에 추가하고 scouter에서는 이를 조합하여 object type을 정하게 된다. -이 tag명은 `scouter_obj_type_prefix`이며, 이 값은 `input_telegraf_$redis$_objType_prepend_tags=xxx` 설정을 통해 변경할 수도 있다. +object type은 scouter에서 한번에 모니터링하는 대상의 집합이다. +일반적으로 하나의 system에 존재하는 동일한 Family들을 생각하면 된다. +예를 들어 Order 시스템의 여러 redis 인스턴스는 한번에 모니터링해야 하는 대상일 것이다. +이러한 단위를 scouter에서는 **object type**이라고 한다. +따라서 이 redis 인스턴스들의 object type을 정한다면, **ORDER\_SYSTEM\_redis**와 같은 식으로 정할 수 있을 것이다. +여기서 앞에 붙는 ORDER\_SYSTEM과 같은 prefix를 telegraf의 tag에 추가하고 scouter에서는 이를 조합하여 object type을 정하게 된다. +이 tag명은 `scouter_obj_type_prefix`이며, 이 값은 `input_telegraf_$redis$_objType_prepend_tags=xxx` 설정을 통해 변경할 수도 있다. + ```properties input_telegraf_$redis$_objType_base=redis #input_telegraf_$redis$_objType_prepend_tags=scouter_obj_type_prefix #input_telegraf_$redis$_objType_append_tags= ``` 이렇게 설정하면 object type은 **X$SC-DEMO_redis**가 된다. - -telegraf에 tag를 추가할 수 있는 여러가지 방법이 있는데 가장 쉬운 방법은 global tag로 설정하는 방법이다. -또는 각 input 별로 tag를 추가하는 등 다양한 방식으로 설정이 가능하다. + +telegraf에 tag를 추가할 수 있는 여러가지 방법이 있는데 가장 쉬운 방법은 global tag로 설정하는 방법이다. +또는 각 input 별로 tag를 추가하는 등 다양한 방식으로 설정이 가능하다. ```javascript [global_tags] ## 기본 제공되는 object type과 중복 방지를 위해 X$는 scouter에서 자동으로 추가한다. @@ -142,13 +142,13 @@ telegraf에 tag를 추가할 수 있는 여러가지 방법이 있는데 가장 ``` #### 3.5. Counter mapping 설정 -마지막으로 line protocol의 field를 scouter의 counter로 설정한다. +마지막으로 line protocol의 field를 scouter의 counter로 설정한다. ```properties input_telegraf_$redis$_counter_mappings=keyspace_hits:ks-hits:ks-hits:ea:true,&expired_keys:expired::ea:true ``` -위와 같이 모니터링할 field에 대한 정보를 comma로 구분하여 명시해 준다. -여기서 설정되지 않은 field는 버려지므로 모니터링 대상이 아닌 field는 telegraf에서 버려지도록 처리하여 scouter로 전달되지 않도록 하는 것이 더 좋다. -각 field의 설정 항목은 colon으로 구분되는데 내용은 아래와 같다. +위와 같이 모니터링할 field에 대한 정보를 comma로 구분하여 명시해 준다. +여기서 설정되지 않은 field는 버려지므로 모니터링 대상이 아닌 field는 telegraf에서 버려지도록 처리하여 scouter로 전달되지 않도록 하는 것이 더 좋다. +각 field의 설정 항목은 colon으로 구분되는데 내용은 아래와 같다. - `fn:cn:cd?:u?:t?:s?` - `fn` - field name, **required** - line protocol에서 전달되는 field명이다. @@ -170,31 +170,31 @@ input_telegraf_$redis$_counter_mappings=keyspace_hits:ks-hits:ks-hits:ea:true,&e - counter의 평균값을 구하는 time window의 크기이다. - default 0s, delta counter의 경우는 default 30s이다. -마찬 가지로 client 화면을 통해 보다 쉽게 설정할 수 있다. +마찬 가지로 client 화면을 통해 보다 쉽게 설정할 수 있다. ![configure-widow-countermapping](../img/main/configure-widow-countermapping.png) #### 3.6. Counter mapping - tag filter -전송되는 항목중에 특정한 tag 값을 가지는 경우만 수집할 수 있다. -예를 들어 4개의 cpu를 가진 VM의 cpu 정보를 수집하는데 이때 각 cpu별 사용량, 전체 cpu의 사용량이 모두 수집되고 이를 특정 tag값으로 구분할 수 있다. -만약 `cpu` tag의 값이 cpu-total, cpu-0인 경우만 수집하기를 원한다면 아래와 같이 설정한다. +전송되는 항목중에 특정한 tag 값을 가지는 경우만 수집할 수 있다. +예를 들어 4개의 cpu를 가진 VM의 cpu 정보를 수집하는데 이때 각 cpu별 사용량, 전체 cpu의 사용량이 모두 수집되고 이를 특정 tag값으로 구분할 수 있다. +만약 `cpu` tag의 값이 cpu-total, cpu-0인 경우만 수집하기를 원한다면 아래와 같이 설정한다. ```properties input_telegraf_$cpu$_tag_filter=cpu:cpu-total,cpu:cpu-0 ``` - -만약 `cpu` tag의 값이 cpu-total만 제외하고 수집하고 싶다면 이렇게 설정한다. + +만약 `cpu` tag의 값이 cpu-total만 제외하고 수집하고 싶다면 이렇게 설정한다. ```properties input_telegraf_$cpu$_tag_filter=cpu:!cpu-total ``` ### 4. counters.site.xml 확인 -위와 같이 설정한 후 telegraf 성능 정보가 scouter collector로 요청되면 해당 counter에 대한 meta 정보가 counters.site.xml에 자동으로 등록된다. -단 설정에서 삭제한다고 해당 counter의 meta 정보가 삭제되지는 않는다. -이를 삭제하기 위해서는 counters.site.xml에서 직접 삭제하여야 하며 특히 동일한 counter에 대해 여러번 수정하다보면 동일한 type들의 garbage가 남을 수 있으므로 이때는 counters.site.xml에서 이를 확인하고 적절히 수정하도록 한다. -(counters.site.xml을 수정하면 collector server를 재시작하여야 한다.) - -counters.site.xml은 collector의 conf 디렉토리에 위치한다. +위와 같이 설정한 후 telegraf 성능 정보가 scouter collector로 요청되면 해당 counter에 대한 meta 정보가 counters.site.xml에 자동으로 등록된다. +단 설정에서 삭제한다고 해당 counter의 meta 정보가 삭제되지는 않는다. +이를 삭제하기 위해서는 counters.site.xml에서 직접 삭제하여야 하며 특히 동일한 counter에 대해 여러번 수정하다보면 동일한 type들의 garbage가 남을 수 있으므로 이때는 counters.site.xml에서 이를 확인하고 적절히 수정하도록 한다. +(counters.site.xml을 수정하면 collector server를 재시작하여야 한다.) + +counters.site.xml은 collector의 conf 디렉토리에 위치한다. - counters-site.xml 예제 (아래는 자동으로 등록된 counter들이다. 내용은 간략하게 수정되었다.) ```xml From c33c866ce6303de3d5e6957099592444c92975da Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Mon, 27 Aug 2018 22:12:09 +0900 Subject: [PATCH 41/53] Update Telegraf-Server.md --- scouter.document/main/Telegraf-Server.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/scouter.document/main/Telegraf-Server.md b/scouter.document/main/Telegraf-Server.md index eb3a73d45..304d6b2e9 100644 --- a/scouter.document/main/Telegraf-Server.md +++ b/scouter.document/main/Telegraf-Server.md @@ -46,11 +46,11 @@ The scouter processes the request every 2 seconds and mainly be used with the re ### 3. Set counter mapping to Scouter Collector You must map fields of measurement that is passed in telegraf to the scouter counter. -There are a few things you need to do. -  - Set line protocol measurement to the monitoring family of scouter counter. -  - Set object type. -  - Set object name. -  - Map fields of line protocol to counters +There are a few things you need to do. + - Set line protocol measurement to the monitoring family of scouter counter. + - Set object type. + - Set object name. + - Map fields of line protocol to counters   Set the following items and replace the $measurement$ part with the actual measurement name. The value on the right side of the equal sign indicates the default value. @@ -82,7 +82,6 @@ input_telegraf_$redis$_objFamily_base=redis ``` #### 3.2. Host Mapping Settings -일반적으로 설정을 변경할 필요는 없으나 간혹 특정 line protocol이 host tag를 가지지 않을 수 있으니 이런 경우는 다음 내용을 참고하여 설정하도록 한다. Usually, performance information is transmitted from several VMs, so it is necessary to identify the host name. Generally, it is not necessary to change the setting, but sometimes a certain line protocol may not have a host tag. @@ -183,8 +182,8 @@ Likewise, it is easier to configure via the client screen. #### 3.6. Counter mapping - tag filter It can only be collected if the tag has a certain tag value. -For example, when collecting cpu information of a VM with 4 cpu, the usage amount of each cpu and the usage amount of the entire cpu are all collected and can be classified by a specific tag value._ -_f you want to collect only if the value of `cpu` tag is `cpu-total` or `cpu-0`, set it as follows. +For example, when collecting cpu information of a VM with 4 cpu, the usage amount of each cpu and the usage amount of the entire cpu are all collected and can be classified by a specific tag value. +if you want to collect only if the value of `cpu` tag is `cpu-total` or `cpu-0`, set it as follows. ```properties input_telegraf_$cpu$_tag_filter=cpu:cpu-total,cpu:cpu-0 ``` From 9ad4d6a385bf4ad58317f1847033cde63b22aba8 Mon Sep 17 00:00:00 2001 From: juliodias Date: Sun, 2 Sep 2018 09:19:11 -0300 Subject: [PATCH 42/53] Fix typo in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 628230f57..df1ac5741 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ SCOUTER is an open source APM like new relic and appdynamics. - OS - Linux, Windows, Unix - **Monitoring target (to-be : contributing welcome)** - - Redis, Apach HTTPD, nginX, Nodejs ... + - Redis, Apache HTTPD, nginX, Nodejs ... ![Screen](./scouter.document/img/main/dashboard-sample-1.png) From 5246b0637d6f36c2abad38051b88339ddb78650b Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Tue, 18 Sep 2018 21:53:15 +0900 Subject: [PATCH 43/53] Update JDBCConnectionOpenASM.java --- .../src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java b/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java index 1ec7ba2e3..44a0356dd 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java +++ b/scouter.agent.java/src/main/java/scouter/agent/asm/JDBCConnectionOpenASM.java @@ -48,6 +48,7 @@ public static void regist(String klass, String method) { } public JDBCConnectionOpenASM() { + AsmUtil.add(reserved, "org/apache/tomcat/dbcp/dbcp/BasicDataSource", "getConnection"); AsmUtil.add(reserved, "org/apache/tomcat/dbcp/dbcp2/BasicDataSource", "getConnection"); AsmUtil.add(reserved, "org/apache/tomcat/jdbc/pool/DataSourceProxy", "getConnection"); AsmUtil.add(reserved, "org/apache/commons/dbcp/BasicDataSource", "getConnection"); @@ -171,4 +172,4 @@ public void visitMaxs(int maxStack, int maxLocals) { mv.visitInsn(ATHROW); mv.visitMaxs(maxStack + 8, maxLocals + 2); } -} \ No newline at end of file +} From be8e4f69c18c17425540c37e4cfbd946b9bcaefd Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Tue, 18 Sep 2018 21:55:22 +0900 Subject: [PATCH 44/53] Update Setup.md --- scouter.document/main/Setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scouter.document/main/Setup.md b/scouter.document/main/Setup.md index e2bd7cf87..8fa4fb38e 100644 --- a/scouter.document/main/Setup.md +++ b/scouter.document/main/Setup.md @@ -30,7 +30,7 @@ cd ./scouter/server |____/ \___\___/ \__,_|\__\___|_| Scouter version 0.0.1 ${date} Open Source Performance Monitoring - System JRE version : 1.7.0_51 + System JRE version : 1.8.0_175 ``` ### 1.3. Network ports used by Collector server From 3c830d00cdbf96c1f7d299dfa7b71c19f5bb907b Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Tue, 18 Sep 2018 23:58:02 +0900 Subject: [PATCH 45/53] [agent] Changed IBM jdk to skip thread requests without nullpointer error --- .../src/main/java/scouter/util/ThreadUtil.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/scouter.common/src/main/java/scouter/util/ThreadUtil.java b/scouter.common/src/main/java/scouter/util/ThreadUtil.java index 8daa50f68..cb546daa5 100644 --- a/scouter.common/src/main/java/scouter/util/ThreadUtil.java +++ b/scouter.common/src/main/java/scouter/util/ThreadUtil.java @@ -17,22 +17,21 @@ package scouter.util; +import scouter.lang.pack.MapPack; +import scouter.lang.value.DecimalValue; +import scouter.lang.value.ListValue; +import scouter.lang.value.TextValue; + import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import scouter.lang.pack.MapPack; -import scouter.lang.value.DecimalValue; -import scouter.lang.value.ListValue; -import scouter.lang.value.TextValue; - public class ThreadUtil { public static void sleep(long tm) { try { @@ -158,6 +157,9 @@ public static MapPack getThreadList() { for (int i = 0; i < thread.length; i++) { ThreadInfo fo = tmb.getThreadInfo(thread[i]); + if (fo == null) { + continue; + } id.add(fo.getThreadId()); name.add(fo.getThreadName()); stat.add(fo.getThreadState().toString()); From 7ff90db9279df7a8033bf0a4f8efbb896acf8861 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Tue, 18 Sep 2018 23:58:50 +0900 Subject: [PATCH 46/53] [agent.java] sql literal parsing bug fix (erasing slash charter is fixed) --- .../src/main/java/scouter/util/EscapeLiteralSQL.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/scouter.common/src/main/java/scouter/util/EscapeLiteralSQL.java b/scouter.common/src/main/java/scouter/util/EscapeLiteralSQL.java index 9cf82a7cf..c651be1f4 100644 --- a/scouter.common/src/main/java/scouter/util/EscapeLiteralSQL.java +++ b/scouter.common/src/main/java/scouter/util/EscapeLiteralSQL.java @@ -17,7 +17,6 @@ package scouter.util; -import java.io.File; /** * bugfix : parse error for '*' by 2016.08.12 Paul S.J.Kim */ @@ -223,6 +222,8 @@ private void _slash() { comment_su++; parsedSql.append("/*"); status = STAT.COMMENT; + } else { + parsedSql.append(chars[pos]); } } } @@ -312,7 +313,13 @@ public static void main(String[] args) throws Exception { //FileUtil.save("d:/tmp/sample-query2.out", ec.parsedSql.toString().getBytes()); System.out.println("SQL Orgin: " + s); System.out.println("SQL Parsed: " + ec.getParsedSql()); - System.out.println("PARAM: " + ec.param); + System.out.println("PARAM: " + ec.param); + + s = "select 1 / 2 from dual"; + ec = new EscapeLiteralSQL(s).process(); + System.out.println("SQL Orgin: " + s); + System.out.println("SQL Parsed: " + ec.getParsedSql()); + System.out.println("PARAM: " + ec.param); } public String getParsedSql() { From 7112cf507e8520d4ff4358ef0448adf9d01f979e Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Fri, 28 Sep 2018 11:50:55 +0900 Subject: [PATCH 47/53] [agent.java] add profile size to xlog. --- .../scouter/agent/netio/data/DataProxy.java | 2 + .../scouter/agent/trace/ProfileCollector.java | 3 ++ .../scouter/agent/trace/TraceContext.java | 2 + .../java/scouter/agent/trace/TraceMain.java | 4 ++ .../src/scouter/client/xlog/ProfileText.java | 48 +++++++++++++++---- .../scouter/client/xlog/XLogFilterStatus.java | 4 +- .../client/xlog/dialog/XLogFilterDialog.java | 16 ++++++- .../client/xlog/views/XLogViewPainter.java | 43 ++++++++++++++++- .../main/java/scouter/lang/pack/XLogPack.java | 7 +++ 9 files changed, 117 insertions(+), 12 deletions(-) diff --git a/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java b/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java index 7af5c0b04..89936e02d 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java +++ b/scouter.agent.java/src/main/java/scouter/agent/netio/data/DataProxy.java @@ -222,6 +222,7 @@ public static void sendProfile(Step[] p, TraceContext context) { pk.profile = Step.toBytes(p); pk.service = context.serviceHash; pk.elapsed = (int) (System.currentTimeMillis() - context.startTime); + context.profileCount += p.length; sendDirect(pk); } public static void sendProfile(List p, TraceContext x) { @@ -231,6 +232,7 @@ public static void sendProfile(List p, TraceContext x) { pk.txid = x.txid; pk.objHash = conf.getObjHash(); pk.profile = Step.toBytes(p); + x.profileCount += p.size(); // udp.add(pk); sendDirect(pk); } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/ProfileCollector.java b/scouter.agent.java/src/main/java/scouter/agent/trace/ProfileCollector.java index bfcf725ef..d99f899eb 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/ProfileCollector.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/ProfileCollector.java @@ -100,6 +100,9 @@ public void close(boolean ok) { StepSingle[] newSteps = new StepSingle[pos]; System.arraycopy(steps, 0, newSteps, 0, pos); DataProxy.sendProfile(newSteps, context); + } else { + TraceContext context = TraceContextManager.getContext(); + context.profileCount = context.profileCount * -1; //already sent profile size.(set minus.) } } diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java index 6442510f7..6a719fd19 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceContext.java @@ -52,6 +52,8 @@ public TraceContext(boolean profile_summary) { // profile public IProfileCollector profile; + public int profileCount; + public long startTime; public long startCpu; public long latestCpu; diff --git a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java index d5374afe3..193fc9449 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java +++ b/scouter.agent.java/src/main/java/scouter/agent/trace/TraceMain.java @@ -475,6 +475,8 @@ public static void endHttpServiceFinal(TraceContext ctx, Object request, Object } ctx.profile.close(discardMode == XLogDiscard.NONE ? true : false); + pack.profileCount = ctx.profileCount; + if (ctx.group != null) { pack.group = DataProxy.sendGroup(ctx.group); } @@ -690,6 +692,8 @@ public static void endService(Object stat, Object returnValue, Throwable thr) { XLogDiscard discardMode = pack.error != 0 ? XLogDiscard.NONE : XLogSampler.getInstance().evaluateXLogDiscard(pack.elapsed, ctx.serviceName); ctx.profile.close(discardMode == XLogDiscard.NONE ? true : false); + pack.profileCount = ctx.profileCount; + DataProxy.sendServiceName(ctx.serviceHash, ctx.serviceName); pack.service = ctx.serviceHash; pack.threadNameHash = DataProxy.sendHashedMessage(ctx.threadName); diff --git a/scouter.client/src/scouter/client/xlog/ProfileText.java b/scouter.client/src/scouter/client/xlog/ProfileText.java index 20b333684..e726fb59d 100644 --- a/scouter.client/src/scouter/client/xlog/ProfileText.java +++ b/scouter.client/src/scouter/client/xlog/ProfileText.java @@ -17,10 +17,17 @@ */ package scouter.client.xlog; +import java.io.BufferedReader; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; + import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.Color; + import scouter.client.model.TextProxy; import scouter.client.model.XLogData; import scouter.client.model.XLogProxy; @@ -32,14 +39,38 @@ import scouter.client.xlog.views.XLogProfileView; import scouter.lang.CountryCode; import scouter.lang.enumeration.ParameterizedMessageLevel; -import scouter.lang.step.*; -import scouter.util.*; - -import java.io.BufferedReader; -import java.io.StringReader; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; +import scouter.lang.step.ApiCallStep; +import scouter.lang.step.ApiCallStep2; +import scouter.lang.step.ApiCallSum; +import scouter.lang.step.DispatchStep; +import scouter.lang.step.DumpStep; +import scouter.lang.step.HashedMessageStep; +import scouter.lang.step.MessageStep; +import scouter.lang.step.MethodStep; +import scouter.lang.step.MethodStep2; +import scouter.lang.step.MethodSum; +import scouter.lang.step.ParameterizedMessageStep; +import scouter.lang.step.SocketStep; +import scouter.lang.step.SocketSum; +import scouter.lang.step.SqlStep; +import scouter.lang.step.SqlStep2; +import scouter.lang.step.SqlStep3; +import scouter.lang.step.SqlSum; +import scouter.lang.step.SqlXType; +import scouter.lang.step.Step; +import scouter.lang.step.StepControl; +import scouter.lang.step.StepEnum; +import scouter.lang.step.StepSingle; +import scouter.lang.step.StepSummary; +import scouter.lang.step.ThreadCallPossibleStep; +import scouter.lang.step.ThreadSubmitStep; +import scouter.util.CastUtil; +import scouter.util.DateUtil; +import scouter.util.FormatUtil; +import scouter.util.Hexa32; +import scouter.util.IPUtil; +import scouter.util.SortUtil; +import scouter.util.StringUtil; public class ProfileText { @@ -201,6 +232,7 @@ public static void build(final String date, StyledText text, XLogData xperf, Ste if (StringUtil.isNotEmpty(xperf.p.text5)) { sb.append("\n► text5=" + xperf.p.text5); } + sb.append("\n► profileSize=" + xperf.p.profileCount); if (xperf.p.hasDump == 1) { sb.append("\n► dump=Y"); } diff --git a/scouter.client/src/scouter/client/xlog/XLogFilterStatus.java b/scouter.client/src/scouter/client/xlog/XLogFilterStatus.java index 41fffa728..e3d74d990 100644 --- a/scouter.client/src/scouter/client/xlog/XLogFilterStatus.java +++ b/scouter.client/src/scouter/client/xlog/XLogFilterStatus.java @@ -20,6 +20,7 @@ public class XLogFilterStatus { public boolean onlySql; public boolean onlyApicall; public boolean onlyError; + public String profileSizeText = ""; @Override public int hashCode() { @@ -38,7 +39,8 @@ public int hashCode() { filter_hash ^= HashUtil.hash(userAgent); filter_hash ^= HashUtil.hash(onlyError ? "onlyError" : ""); filter_hash ^= HashUtil.hash(onlySql ? "onlySql" : ""); - filter_hash ^= HashUtil.hash(onlyApicall ? "onlyApicall" : ""); + filter_hash ^= HashUtil.hash(onlyApicall ? "onlyApicall" : ""); + filter_hash ^= HashUtil.hash(profileSizeText); return filter_hash; } diff --git a/scouter.client/src/scouter/client/xlog/dialog/XLogFilterDialog.java b/scouter.client/src/scouter/client/xlog/dialog/XLogFilterDialog.java index 628adbd75..601a963b2 100644 --- a/scouter.client/src/scouter/client/xlog/dialog/XLogFilterDialog.java +++ b/scouter.client/src/scouter/client/xlog/dialog/XLogFilterDialog.java @@ -49,7 +49,7 @@ public class XLogFilterDialog extends Dialog { Combo objCombo; - Text serviceTxt, ipTxt, startHmsFromTxt, startHmsToTxt, userAgentTxt, loginText, descText, text1Text, text2Text, text3Text, text4Text, text5Text; + Text serviceTxt, ipTxt, startHmsFromTxt, startHmsToTxt, userAgentTxt, loginText, descText, text1Text, text2Text, text3Text, text4Text, text5Text, profileSizeText; Button onlySqlBtn, onlyApiBtn, onlyErrorBtn; Button clearBtn, applyBtn; @@ -256,6 +256,19 @@ public void modifyText(ModifyEvent arg0) { compareHash(); } }); + + label = new Label(filterGrp, SWT.NONE); + label.setText("PROFILE-SIZE"); + label.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false)); + profileSizeText = new Text(filterGrp, SWT.BORDER | SWT.SINGLE); + profileSizeText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + profileSizeText.setText(status.profileSizeText); + profileSizeText.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent arg0) { + newStatus.profileSizeText = profileSizeText.getText(); + compareHash(); + } + }); Group checkGroup = new Group(filterGrp, SWT.NONE); checkGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 2, 1)); @@ -321,6 +334,7 @@ public void widgetSelected(SelectionEvent e) { onlySqlBtn.setSelection(false); onlyApiBtn.setSelection(false); onlyErrorBtn.setSelection(false); + profileSizeText.setText(""); newStatus = new XLogFilterStatus(); if (newStatus.hashCode() != filterHash) { applyBtn.setEnabled(true); diff --git a/scouter.client/src/scouter/client/xlog/views/XLogViewPainter.java b/scouter.client/src/scouter/client/xlog/views/XLogViewPainter.java index f298152ab..8f4539e5a 100644 --- a/scouter.client/src/scouter/client/xlog/views/XLogViewPainter.java +++ b/scouter.client/src/scouter/client/xlog/views/XLogViewPainter.java @@ -95,6 +95,7 @@ public class XLogViewPainter { public StrMatch text4Mat; public StrMatch text5Mat; public StrMatch userAgentMat; + public String profileSizeExpr; public String yyyymmdd; ITimeChange callback; @@ -641,7 +642,8 @@ && isText5FilterOk(d) && isUserAgentFilterOk(d) && isErrorFilterOk(d.p) && isApicallFilterOk(d.p) - && isSqlFilterOk(d.p); + && isSqlFilterOk(d.p) + && isProfileSizeFilterOk(d.p); } public boolean isObjNameFilterOk(XLogData d) { @@ -755,7 +757,42 @@ public boolean isUserAgentFilterOk(XLogData d) { return userAgentMat.include(userAgent); } } - + + public boolean isProfileSizeFilterOk(XLogPack p) { + if (StringUtil.isEmpty(filterStatus.profileSizeText)) { + return true; + } + String exp = filterStatus.profileSizeText.trim(); + char sign0 = exp.charAt(0); + char sign1 = exp.length() >= 2 ? exp.charAt(1) : '\0'; + try { + if (sign0 == '>') { + if(sign1 == '=') { + return p.profileCount >= Integer.parseInt(exp.substring(2)); + } else { + return p.profileCount > Integer.parseInt(exp.substring(1)); + } + } else if (sign0 == '<') { + if(sign1 == '=') { + return p.profileCount <= Integer.parseInt(exp.substring(2)); + } else { + return p.profileCount < Integer.parseInt(exp.substring(1)); + } + } else if (sign0 == '=') { + if(sign1 == '=') { + return p.profileCount == Integer.parseInt(exp.substring(2)); + } else { + return p.profileCount == Integer.parseInt(exp.substring(1)); + } + } else { + return p.profileCount == Integer.parseInt(exp); + } + } catch (NumberFormatException e) { + e.printStackTrace(); + } + return true; + } + public boolean isErrorFilterOk(XLogPack p) { if (filterStatus.onlyError) { return p.error != 0; @@ -804,6 +841,8 @@ public void setFilterStatus(XLogFilterStatus status) { descMat = new StrMatch(status.desc); userAgentMat = new StrMatch(status.userAgent); + profileSizeExpr = status.profileSizeText; + if (status.startHmsFrom.length() == 6 && status.startHmsTo.length() == 6) { long dateMillis = DateUtil.dateUnitToTimeMillis(DateUtil.getDateUnit(paintedEndTime)); long startFrom = dateMillis + LocalTime.parse(status.startHmsFrom, hmsFormatter).toSecondOfDay() * 1000; diff --git a/scouter.common/src/main/java/scouter/lang/pack/XLogPack.java b/scouter.common/src/main/java/scouter/lang/pack/XLogPack.java index 0cdd37660..9a0ec84f1 100644 --- a/scouter.common/src/main/java/scouter/lang/pack/XLogPack.java +++ b/scouter.common/src/main/java/scouter/lang/pack/XLogPack.java @@ -169,6 +169,8 @@ public class XLogPack implements Pack { public String text3; public String text4; public String text5; + + public int profileCount; public String toString() { StringBuilder sb = new StringBuilder(); @@ -237,6 +239,7 @@ public void write(DataOutputX out) throws IOException { o.writeText(text4); o.writeText(text5); + o.writeDecimal(profileCount); out.writeBlob(o.toByteArray()); } @@ -306,6 +309,10 @@ public Pack read(DataInputX din) throws IOException { this.text5 = d.readText(); } + if (d.available() >0) { + this.profileCount = (int) d.readDecimal(); + } + return this; } From f2a14b32af5ee06b874e265c058ec0aa6b02ed35 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Fri, 28 Sep 2018 12:50:55 +0900 Subject: [PATCH 48/53] [client] add help page of xlog filter dialog. --- .../client/constants/HelpConstants.java | 2 ++ .../client/xlog/dialog/XLogFilterDialog.java | 13 +++++++++ scouter.document/views/XLog-Filter.md | 29 +++++++++++++++++++ scouter.document/views/XLog-Filter_kr.md | 29 +++++++++++++++++++ 4 files changed, 73 insertions(+) create mode 100644 scouter.document/views/XLog-Filter.md create mode 100644 scouter.document/views/XLog-Filter_kr.md diff --git a/scouter.client/src/scouter/client/constants/HelpConstants.java b/scouter.client/src/scouter/client/constants/HelpConstants.java index 95cc99fb1..4c432af44 100644 --- a/scouter.client/src/scouter/client/constants/HelpConstants.java +++ b/scouter.client/src/scouter/client/constants/HelpConstants.java @@ -6,5 +6,7 @@ public class HelpConstants { public static final String HELP_URL_XLOG_VIEW = "https://github.com/scouter-project/scouter/blob/develop/scouter.document/views/XLog-View.md"; public static final String HELP_URL_XLOG_PROFILE_VIEW = "https://github.com/scouter-project/scouter/blob/develop/scouter.document/views/XLog-Profile-View.md"; + public static final String HELP_URL_XLOG_FILTER_VIEW = "https://github.com/scouter-project/scouter/blob/develop/scouter.document/views/XLog-Filter.md"; public static final String HELP_ALERT_SCRIPT = "https://github.com/scouter-project/scouter/blob/develop/scouter.document/main/Alert-Plugin-Guide.md"; + } diff --git a/scouter.client/src/scouter/client/xlog/dialog/XLogFilterDialog.java b/scouter.client/src/scouter/client/xlog/dialog/XLogFilterDialog.java index 601a963b2..74405fcf3 100644 --- a/scouter.client/src/scouter/client/xlog/dialog/XLogFilterDialog.java +++ b/scouter.client/src/scouter/client/xlog/dialog/XLogFilterDialog.java @@ -38,6 +38,8 @@ import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; +import scouter.client.Images; +import scouter.client.constants.HelpConstants; import scouter.client.xlog.XLogFilterStatus; import scouter.client.xlog.views.XLogViewCommon; import scouter.util.StringUtil; @@ -74,6 +76,17 @@ protected Control createDialogArea(Composite parent) { newStatus = status.clone(); this.filterHash = status.hashCode(); container.setLayout(new GridLayout(1, true)); + + Button helpBtn = new Button(container, SWT.PUSH); + helpBtn.setText("Help"); + helpBtn.setImage(Images.help); + helpBtn.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, true, false)); + helpBtn.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + org.eclipse.swt.program.Program.launch(HelpConstants.HELP_URL_XLOG_FILTER_VIEW); + } + }); + Group filterGrp = new Group(container, SWT.NONE); filterGrp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); filterGrp.setLayout(new GridLayout(2, false)); diff --git a/scouter.document/views/XLog-Filter.md b/scouter.document/views/XLog-Filter.md new file mode 100644 index 000000000..b89e503d4 --- /dev/null +++ b/scouter.document/views/XLog-Filter.md @@ -0,0 +1,29 @@ +# XLog Filter Dialog +[![English](https://img.shields.io/badge/language-English-orange.svg)](XLog-Filter.md) [![Korean](https://img.shields.io/badge/language-Korean-blue.svg)](XLog-Filter_kr.md) + +XLog's Filter Dialog is used to filter XLog with various search conditions. + +## Search expression +You can use the following search expression, including * (asta) for most entries where strings are included: +The search speed is fast when there is no asta. +\* Can be used at the beginning, end, and middle of the search term. + +* If you enter /order/* in the Service field, the following types of services are searched. + * /order/1 + * /order/100/products + +* If you enter */order/* in the Service field, the following types of services are searched. + * /order/1 + * v1/order/100/products + * /global/v1/order/100/products + +## StartHMS +Filter by duration of start time. +It is usually used to find the cause of the delay and search in the following format. +* start hhmmss ~ end hhmmss + * 101030 ~ 101032 (Search xlog between 10:10 30s and 10:10 32s.) + +## Profile Size +It is usually used to identify requests that are too large for the Scouter's storage disk because the Profile size is too large. +Use an expression with an inequality before the number. +* "> 300" : Filter requests with a Profile size greater than 300 (row). diff --git a/scouter.document/views/XLog-Filter_kr.md b/scouter.document/views/XLog-Filter_kr.md new file mode 100644 index 000000000..ca92c0715 --- /dev/null +++ b/scouter.document/views/XLog-Filter_kr.md @@ -0,0 +1,29 @@ +# XLog Filter Dialog +[![English](https://img.shields.io/badge/language-English-orange.svg)](XLog-Filter.md) [![Korean](https://img.shields.io/badge/language-Korean-blue.svg)](XLog-Filter_kr.md) + +XLog의 Filter Dialog는 여러가지 검색조건으로 XLog를 필터링하는데 사용한다. + +## 검색 표현식 +문자열이 들어가는 대부분의 항목에 *(asta)를 포함하여 아래와 같은 검색 표현식을 사용할 수 있다. +단 *(asta)가 없는 경우의 검색 속도가 빠르다. +\* 는 검색어의 맨앞, 맨뒤, 그리고 중간에 하나씩 사용할 수 있다. + +* 만약 Service 항목에 /order/* 로 기입하면 아래와 같은 유형의 Service 들이 검색된다. + * /order/1 + * /order/100/products + +* 만약 Service 항목에 */order/* 로 기입하면 아래와 같은 유형의 Service 들이 검색된다. + * /order/1 + * v1/order/100/products + * /global/v1/order/100/products + +## StartHMS +start time 의 duration으로 필터링 한다. +보통 지연이 발생된 원인을 찾기 위해 사용하며 아래와 같은 형식으로 검색한다. +* start hhmmss ~ end hhmmss + * 101030 ~ 101032 (10:10 30s ~ 10:10 32s 사이의 xlog를 검색한다.) + +## Profile Size +보통 Profile의 size가 너무 커서 Scouter의 저장 디스크를 많이 사용하는 요청을 식별하기 위해서 사용한다. +숫자 앞에 부등호가 붙은 표현식을 사용한다. +* "> 300" : Profile size가 300(row) 이상인 요청을 필터링한다. From fb1736f4917f89cf7f7dc3801c68188a9f3fecdc Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Fri, 28 Sep 2018 12:54:17 +0900 Subject: [PATCH 49/53] [agent.java] interaction counter default false. --- scouter.agent.java/src/main/java/scouter/agent/Configure.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scouter.agent.java/src/main/java/scouter/agent/Configure.java b/scouter.agent.java/src/main/java/scouter/agent/Configure.java index b03de7984..3a57f71af 100644 --- a/scouter.agent.java/src/main/java/scouter/agent/Configure.java +++ b/scouter.agent.java/src/main/java/scouter/agent/Configure.java @@ -623,7 +623,7 @@ public final static synchronized Configure getInstance() { @ConfigDesc("Activating custom jmx") public boolean counter_custom_jmx_enabled = false; @ConfigDesc("Activating interaction counter") - public boolean counter_interaction_enabled = true; + public boolean counter_interaction_enabled = false; // SFA(Stack Frequency Analyzer) @ConfigDesc("Activating period threaddump function") @@ -978,7 +978,7 @@ private void apply() { this.counter_recentuser_valid_ms = getLong("counter_recentuser_valid_ms", DateUtil.MILLIS_PER_FIVE_MINUTE); this.counter_object_registry_path = getValue("counter_object_registry_path", "/tmp/scouter"); this.counter_custom_jmx_enabled = getBoolean("counter_custom_jmx_enabled", false); - this.counter_interaction_enabled = getBoolean("counter_interaction_enabled", true); + this.counter_interaction_enabled = getBoolean("counter_interaction_enabled", false); this.custom_jmx_set = getStringSet("custom_jmx_set", "||"); this.sfa_dump_enabled = getBoolean("sfa_dump_enabled", false); this.sfa_dump_interval_ms = getInt("sfa_dump_interval_ms", 10000); From ebd7008dd2d4eb4b33f7ddc93a31842834d57258 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Fri, 28 Sep 2018 13:17:14 +0900 Subject: [PATCH 50/53] [doc] documentation. --- README.md | 11 +- README_kr.md | 11 +- scouter.document/index.md | 1 + scouter.document/index_kr.md | 1 + scouter.document/main/Configuration.md | 1367 +++++++++++++++++------- 5 files changed, 1006 insertions(+), 385 deletions(-) diff --git a/README.md b/README.md index df1ac5741..b1e976959 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,12 @@ SCOUTER is an open source APM like new relic and appdynamics. (APM means application performance monitoring or application performance management.) - - **Monitoring target (currently)** + - **Monitoring target (scouter agent)** - Java application - Web applications (on Tomcat, JBoss, Resin...), Standalone java applications - OS - Linux, Windows, Unix - - **Monitoring target (to-be : contributing welcome)** - - Redis, Apache HTTPD, nginX, Nodejs ... + - **Monitoring target (telegraf agent support)** + - Redis, nginX, apache httpd, haproxy, Kafka, MySQL, MongoDB, RabbitMQ, ElasticSearch, Kube, Mesos ... ![Screen](./scouter.document/img/main/dashboard-sample-1.png) @@ -38,6 +38,7 @@ SCOUTER can help you. - [Live demo](./scouter.document/main/Live-Demo.md) - [How to analyze XLog View](./scouter.document/client/Reading-XLog.md) - [Customizable alarm - Alert plugins guide](./scouter.document/main/Alert-Plugin-Guide.md) + - [Telegraf server feature](./scouter.document/main/Telegraf-Server.md) - [Client screen help](./scouter.document/client/How-To-Use-Client.md) ## Download @@ -63,8 +64,8 @@ SCOUTER can help you. - **[aws-monitor](https://github.com/nices96/scouter-pulse-aws-monitor)** : gathering performance metrics of EC2, RDS, ELB from cloudwatch in AWS. ### 3rd-party UIs -- **scouter paper** : [scouter-paper](https://github.com/mindplates/scouter-paper) -![scouter-pater](./scouter.document/img/main/scouter-paper.png) +- **scouter paper** : [scouter-paper](https://mindplates.github.io/scouter-paper/) +![scouter-pater](https://mindplates.github.io/scouter-paper/img/img12.png) ### Plugins - **Server plugin** diff --git a/README_kr.md b/README_kr.md index 4052dcc4a..b1d9e30e4 100644 --- a/README_kr.md +++ b/README_kr.md @@ -10,11 +10,11 @@ 오픈소스 APM인 Scouter는 JVM(WAS, Standalone application)을 사용하는 어플리케이션 및 OS 자원에 대한 모니터링 모니터링 기능을 제공한다. - **APM** : Application performance montoring / application performance management - - 모니터링 대상 (현재) + - 모니터링 대상 (전용 agent) - Java application - Web application (on Tomcat, JBoss, Resin ...), Standalone java application - OS - LInux, Windows, Unix - - 모니터링 대상 (TOBE) - - Redis, Apach HTTPD, nginX, Nodejs... + - 모니터링 대상 (Telegraf agent) + - Redis, nginX, apache httpd, haproxy, Kafka, MySQL, MongoDB, RabbitMQ, ElasticSearch, Kube, Mesos ... ![Screen](./scouter.document/img/main/dashboard-sample-1.png) @@ -37,6 +37,7 @@ - [Live demo 접속](./scouter.document/main/Live-Demo_kr.md) - [XLog 로 분석하기](./scouter.document/client/Reading-XLog_kr.md) - [사용자 정의 알람 스크립팅 - Alert plugins guide](./scouter.document/main/Alert-Plugin-Guide_kr.md) + - [Telegraf server feature](./scouter.document/main/Telegraf-Server_kr.md) - [Client 화면 설명](./scouter.document/client/How-To-Use-Client_kr.md) ## Download @@ -63,8 +64,8 @@ - **[aws-monitor](https://github.com/nices96/scouter-pulse-aws-monitor)** : AWS의 Cloudwatch에서 EC2/RDS/ELB의 성능 카운터 정보를 수집 ### 3rd-party UIs -- **scouter paper** : [scouter-paper](https://github.com/mindplates/scouter-paper) -![scouter-pater](./scouter.document/img/main/scouter-paper.png) +- **scouter paper** : [scouter-paper](https://mindplates.github.io/scouter-paper/) +![scouter-pater](https://mindplates.github.io/scouter-paper/img/img12.png) ### Plugins - **Server plugin** diff --git a/scouter.document/index.md b/scouter.document/index.md index 9c22b4011..c556426a2 100644 --- a/scouter.document/index.md +++ b/scouter.document/index.md @@ -18,6 +18,7 @@ - [Scouter plugins guide](./main/Plugin-Guide.md) - [Customizable alarm - Alert plugins guide](./main/Alert-Plugin-Guide.md) - [Web api guide](./tech/Web-API-Guide.md) +- [Telegraf server feature](./main/Telegraf-Server.md) - [How to trace NON-HTTP service](./use-case/NON-HTTP-Service-Trace.md) - [Stand-alone Java Batch Agent](./main/Stand-alone-Java-Batch-Agent.md) - [TagCounting Analysis](./use-case/TagCounting-Analysis.md) diff --git a/scouter.document/index_kr.md b/scouter.document/index_kr.md index 7d58eb321..7ee05a827 100644 --- a/scouter.document/index_kr.md +++ b/scouter.document/index_kr.md @@ -18,6 +18,7 @@ - [method 상세 프로파일](./use-case/Method-Profiling_kr.md) - [Scouter 확장 - Plugin guide](./main/Plugin-Guide_kr.md) - [Web api 가이드](./tech/Web-API-Guide_kr.md) +- [Telegraf server feature](./main/Telegraf-Server_kr.md) - [사용자 정의 알람 설정 - Alert plugins guide](./main/Alert-Plugin-Guide_kr.md) - [단독 실행형 자바 배치 모니터링 에이전트](./main/Stand-alone-Java-Batch-Agent_kr.md) - [TagCounting Analysis](./use-case/TagCounting-Analysis_kr.md) diff --git a/scouter.document/main/Configuration.md b/scouter.document/main/Configuration.md index f4b77d95a..5b8b7ba0c 100644 --- a/scouter.document/main/Configuration.md +++ b/scouter.document/main/Configuration.md @@ -16,67 +16,369 @@ ``` ```java -//Dir -@ConfigDesc("Store directory of database") -public String db_dir = "./database"; -@ConfigDesc("Path to log directory") -public String log_dir = "./logs"; -@ConfigDesc("Path to plugin directory") -public String plugin_dir = "./plugin"; -@ConfigDesc("Path to client related directory") -public String client_dir = "./client"; - -//Log -@ConfigDesc("Retaining log according to date") -public boolean log_rotation_enabled = true; -@ConfigDesc("Keeping period of log") -public int log_keep_days = 31; + //Log + @ConfigDesc("Logging TCP connection related event") + public boolean log_tcp_action_enabled = false; + @ConfigDesc("Logging incoming MultiPacket") + public boolean log_udp_multipacket = false; + @ConfigDesc("Logging expired MultiPacket") + public boolean log_expired_multipacket = true; + @ConfigDesc("Logging all incoming packs") + public boolean log_udp_packet = false; + @ConfigDesc("Logging incoming CounterPack") + public boolean log_udp_counter = false; + @ConfigDesc("Logging incoming PerfInteractionCounterPack") + public boolean log_udp_interaction_counter = false; + @ConfigDesc("Logging incoming XLogPack") + public boolean log_udp_xlog = false; + @ConfigDesc("Logging incoming ProfilePack") + public boolean log_udp_profile = false; + @ConfigDesc("Logging incoming TextPack") + public boolean log_udp_text = false; + @ConfigDesc("Logging incoming AlertPack") + public boolean log_udp_alert = false; + @ConfigDesc("Logging incoming ObjectPack") + public boolean log_udp_object = false; + @ConfigDesc("Logging incoming StatusPack") + public boolean log_udp_status = false; + @ConfigDesc("Logging incoming StackPack") + public boolean log_udp_stack = false; + @ConfigDesc("Logging incoming SummaryPack") + public boolean log_udp_summary = false; + @ConfigDesc("Logging incoming BatchPack") + public boolean log_udp_batch = false; + @ConfigDesc("Logging all request handlers in starting") + public boolean log_service_handler_list = false; -//Network -@ConfigDesc("UDP Port") -public int net_udp_listen_port = 6100; -@ConfigDesc("TCP Port") -public int net_tcp_listen_port = 6100; -@ConfigDesc("Http Port for scouter-pulse") -public int net_http_port = 6180; - -//Object -@ConfigDesc("Waiting time(ms) until stopped heartbeat of object is determined to be inactive") -public int object_deadtime_ms = 8000; -@ConfigDesc("inactive object warning level. default 0.(0:info, 1:warn, 2:error, 3:fatal)") -public int object_inactive_alert_level = 0; - -//Management -@ConfigDesc("Activating automatic deletion function in the database") -public boolean mgr_purge_enabled = true; - -@ConfigDesc("Condition of disk usage for automatic deletion. if lack, delete profile data first exclude today data.") -public int mgr_purge_disk_usage_pct = 80; - -@ConfigDesc("Retaining date for automatic deletion. delete profile data first.") -public int mgr_purge_profile_keep_days = 10; -@ConfigDesc("Retaining date for automatic deletion.") -public int mgr_purge_xlog_keep_days = 30; -@ConfigDesc("Retaining date for automatic deletion") -public int mgr_purge_counter_keep_days = 70; - -//external-link -@ConfigDesc("name of 3rd party ui") -public String ext_link_name = "scouter-paper"; -@ConfigDesc("outgoing link pattern for a 3rd party UI.(client restart required)\n" + - "Context menu in any chart shows the menu 'Open with 3rd-party UI.'\n" + - "* variable patterns : \n" + - " $[objHashes] : comma separated objHash values\n" + - " $[objType] : object type\n" + - " $[from] : start time in chart by millis\n" + - " $[to] : end time in chart by millis") -public String ext_link_url_pattern = "http://my-scouter-paper-ip:6188/index.html#/paper?&address=localhost&port=6188&realtime=false&xlogElapsedTime=8000&instances=$[objHashes]&from=$[from]&to=$[to]&layout=my-layout-template-01"; - -//GeoIP -@ConfigDesc("Activating IP-based city/country extraction") -public boolean geoip_enabled = true; -@ConfigDesc("Path to GeoIP data file") -public String geoip_data_city_file = CONF_DIR + "GeoLiteCity.dat"; + @ConfigDesc("Logging when index traversal is too heavy.") + public int log_index_traversal_warning_count = 100; + + @ConfigDesc("Retaining log according to date") + public boolean log_rotation_enabled = true; + @ConfigDesc("Keeping period of log") + public int log_keep_days = 31; + @ConfigDesc("Logging sql failed to parse") + public boolean log_sql_parsing_fail_enabled = false; + @ConfigDesc("") + public boolean _trace = false; + + //Network + @ConfigDesc("UDP Host") + public String net_udp_listen_ip = "0.0.0.0"; + @ConfigDesc("UDP Port") + public int net_udp_listen_port = NetConstants.SERVER_UDP_PORT; + @ConfigDesc("TCP Host") + public String net_tcp_listen_ip = "0.0.0.0"; + @ConfigDesc("TCP Port") + public int net_tcp_listen_port = NetConstants.SERVER_TCP_PORT; + @ConfigDesc("Client Socket Timeout(ms)") + public int net_tcp_client_so_timeout_ms = 8000; + @ConfigDesc("Agent Socket Timeout(ms)") + public int net_tcp_agent_so_timeout_ms = 60000; + @ConfigDesc("Transfer period(ms) of KEEP_ALIVE") + public int net_tcp_agent_keepalive_interval_ms = 5000; + @ConfigDesc("Waiting time(ms) for agent session") + public int net_tcp_get_agent_connection_wait_ms = 1000; + @ConfigDesc("UDP Packet Buffer Size") + public int net_udp_packet_buffer_size = 65535; + @ConfigDesc("UDP Receiver Buffer Size") + public int net_udp_so_rcvbuf_size = 1024 * 1024 * 4; + @ConfigDesc("") + public int _net_udp_worker_thread_count = 3; + @ConfigDesc("TCP Thread Pool Size") + public int net_tcp_service_pool_size = 100; + @ConfigDesc("Activating Http Server") + public boolean net_http_server_enabled = false; + @ConfigDesc("Http Port") + public int net_http_port = NetConstants.SERVER_HTTP_PORT; + @ConfigDesc("user extension web root") + public String net_http_extweb_dir = "./extweb"; + @ConfigDesc("Activating Scouter API") + public boolean net_http_api_enabled = false; + @ConfigDesc("Enable a swagger for HTTP API.") + public boolean net_http_api_swagger_enabled = false; + @ConfigDesc("Swagger option of host's ip or domain to call APIs.") + public String net_http_api_swagger_host_ip = ""; + @ConfigDesc("API CORS support for Access-Control-Allow-Origin") + public String net_http_api_cors_allow_origin = "*"; + @ConfigDesc("Access-Control-Allow-Credentials") + public String net_http_api_cors_allow_credentials = "true"; + + @ConfigDesc("size of webapp connection pool to collector") + public int net_webapp_tcp_client_pool_size = 12; + @ConfigDesc("timeout of web app connection pool to collector(It depends on net_tcp_client_so_timeout_ms)") + public int net_webapp_tcp_client_pool_timeout = net_tcp_client_so_timeout_ms; + + @ConfigDesc("Enable api access control by client ip") + public boolean net_http_api_auth_ip_enabled = false; + @ConfigDesc("If get api caller's ip from http header.") + public String net_http_api_auth_ip_header_key; + + @ConfigDesc("Enable api access control by JSESSIONID of Cookie") + public boolean net_http_api_auth_session_enabled = false; + @ConfigDesc("api http session timeout") + public int net_http_api_session_timeout = 3600*24; + @ConfigDesc("Enable api access control by Bearer token(of Authorization http header) - get access token from /user/loginGetToken.") + public boolean net_http_api_auth_bearer_token_enabled = false; + @ConfigDesc("Enable gzip response on api call") + public boolean net_http_api_gzip_enabled = true; + + @ConfigDesc("api access allow ip addresses") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String net_http_api_allow_ips = "localhost,127.0.0.1,0:0:0:0:0:0:0:1,::1"; + + //Dir + @ConfigDesc("Store directory of database") + public String db_dir = "./database"; + @ConfigDesc("Path to log directory") + public String log_dir = "./logs"; + @ConfigDesc("Path to plugin directory") + public String plugin_dir = "./plugin"; + @ConfigDesc("Path to client related directory") + public String client_dir = "./client"; + @ConfigDesc("temp dir") + public String temp_dir = "./tempdata"; + + //Object + @ConfigDesc("Waiting time(ms) until stopped heartbeat of object is determined to be inactive") + public int object_deadtime_ms = 8000; + @ConfigDesc("inactive object warning level. default 0.(0:info, 1:warn, 2:error, 3:fatal)") + public int object_inactive_alert_level = 0; + + //Compress + @ConfigDesc("Activating XLog data in zip file") + public boolean compress_xlog_enabled = false; + @ConfigDesc("Activating profile data in zip file") + public boolean compress_profile_enabled = false; + @ConfigDesc("") + public int _compress_write_buffer_block_count = 3; + @ConfigDesc("") + public int _compress_read_cache_block_count = 3; + @ConfigDesc("") + public long _compress_read_cache_expired_ms = DateUtil.MILLIS_PER_MINUTE; + @ConfigDesc("") + public int _compress_dailycount_header_cache_size = 3; + @ConfigDesc("") + public int _compress_write_thread = 2; + + //Auto + @ConfigDesc("") + public boolean _auto_5m_sampling = true; + + //Manager + @ConfigDesc("Activating automatic deletion function in the database") + public boolean mgr_purge_enabled = true; + @ConfigDesc("Condition of disk usage for automatic deletion. if lack, delete profile data first exclude today data.") + public int mgr_purge_disk_usage_pct = 80; + + @ConfigDesc("Retaining date for automatic deletion. delete profile data first.") + public int mgr_purge_profile_keep_days = 10; + @Deprecated + @ConfigDesc("Deprecated : use mgr_purge_profile_keep_days") + public int mgr_purge_keep_days = mgr_purge_profile_keep_days; + + @ConfigDesc("Retaining date for automatic deletion.") + public int mgr_purge_xlog_keep_days = 30; + @Deprecated + @ConfigDesc("Deprecated : use mgr_purge_xlog_keep_days") + public int mgr_purge_xlog_without_profile_keep_days = mgr_purge_xlog_keep_days; + + @ConfigDesc("Retaining date for automatic deletion") + public int mgr_purge_counter_keep_days = 70; + + @ConfigDesc("Ignored log ID set") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public StringSet mgr_log_ignore_ids = new StringSet(); + + //db + @ConfigDesc("true for daily dictionary mode about service name. default value is false that means it's permanent.") + public boolean mgr_text_db_daily_service_enabled = false; + @ConfigDesc("true for daily dictionary mode about api name. default value is false that means it's permanent.") + public boolean mgr_text_db_daily_api_enabled = false; + @ConfigDesc("true for daily dictionary mode about user agent. default value is false that means it's permanent.") + public boolean mgr_text_db_daily_ua_enabled = false; + + @ConfigDesc("change default memory size of hash index.(MB)" + + "[warn] modified this will break the database files.\nbackup old database files before change values.(restart required)") + public int _mgr_text_db_index_default_mb = 1; + @ConfigDesc("change memory size of hash index for service text.(MB)" + + "[warn] modified this will break the database files.\nbackup old database files before change values.(restart required)") + public int _mgr_text_db_index_service_mb = 1; + @ConfigDesc("change memory size of hash index for apicall text.(MB)" + + "[warn] modified this will break the database files.\nbackup old database files before change values.(restart required)") + public int _mgr_text_db_index_api_mb = 1; + @ConfigDesc("change memory size of hash index for user agent text.(MB)" + + "[warn] modified this will break the database files.\nbackup old database files before change values.(restart required)") + public int _mgr_text_db_index_ua_mb = 1; + @ConfigDesc("change memory size of hash index for login text.(MB)" + + "[warn] modified this will break the database files.\nbackup old database files before change values.(restart required)") + public int _mgr_text_db_index_login_mb = 1; + @ConfigDesc("change memory size of hash index for desc text.(MB)" + + "[warn] modified this will break the database files.\nbackup old database files before change values.(restart required)") + public int _mgr_text_db_index_desc_mb = 1; + @ConfigDesc("change memory size of hash index for hashed message text.(MB)" + + "[warn] modified this will break the database files.\nbackup old database files before change values.(restart required)") + public int _mgr_text_db_index_hmsg_mb = 1; + @ConfigDesc("change memory size of hash index for daily text db.(MB)" + + "[warn] modified this will break the database files.\nbackup old database files before change values.(restart required)") + public int _mgr_text_db_daily_index_mb = 1; + + @ConfigDesc("change default memory size of key value store index.(MB)" + + "[warn] modified this will break the database files.\nbackup old database files before change values.(restart required)") + public int _mgr_kv_store_index_default_mb = 8; + + //external-link + @ConfigDesc("name of 3rd party ui") + public String ext_link_name = "scouter-paper"; + @ConfigDesc("outgoing link pattern for a 3rd party UI.(client restart required)\n" + + "Context menu in any chart shows the menu 'Open with 3rd-party UI.'\n" + + "* variable patterns : \n" + + " $[objHashes] : comma separated objHash values\n" + + " $[objType] : object type\n" + + " $[from] : start time in chart by millis\n" + + " $[to] : end time in chart by millis") + public String ext_link_url_pattern = "http://my-scouter-paper-ip:6188/index.html#/paper?&address=localhost&port=6188&realtime=false&xlogElapsedTime=8000&instances=$[objHashes]&from=$[from]&to=$[to]&layout=my-layout-template-01"; + + //XLog + @ConfigDesc("XLog Writer Queue Size") + public int xlog_queue_size = 10000; + @ConfigDesc("Ignored time(ms) in retrieving XLog in real time") + public int xlog_realtime_lower_bound_ms = 0; + @ConfigDesc("Ignored time(ms) in retrieving previous XLog") + public int xlog_pasttime_lower_bound_ms = 0; +// @ConfigDesc("Ignored profile time(ms) without saving") +// public int xlog_profile_save_lower_bound_ms = 0; + + //Profile + @ConfigDesc("Profile Writer Queue Size") + public int profile_queue_size = 1000; + + //GeoIP + @ConfigDesc("Activating IP-based city/country extraction") + public boolean geoip_enabled = true; + @ConfigDesc("Path to GeoIP data file") + public String geoip_data_city_file = CONF_DIR + "GeoLiteCity.dat"; + + //SQL + @ConfigDesc("Activating table-based SQL compression") + public boolean sql_table_parsing_enabled = true; + + //TagCount + @ConfigDesc("Activating TagCount function") + public boolean tagcnt_enabled = true; + + //Service request options from client + @ConfigDesc("search xlog service option - max xlog count to search per request") + public int req_search_xlog_max_count = 500; + + //telegraf sample config for help + @ConfigDesc("Telegraf http input enabled") + public boolean input_telegraf_enabled = true; + @ConfigDesc("print telegraf line protocol to STDOUT") + public boolean input_telegraf_debug_enabled = false; + + @ConfigDesc("telegraf delta-counter normalize") + public boolean input_telegraf_delta_counter_normalize_default = true; + @ConfigDesc("telegraf delta-counter normalize seconds.(avgerage in sec)\n" + + "normalize per metric can be set in the option input_telegraf_$measurement$_counter_mappings") + public int input_telegraf_delta_counter_normalize_default_seconds = 30; + + @ConfigDesc("Waiting time(ms) until stopped heartbeat of object is determined to be inactive") + public int telegraf_object_deadtime_ms = 35000; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "Telegraf http input of the $measurement$ enabled.\n" + + "$measurement$ is a variable to the measurement name of the line protocol.\n" + + "eg) input_telegraf_$redis_keyspace$_enabled=true") + public boolean input_telegraf_$measurement$_enabled = true; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "print telegraf line protocol of the $measurement$ to STDOUT") + public boolean input_telegraf_$measurement$_debug_enabled = false; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "If set, only the metric matching to this tag value is handled.\n" + + "It can have multiple values. comma separator means 'or' condition. eg) cpu:cpu-total,cpu:cpu0\n" + + "It also have not(!) condition. eg) cpu:!cpu-total") + @ConfigValueType(value = ValueType.COMMA_COLON_SEPARATED_VALUE, + strings = {"filtering tag name(reqiured)", "filtering tag value(reqiured)"}, + booleans = {true, true} + ) + public String input_telegraf_$measurement$_tag_filter = ""; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "which fields of $measurement$ are mapped to scouter's counter.\n" + + "format: {line-protocol field name}:{scouter counter name}:{display name?}:{unit?}:{hasTotal?}:{normalize sec?}\n" + + "It can have multiple values.\n" + + " - {scouter counter name} can be defined in combination with the line protocol's tag variables.\n" + + "For example, if the value of 'tag1' is 'disk01' and the value of 'tag2' is 'bin', the counter name defined as 'scouter-du-$tag1$-$tag2$' is 'scouter-du-disk01-bin'.\n" + + " eg)used_memory:tg-redis-used-memory,used_memory_rss:redis-used-memory-rss,redis used rss,bytes:true\n" + + " eg)cpu:cpu-$cpu-no$ -- this example shows counter definition with tag value.\n" + + "If {line-protocol field name} is started with '&' or '&&', then It works as delta counter\n" + + "When specified as a delta type, the difference in values per second is stored. and the counter name ends with '_delta'\n" + + "double '&&' means BOTH type. AS BOTH type, the value and the difference value both are stored.\n" + + " - {normalize sec} applies only to a delta counter if the counter is a 'BOTH' type counter. (This value can have min 4 to max 60)") + @ConfigValueType(value = ValueType.COMMA_COLON_SEPARATED_VALUE, + strings = {"line protocol field\n(reqiured)", "mapping counter name\n(reqiured)", "display name", "unit", "totalizable\ndefault true", "norm. sec.\ndefault 30"}, + booleans = {true, true, false, false, false, false} + ) + public String input_telegraf_$measurement$_counter_mappings = ""; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "define an obj Family prefix. objectType is defined with some tags.\n" + + "see input_telegraf_$measurement$_objFamily_append_tags option.") + public String input_telegraf_$measurement$_objFamily_base = ""; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "this tags's value is appended to objFamily_base.\nIt can have multiple values. eg)tag1,tag2") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String input_telegraf_$measurement$_objFamily_append_tags = ""; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "define an objectType prefix. objectType is defined with some tags.\n" + + "see input_telegraf_$measurement$_objType_prepend(or append)_tags option.") + public String input_telegraf_$measurement$_objType_base = ""; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "this tags's value is prepended to objType_base.\nIt can have multiple values. eg)tag1,tag2") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String input_telegraf_$measurement$_objType_prepend_tags = "scouter_obj_type_prefix"; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "this tags's value is appended to objType_base.\nIt can have multiple values. eg)tag1,tag2") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String input_telegraf_$measurement$_objType_append_tags = ""; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "this tags's value is object type's icon file name that the scouter client have. eg)redis") + public String input_telegraf_$measurement$_objType_icon = ""; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "define an objectName prefix. objectName is defined with some tags.\n" + + "see input_telegraf_$measurement$_objName_append_tags option.") + public String input_telegraf_$measurement$_objName_base = ""; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "this tags's value is appended to objName_base.\n" + + "It can have multiple values. eg)tag1,tag2") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String input_telegraf_$measurement$_objName_append_tags = ""; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "tag name to define host") + public String input_telegraf_$measurement$_host_tag = "host"; + + @ConfigDesc("[This option is just a sample. Change $measurement$ to your measurement name like $cpu$.]\n" + + "which host value defined with $measurement$_host_tag option is mapped to scouter's host.\n" + + "It can have multiple values. eg)hostValue1:scouterHost1,hostValue2:scouterHost2") + @ConfigValueType(value = ValueType.COMMA_COLON_SEPARATED_VALUE, + strings = {"telegraf host name(reqiured)", "scouter host name(reqiured)"}, + booleans = {true, true} + ) + public String input_telegraf_$measurement$_host_mappings = ""; + + //Visitor Hourly + public boolean visitor_hourly_count_enabled = true; ``` @@ -96,287 +398,563 @@ public String geoip_data_city_file = CONF_DIR + "GeoLiteCity.dat"; ```java //Network -@ConfigDesc("Collector IP") -public String net_collector_ip = "127.0.0.1"; -@ConfigDesc("Collector UDP Port") -public int net_collector_udp_port = 6100; -@ConfigDesc("Collector TCP Port") -public int net_collector_tcp_port = 6100; - -@ConfigDesc("Escaping literal parameters for normalizing the query") -public boolean profile_sql_escape_enabled = true; - -//Naming / grouping -@ConfigDesc("Deprecated. It's just an alias of system_group_id which overrides this value.") -public String obj_type = ""; -@ConfigDesc("monitoring group type, commonly named as system name and a monitoring type.\neg) ORDER-JVM, WAREHOUSE-LINUX ...") -public String monitoring_group_type = ""; -public String obj_name = ""; -@ConfigDesc("Host Type") -public String obj_host_type = ""; -@ConfigDesc("Host Name") -public String obj_host_name = ""; -@ConfigDesc("Activating for using object name as PID") - -//profile -@ConfigDesc("Http Query String profile") -public boolean profile_http_querystring_enabled; -@ConfigDesc("Http Header profile") -public boolean profile_http_header_enabled; -@ConfigDesc("Service URL prefix for Http header profile") -public String profile_http_header_url_prefix = "/"; -@ConfigDesc("spring controller method parameter profile") -public boolean profile_spring_controller_method_parameter_enabled = false; -@ConfigDesc("http header names for profiling with comma separator") -public String profile_http_header_keys = ""; -@ConfigDesc("Calculating CPU time by profile") -public boolean profile_thread_cputime_enabled = false; - -//Trace -@ConfigDesc("Adding assigned header value to the service name") -public String trace_service_name_header_key; -@ConfigDesc("Adding assigned get parameter to the service name") -public String trace_service_name_get_key; -@ConfigDesc("Adding assigned post parameter to the service name") -public String trace_service_name_post_key; - -@ConfigDesc("warning color marking threshold duration(ms) on active service view") -public long trace_activeserivce_yellow_time = 3000; -@ConfigDesc("fatal color marking threshold duration(ms) on active service view") -public long trace_activeservice_red_time = 8000; - -@ConfigDesc("Identifying header key of Remote IP") -public String trace_http_client_ip_header_key = ""; - -@ConfigDesc("Activating gxid connection in HttpTransfer") -public boolean trace_interservice_enabled = false; - -@ConfigDesc("Session key for user counting") -public String trace_user_session_key = "JSESSIONID"; - -@ConfigDesc("") -public String trace_delayed_service_mgr_filename = "setting_delayed_service.properties"; - -//trace request queuing -@ConfigDesc("measure queuing time from load balancer, reverse proxy, web server...\n if set, you can open Queuing Time view.") -public boolean trace_request_queuing_enabled = false; -@ConfigDesc("the name of server that set request start time") -public String trace_request_queuing_start_host_header = "X-Request-Start-Host"; -@ConfigDesc("set request start time.\n - time format : t=microsecond (or) ts=second.milli") -public String trace_request_queuing_start_time_header = "X-Request-Start-Time"; - -@ConfigDesc("the name of server that set the trace_request_queuing_start_2nd_time_header") -public String trace_request_queuing_start_2nd_host_header = "X-Request-Start-2nd-Host"; -@ConfigDesc("set request passing time measured by 2nd layered server.\n - time format : t=microsecond (or) ts=second.milli") -public String trace_request_queuing_start_2nd_time_header = "X-Request-Start-2nd-Time"; - -//Dir -@ConfigDesc("Plugin directory") -public File plugin_dir = new File(agent_dir_path + "/plugin"); -@ConfigDesc("Dump directory") -public File dump_dir = new File(agent_dir_path + "/dump"); -//public File mgr_agent_lib_dir = new File("./_scouter_"); - -//Auto dump options when active service count is exceed the set threshold. -@ConfigDesc("Activating auto dump - append dumps onto the dump file in dump directory.") -public boolean autodump_enabled = false; -@ConfigDesc("Auto dump trigger point (dump when exceeding this active service count)") -public int autodump_trigger_active_service_cnt = 10000; -@ConfigDesc("Minimum interval(ms) for operating auto dump function - hard min : 5000") -public long autodump_interval_ms = 30000; -@ConfigDesc("Auto dump level (1 : ThreadDump, 2 : active service, 3 : thread list)") -public int autodump_level = 1; // 1:ThreadDump, 2:ActiveService, 3:ThreadList - -//generate thread dump if stucked threads exsist -@ConfigDesc("Dump when a thread are running over this time - 0 is disabled") -public int autodump_stuck_thread_ms = 0; -@ConfigDesc("") -public int autodump_stuck_check_interval_ms = 10000; - -//Auto dump options on exceeded process cpu -@ConfigDesc("Enable the function to generate dump file when this process cpu is over than the set threshold") -public boolean autodump_cpu_exceeded_enabled = false; -@ConfigDesc("Threshold of cpu to generate dump file") -public int autodump_cpu_exceeded_threshold_pct = 90; -@ConfigDesc("Threshold of over-cpu-threshold duration") -public int autodump_cpu_exceeded_duration_ms = 30000; -@ConfigDesc("Dump file generation interval") -public int autodump_cpu_exceeded_dump_interval_ms = 3000; -@ConfigDesc("value of how many dump is generated.") -public int autodump_cpu_exceeded_dump_cnt = 3; - -//Log -@ConfigDesc("Log directory") -public String log_dir = ""; -@ConfigDesc("Retaining log according to date") -public boolean log_rotation_enabled = true; -@ConfigDesc("Keeping period of log") -public int log_keep_days = 7; - -//Detect spring Rest url -@ConfigDesc("use @RequestMapping value as service name on a spring REST web application.") -public boolean _hook_spring_rest_enabled = false; - -//Hook method -@ConfigDesc("Method set for method hooking") -public String hook_method_patterns = ""; - -@ConfigDesc("Prefix ignrore Method hooking") -public String hook_method_ignore_prefixes = "get,set"; -@ConfigDesc("Class set without Method hookingt") -public String hook_method_ignore_classes = ""; -@ConfigDesc("") -public String hook_method_exclude_patterns = ""; -@ConfigDesc("Activating public Method hooking") -public boolean hook_method_access_public_enabled = true; -@ConfigDesc("Activating private Method hooking") -public boolean hook_method_access_private_enabled = false; -@ConfigDesc("Activating protected Method hooking") -public boolean hook_method_access_protected_enabled = false; -@ConfigDesc("Activating default Method hooking") -public boolean hook_method_access_none_enabled = false; - -//this option should be used only if the application is non-servlet. -//In case of servlet web application, detect HttpServlet.service() method as hook-service-patterns automatically. -@ConfigDesc("Method set for service hooking") -public String hook_service_patterns = ""; - -//Hook options for pulgin -@ConfigDesc("Method set for argument hooking") -public String hook_args_patterns = ""; -@ConfigDesc("Method set for return hooking") -public String hook_return_patterns = ""; -@ConfigDesc("Method set for constructor hooking") -public String hook_constructor_patterns = ""; - -//hook for exception handling -public String hook_exception_class_patterns = ""; -@ConfigDesc("Exception class exlude patterns") -public String hook_exception_exlude_class_patterns = ""; -@ConfigDesc("Exception handler patterns - exceptions passed to these methods are treated as error on xlog view. (ex) my.app.myHandler.handleException") -public String hook_exception_handler_method_patterns = ""; - -//XLog -//XLog error marking -@ConfigDesc("Leave an error message at XLog in case of over fetching. (fetch count)") -public int xlog_error_jdbc_fetch_max = 10000; -@ConfigDesc("Leave an error message at XLog in case of over timing query. (ms)") -public int xlog_error_sql_time_max_ms = 30000; -@ConfigDesc("Leave an error message at XLog when UserTransaction's begin/end unpaired") -public boolean xlog_error_check_user_transaction_enabled = true; -@ConfigDesc("mark as error on xlog flag if SqlException is occured.") -public boolean xlog_error_on_sqlexception_enabled = true; -@ConfigDesc("mark as error on xlog flag if Api call errors are occured.") -public boolean xlog_error_on_apicall_exception_enabled = true; - -//XLog hard sampling options -@ConfigDesc("XLog hard sampling mode enabled\n - for the best performance but it affects all statistics data") -public boolean _xlog_hard_sampling_enabled = false; -@ConfigDesc("XLog hard sampling rate(%) - discard data over the percentage") -public int _xlog_hard_sampling_rate_pct = 10; - -//XLog soft sampling options -@ConfigDesc("XLog sampling mode enabled") -public boolean xlog_sampling_enabled = false; -@ConfigDesc("XLog sampling but discard profile only not XLog.") -public boolean xlog_sampling_only_profile = false; -@ConfigDesc("XLog sampling bound millisecond - step1(lowest : range - from 0 to here)") -public int xlog_sampling_step1_ms = 100; -@ConfigDesc("XLog sampling step1 percentage(%)") -public int xlog_sampling_step1_rate_pct = 3; -@ConfigDesc("XLog sampling bound millisecond - step2(range - from step1 to here)") -public int xlog_sampling_step2_ms = 1000; -@ConfigDesc("XLog sampling step2 percentage(%)") -public int xlog_sampling_step2_rate_pct = 10; -@ConfigDesc("XLog sampling bound millisecond - step3(highest : range - from step2 to here)") -public int xlog_sampling_step3_ms = 3000; -@ConfigDesc("XLog sampling step3 percentage(%)") -public int xlog_sampling_step3_rate_pct = 30; -@ConfigDesc("XLog sampling over step3 percentage(%)") -public int xlog_sampling_over_rate_pct = 100; - -//XLog sampling for service patterns options -@ConfigDesc("XLog patterned sampling mode enabled") -public boolean xlog_patterned_sampling_enabled = false; -@ConfigDesc("XLog patterned sampling service patterns\neg) /user/{userId},/device/*") -public String xlog_patterned_sampling_service_patterns = ""; -@ConfigDesc("XLog patterned sampling but discard profile only not XLog.") -public boolean xlog_patterned_sampling_only_profile = false; -@ConfigDesc("XLog patterned sampling bound millisecond - step1(lowest : range - from 0 to here)") -public int xlog_patterned_sampling_step1_ms = 100; -@ConfigDesc("XLog patterned sampling step1 percentage(%)") -public int xlog_patterned_sampling_step1_rate_pct = 3; -@ConfigDesc("XLog patterned sampling bound millisecond - step2(range - from step1 to here)") -public int xlog_patterned_sampling_step2_ms = 1000; -@ConfigDesc("XLog patterned sampling step2 percentage(%)") -public int xlog_patterned_sampling_step2_rate_pct = 10; -@ConfigDesc("XLog patterned sampling bound millisecond - step3(highest : range - from step2 to here)") -public int xlog_patterned_sampling_step3_ms = 3000; -@ConfigDesc("XLog patterned sampling step3 percentage(%)") -public int xlog_patterned_sampling_step3_rate_pct = 30; -@ConfigDesc("XLog patterned sampling over step3 percentage(%)") -public int xlog_patterned_sampling_over_rate_pct = 100; - - -//Async processing support -@ConfigDesc("Hook for supporting async servlet") -public boolean hook_async_servlet_enabled = true; -@ConfigDesc("startAsync impl. method patterns") -public String hook_async_servlet_start_patterns = ""; -@ConfigDesc("asyncContext dispatch impl. method patterns") -public String hook_async_context_dispatch_patterns = ""; - -@ConfigDesc("spring async execution submit patterns") -public String hook_spring_async_submit_patterns = ""; -@ConfigDesc("spring async execution hook enabled") -public boolean hook_spring_async_enabled = true; - -@ConfigDesc("PRE-released option before stable release!\nhook threadpool executor for tracing async processing.") -public boolean hook_async_thread_pool_executor_enabled = false; - -@ConfigDesc("Hook callable and runnable for tracing async processing.\n It hook only 'hook_async_callrunnable_scan_prefixes' option contains pacakage or classes") -public boolean hook_async_callrunnable_enabled = true; -@ConfigDesc("scanning range prefixes for hooking callable, runnable implementations and lambda expressions.\n usually your application package.\n 2 or more packages can be separated by commas.") -public String hook_async_callrunnable_scan_package_prefixes = ""; - -@ConfigDesc("Experimental! test it on staging environment of your system before enable this option.\n enable lambda expressioned class hook for detecting asyncronous processing. \nOnly classes under the package configured by 'hook_async_callrunnable_scan_package_prefixes' is hooked.") -public boolean hook_lambda_instrumentation_strategy_enabled = false; + //Network + @ConfigDesc("UDP local IP") + public String net_local_udp_ip = null; + @ConfigDesc("UDP local Port") + public int net_local_udp_port; + @ConfigDesc("Collector IP") + public String net_collector_ip = "127.0.0.1"; + @ConfigDesc("Collector UDP Port") + public int net_collector_udp_port = NetConstants.SERVER_UDP_PORT; + @ConfigDesc("Collector TCP Port") + public int net_collector_tcp_port = NetConstants.SERVER_TCP_PORT; + @ConfigDesc("Collector TCP Session Count") + public int net_collector_tcp_session_count = 1; + @ConfigDesc("Collector TCP Socket Timeout(ms)") + public int net_collector_tcp_so_timeout_ms = 60000; + @ConfigDesc("Collector TCP Connection Timeout(ms)") + public int net_collector_tcp_connection_timeout_ms = 3000; + @ConfigDesc("UDP Buffer Size") + public int net_udp_packet_max_bytes = 60000; + @ConfigDesc("UDP Collection Interval(ms)") + public long net_udp_collection_interval_ms = 100; + + //Object + @ConfigDesc("Deprecated. It's just an alias of monitoring_group_type which overrides this value.") + public String obj_type = ""; + @ConfigDesc("monitoring group type, commonly named as system name and a monitoring type.\neg) ORDER-JVM, WAREHOUSE-LINUX ...") + public String monitoring_group_type = ""; + @ConfigDesc("Object Name") + public String obj_name = ""; + @ConfigDesc("Host Type") + public String obj_host_type = ""; + @ConfigDesc("Host Name") + public String obj_host_name = ""; + @ConfigDesc("Activating for using object name as PID") + public boolean obj_name_auto_pid_enabled = false; + @ConfigDesc("Redefining DS, RP type according to main object") + public boolean obj_type_inherit_to_child_enabled = false; + @ConfigDesc("Activating collect sub counters using JMX") + public boolean jmx_counter_enabled = true; + + //profile + @ConfigDesc("Http Query String profile") + public boolean profile_http_querystring_enabled; + @ConfigDesc("Http Header profile") + public boolean profile_http_header_enabled; + @ConfigDesc("Service URL prefix for Http header profile") + public String profile_http_header_url_prefix = "/"; + + @ConfigDesc("http header names for profiling with comma separator") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String profile_http_header_keys = ""; + + @ConfigDesc("Http Parameter profile") + public boolean profile_http_parameter_enabled; + @ConfigDesc("Service URL prefix for Http parameter profile") + public String profile_http_parameter_url_prefix = "/"; + @ConfigDesc("spring controller method parameter profile") + public boolean profile_spring_controller_method_parameter_enabled = false; + +// @Deprecated +// @ConfigDesc("Activating profile summary function") +// public boolean profile_summary_mode_enabled = false; + + @ConfigDesc("Profiling the memory usage of each method") + public boolean profile_thread_cputime_enabled = false; + @ConfigDesc("Profiling the memory usage of each service") + public boolean profile_thread_memory_usage_enabled = true; + @ConfigDesc("ThreadStack profile for open socket") + public boolean profile_socket_open_fullstack_enabled = false; + @ConfigDesc("ThreadStack profile for a certain port of open socket") + public int profile_socket_open_fullstack_port = 0; + @ConfigDesc("SQL Map profile") + public boolean profile_sqlmap_name_enabled = true; + @ConfigDesc("DBConnection profile") + public boolean profile_connection_open_enabled = true; + @ConfigDesc("Activating stack information profile in opening DB connection") + public boolean profile_connection_open_fullstack_enabled = false; + @ConfigDesc("AutoCommit profile") + public boolean profile_connection_autocommit_status_enabled = false; + @ConfigDesc("Method profile") + public boolean profile_method_enabled = true; + @ConfigDesc("Profile Buffer Size") + public int profile_step_max_count = 1024; + @ConfigDesc("Stack profile in occurrence of service error") + public boolean profile_fullstack_service_error_enabled = false; + @ConfigDesc("Stack profile in occurrence of apicall error") + public boolean profile_fullstack_apicall_error_enabled = false; + @ConfigDesc("Stack profile in occurrence of sql error") + public boolean profile_fullstack_sql_error_enabled = false; + @ConfigDesc("Stack profile in occurrence of commit error") + public boolean profile_fullstack_sql_commit_enabled = false; + @ConfigDesc("Stack profile in occurrence of sql error") + public boolean profile_fullstack_hooked_exception_enabled = false; + + @ConfigDesc("Stack profile in occurrence of redis error") + public boolean profile_fullstack_redis_error_enabled = false; + @ConfigDesc("make unknown redis key stringify by force. (using new String(byte[])") + public boolean profile_redis_key_forcibly_stringify_enabled = false; + + @ConfigDesc("Number of stack profile lines in occurrence of error") + public int profile_fullstack_max_lines = 0; + + @ConfigDesc("Escaping literal parameters for normalizing the query") + public boolean profile_sql_escape_enabled = true; + @ConfigDesc("") + public boolean _profile_fullstack_sql_connection_enabled = false; + @ConfigDesc("") + public boolean _profile_fullstack_sql_execute_debug_enabled = false; + @ConfigDesc("") + public boolean profile_fullstack_rs_leak_enabled = false; + @ConfigDesc("") + public boolean profile_fullstack_stmt_leak_enabled = false; + + //Trace + @ConfigDesc("User ID based(0 : Remote Address, 1 : Cookie, 2 : Scouter Cookie, 2 : Header) \n - able to set value for 1.Cookie and 3.Header \n - refer to 'trace_user_session_key'") + public int trace_user_mode = 2; // 0:Remote IP, 1:JSessionID, 2:Scouter Cookie, 3:Header + @ConfigDesc("Setting a cookie path for SCOUTER cookie when trace_user_mode is 2") + public String trace_user_cookie_path = "/"; + + @ConfigDesc("Tracing background thread socket") + public boolean trace_background_socket_enabled = true; + @ConfigDesc("Adding assigned header value to the service name") + public String trace_service_name_header_key; + @ConfigDesc("Adding assigned get parameter to the service name") + public String trace_service_name_get_key; + @ConfigDesc("Adding assigned post parameter to the service name") + public String trace_service_name_post_key; + @ConfigDesc("Active Thread Warning Time(ms)") + public long trace_activeserivce_yellow_time = 3000; + @ConfigDesc("Active Thread Fatal Time(ms)") + public long trace_activeservice_red_time = 8000; + @ConfigDesc("Identifying header key of Remote IP") + public String trace_http_client_ip_header_key = ""; + @ConfigDesc("Activating gxid connection in HttpTransfer") + public boolean trace_interservice_enabled = true; + @ConfigDesc("") + public String _trace_interservice_gxid_header_key = "X-Scouter-Gxid"; + @ConfigDesc("") + public boolean trace_response_gxid_enabled = false; + @ConfigDesc("") + public String _trace_interservice_callee_header_key = "X-Scouter-Callee"; + @ConfigDesc("") + public String _trace_interservice_caller_header_key = "X-Scouter-Caller"; + @ConfigDesc("") + public String _trace_interservice_caller_obj_header_key = "X-Scouter-Caller-Obj"; + @ConfigDesc("") + public String _trace_interservice_callee_obj_header_key = "X-Scouter-Callee-Obj"; + @ConfigDesc("JSession key for user ID") + public String trace_user_session_key = "JSESSIONID"; + @ConfigDesc("") + public boolean _trace_auto_service_enabled = false; + @ConfigDesc("") + public boolean _trace_auto_service_backstack_enabled = true; + @ConfigDesc("Activating trace DB2") + public boolean trace_db2_enabled = true; + + @Deprecated + @ConfigDesc("Deprecated!") + public boolean trace_webserver_enabled = false; + @Deprecated + @ConfigDesc("Deprecated!") + public String trace_webserver_name_header_key = "X-Forwarded-Host"; + @Deprecated + @ConfigDesc("Deprecated!") + public String trace_webserver_time_header_key = "X-Forwarded-Time"; + + @ConfigDesc("measure queuing time from load balancer, reverse proxy, web server...\n if set, you can open Queuing Time view.") + public boolean trace_request_queuing_enabled = false; + @ConfigDesc("the name of server that set request start time") + public String trace_request_queuing_start_host_header = "X-Request-Start-Host"; + @ConfigDesc("set request start time.\n - time format : t=microsecond (or) ts=second.milli") + public String trace_request_queuing_start_time_header = "X-Request-Start-Time"; + + @ConfigDesc("the name of server that set the trace_request_queuing_start_2nd_time_header") + public String trace_request_queuing_start_2nd_host_header = "X-Request-Start-2nd-Host"; + @ConfigDesc("set request passing time measured by 2nd layered server.\n - time format : t=microsecond (or) ts=second.milli") + public String trace_request_queuing_start_2nd_time_header = "X-Request-Start-2nd-Time"; + + @ConfigDesc("") + public int _trace_fullstack_socket_open_port = 0; + @ConfigDesc("") + public int _trace_sql_parameter_max_count = 128; + @ConfigDesc("") + public String trace_delayed_service_mgr_filename = "setting_delayed_service.properties"; + @ConfigDesc("") + public boolean trace_rs_leak_enabled = false; + @ConfigDesc("") + public boolean trace_stmt_leak_enabled = false; + + //Dir + @ConfigDesc("Plugin directory") + public File plugin_dir = new File(agent_dir_path + "/plugin"); + @ConfigDesc("Dump directory") + public File dump_dir = new File(agent_dir_path + "/dump"); + //public File mgr_agent_lib_dir = new File("./_scouter_"); + + //Manager + @ConfigDesc("") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String mgr_static_content_extensions = "js, htm, html, gif, png, jpg, css"; + @ConfigDesc("") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String mgr_log_ignore_ids = ""; + + //Auto dump options when active service is exceed the set threshold count. + @ConfigDesc("Activating auto dump - append dumps onto the dump file in dump directory.") + public boolean autodump_enabled = false; + @ConfigDesc("Auto dump trigger point (dump when exceeding this active service count)") + public int autodump_trigger_active_service_cnt = 10000; + @ConfigDesc("Minimum interval(ms) for operating auto dump function - hard min : 5000") + public long autodump_interval_ms = 30000; + @ConfigDesc("Auto dump level (1 : ThreadDump, 2 : active service, 3 : thread list)") + public int autodump_level = 1; // 1:ThreadDump, 2:ActiveService, 3:ThreadList + + //Auto dump options about the thread on stuck + @ConfigDesc("Dump when a thread are running over this time - 0 is disabled") + public int autodump_stuck_thread_ms = 0; + @ConfigDesc("") + public int autodump_stuck_check_interval_ms = 10000; + + //Auto dump options on exceeded process cpu + @ConfigDesc("Enable the function to generate dump file when this process cpu is over than the set threshold") + public boolean autodump_cpu_exceeded_enabled = false; + @ConfigDesc("Threshold of cpu to generate dump file") + public int autodump_cpu_exceeded_threshold_pct = 90; + @ConfigDesc("Threshold of over-cpu-threshold duration") + public int autodump_cpu_exceeded_duration_ms = 30000; + @ConfigDesc("Dump file generation interval") + public int autodump_cpu_exceeded_dump_interval_ms = 3000; + @ConfigDesc("value of how many dump is generated.") + public int autodump_cpu_exceeded_dump_cnt = 3; + + //XLog + @Deprecated + @ConfigDesc("(deprecated) XLog Ignore Time\n - for backward compatibility. Use xlog_sampling_xxx options instead") + public int xlog_lower_bound_time_ms = 0; + + //XLog error marking + @ConfigDesc("Leave an error message at XLog in case of over fetching. (fetch count)") + public int xlog_error_jdbc_fetch_max = 10000; + @ConfigDesc("Leave an error message at XLog in case of over timing query. (ms)") + public int xlog_error_sql_time_max_ms = 30000; + @ConfigDesc("Leave an error message at XLog when UserTransaction's begin/end unpaired") + public boolean xlog_error_check_user_transaction_enabled = true; + @ConfigDesc("mark as error on xlog flag if SqlException is occured.") + public boolean xlog_error_on_sqlexception_enabled = true; + @ConfigDesc("mark as error on xlog flag if Api call errors are occured.") + public boolean xlog_error_on_apicall_exception_enabled = true; + @ConfigDesc("mark as error on xlog flag if redis error is occured.") + public boolean xlog_error_on_redis_exception_enabled = true; + + //XLog hard sampling options + @ConfigDesc("XLog hard sampling mode enabled\n - for the best performance but it affects all statistics data") + public boolean _xlog_hard_sampling_enabled = false; + @ConfigDesc("XLog hard sampling rate(%) - discard data over the percentage") + public int _xlog_hard_sampling_rate_pct = 10; + + //XLog soft sampling options + @ConfigDesc("XLog sampling mode enabled") + public boolean xlog_sampling_enabled = false; + @ConfigDesc("XLog sampling but discard profile only not XLog.") + public boolean xlog_sampling_only_profile = false; + @ConfigDesc("XLog sampling bound millisecond - step1(lowest : range - from 0 to here)") + public int xlog_sampling_step1_ms = 100; + @ConfigDesc("XLog sampling step1 percentage(%)") + public int xlog_sampling_step1_rate_pct = 3; + @ConfigDesc("XLog sampling bound millisecond - step2(range - from step1 to here)") + public int xlog_sampling_step2_ms = 1000; + @ConfigDesc("XLog sampling step2 percentage(%)") + public int xlog_sampling_step2_rate_pct = 10; + @ConfigDesc("XLog sampling bound millisecond - step3(highest : range - from step2 to here)") + public int xlog_sampling_step3_ms = 3000; + @ConfigDesc("XLog sampling step3 percentage(%)") + public int xlog_sampling_step3_rate_pct = 30; + @ConfigDesc("XLog sampling over step3 percentage(%)") + public int xlog_sampling_over_rate_pct = 100; + + //XLog sampling for service patterns options + @ConfigDesc("XLog patterned sampling mode enabled") + public boolean xlog_patterned_sampling_enabled = false; + + @ConfigDesc("XLog patterned sampling service patterns\neg) /user/{userId},/device/*") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String xlog_patterned_sampling_service_patterns = ""; + + @ConfigDesc("XLog patterned sampling but discard profile only not XLog.") + public boolean xlog_patterned_sampling_only_profile = false; + @ConfigDesc("XLog patterned sampling bound millisecond - step1(lowest : range - from 0 to here)") + public int xlog_patterned_sampling_step1_ms = 100; + @ConfigDesc("XLog patterned sampling step1 percentage(%)") + public int xlog_patterned_sampling_step1_rate_pct = 3; + @ConfigDesc("XLog patterned sampling bound millisecond - step2(range - from step1 to here)") + public int xlog_patterned_sampling_step2_ms = 1000; + @ConfigDesc("XLog patterned sampling step2 percentage(%)") + public int xlog_patterned_sampling_step2_rate_pct = 10; + @ConfigDesc("XLog patterned sampling bound millisecond - step3(highest : range - from step2 to here)") + public int xlog_patterned_sampling_step3_ms = 3000; + @ConfigDesc("XLog patterned sampling step3 percentage(%)") + public int xlog_patterned_sampling_step3_rate_pct = 30; + @ConfigDesc("XLog patterned sampling over step3 percentage(%)") + public int xlog_patterned_sampling_over_rate_pct = 100; + + //XLog discard options + @ConfigDesc("XLog discard service patterns\nNo XLog data, but apply to TPS and summary.\neg) /user/{userId},/device/*") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String xlog_discard_service_patterns = ""; + @ConfigDesc("Do not discard error even if it's discard pattern.") + public boolean xlog_discard_service_show_error = true; + + @ConfigDesc("XLog fully discard service patterns\nNo XLog data, No apply to TPS and summary.\neg) /user/{userId},/device/*") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String xlog_fully_discard_service_patterns = ""; + + //Alert + @ConfigDesc("Limited length of alert message") + public int alert_message_length = 3000; + @ConfigDesc("Minimum interval(ms) in fetching the same alert") + public long alert_send_interval_ms = 10000; + @ConfigDesc("PermGen usage for send alert") + public int alert_perm_warning_pct = 90; + + //Log + @ConfigDesc("") + public boolean _log_asm_enabled; + @ConfigDesc("") + public boolean _log_udp_xlog_enabled; + @ConfigDesc("") + public boolean _log_udp_object_enabled; + @ConfigDesc("") + public boolean _log_udp_counter_enabled; + @ConfigDesc("") + public boolean _log_datasource_lookup_enabled = true; + @ConfigDesc("") + public boolean _log_background_sql = false; + @ConfigDesc("Log directory") + public String log_dir = ""; + @ConfigDesc("Retaining log according to date") + public boolean log_rotation_enabled = true; + @ConfigDesc("Keeping period of log") + public int log_keep_days = 7; + @ConfigDesc("") + public boolean _trace = false; + @ConfigDesc("") + public boolean _trace_use_logger = false; + + //Hook + @ConfigDesc("Method set for argument hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_args_patterns = ""; + + @ConfigDesc("Method set for return hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_return_patterns = ""; + + @ConfigDesc("Method set for constructor hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_constructor_patterns = ""; + + @ConfigDesc("Method set for dbconnection hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_connection_open_patterns = ""; + + @ConfigDesc("Method set for getconnection hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_get_connection_patterns = ""; + -//Control -@ConfigDesc("Activating Reject service") -public boolean control_reject_service_enabled = false; -@ConfigDesc("Minimum count of rejecting active service") -public int control_reject_service_max_count = 10000; -@ConfigDesc("Activating Reject URL") -public boolean control_reject_redirect_url_enabled = false; -@ConfigDesc("Reject Text") -public String control_reject_text = "too many request!!"; -@ConfigDesc("Reject URL") -public String control_reject_redirect_url = "/error.html"; - -// SFA(Stack Frequency Analyzer) -@ConfigDesc("Activating period threaddump function") -public boolean sfa_dump_enabled = false; -@ConfigDesc("SFA thread dump Interval(ms)") -public int sfa_dump_interval_ms = 10000; - -//miscellaneous -@ConfigDesc("User ID based(0 : Remote Address, 1 : JSessionID, 2 : Scouter Cookie)") -public int trace_user_mode = 2; // 0:Remote IP, 1:JSessionID, 2:SetCookie -@ConfigDesc("Setting a cookie path for SCOUTER cookie when trace_user_mode is 2") -public String trace_user_cookie_path = "/"; - -@ConfigDesc("Path to file creation directory of process ID file") -public String counter_object_registry_path = "/tmp/scouter"; - -@ConfigDesc("think time (ms) of recent user") -public long counter_recentuser_valid_ms = DateUtil.MILLIS_PER_FIVE_MINUTE; - -@ConfigDesc("PermGen usage for send alert") -public int alert_perm_warning_pct = 90; - -@ConfigDesc("") -public String mgr_static_content_extensions = "js, htm, html, gif, png, jpg, css"; + @ConfigDesc("IntialContext Class Set") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_context_classes = "javax/naming/InitialContext"; + + @ConfigDesc("Method set for method hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_method_patterns = ""; + + @ConfigDesc("Prefix without Method hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_method_ignore_prefixes = "get,set"; + + @ConfigDesc("Class set without Method hookingt") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_method_ignore_classes = ""; + + @ConfigDesc("") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_method_exclude_patterns = ""; + + @ConfigDesc("Activating public Method hooking") + public boolean hook_method_access_public_enabled = true; + @ConfigDesc("Activating private Method hooking") + public boolean hook_method_access_private_enabled = false; + @ConfigDesc("Activating protected Method hooking") + public boolean hook_method_access_protected_enabled = false; + @ConfigDesc("Activating none Method hooking") + public boolean hook_method_access_none_enabled = false; + @ConfigDesc("Activating lambda Method hooking") + public boolean hook_method_lambda_enable = true; + + @ConfigDesc("Method set for service hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_service_patterns = ""; + + @ConfigDesc("Method set for apicall hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_apicall_patterns = ""; + + @ConfigDesc("Method set for apicallinfo hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_apicall_info_patterns = ""; + + @ConfigDesc("Method set for jsp hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_jsp_patterns = ""; + + @ConfigDesc("Method set for preparestatement hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_jdbc_pstmt_classes = ""; + + @ConfigDesc("Method set for statement hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_jdbc_stmt_classes = ""; + + @ConfigDesc("Method set for resultset hooking") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_jdbc_rs_classes = ""; + + @ConfigDesc("Method set for dbconnection wrapping") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_jdbc_wrapping_driver_patterns = ""; + + @ConfigDesc("Exception class patterns - These will seem as error on xlog view.\n (ex) my.app.BizException,my.app.exception.*Exception") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_exception_class_patterns = ""; + + @ConfigDesc("Exception class exclude patterns") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_exception_exclude_class_patterns = ""; + + @ConfigDesc("Exception handler patterns\n - exceptions passed to these methods are treated as error on xlog view.\n (ex) my.app.myHandler.handleException") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_exception_handler_method_patterns = ""; + + @ConfigDesc("Exception handler exclude class name patterns(can not include star-* in patterns)\n - (ex) my.app.MyManagedException,MyBizException") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_exception_handler_exclude_class_patterns = ""; + + @ConfigDesc("Hook for supporting async servlet") + public boolean hook_async_servlet_enabled = true; + + @ConfigDesc("startAsync impl. method patterns") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_async_servlet_start_patterns = ""; + + @ConfigDesc("asyncContext dispatch impl. method patterns") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_async_context_dispatch_patterns = ""; + + @ConfigDesc("spring async execution submit patterns") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_spring_async_submit_patterns = ""; + + @ConfigDesc("spring async execution hook enabled") + public boolean hook_spring_async_enabled = true; + + @Deprecated + @ConfigDesc("Deprecated. use hook_async_callrunnable_enabled") + public boolean hook_async_callrunnable_enable = true; + + @ConfigDesc("Hook callable and runnable for tracing async processing.\n It hook only 'hook_async_callrunnable_scan_prefixes' option contains pacakage or classes") + public boolean hook_async_callrunnable_enabled = true; + + @ConfigDesc("scanning range prefixes for hooking callable, runnable implementations and lambda expressions.\n usually your application package.\n 2 or more packages can be separated by commas.") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String hook_async_callrunnable_scan_package_prefixes = ""; + + @ConfigDesc("redis key setting patterns.\n refer to org.springframework.data.redis.core.AbstractOperations#rawKey") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public String _hook_redis_set_key_patterns = ""; + + @ConfigDesc("PRE-released option before stable release!\nhook threadpool executor for tracing async processing.") + public boolean hook_async_thread_pool_executor_enabled = false; + + @ConfigDesc("Experimental! test it on staging environment of your system before enable this option.\n enable lambda expressioned class hook for detecting asyncronous processing. \nOnly classes under the package configured by 'hook_async_callrunnable_scan_package_prefixes' is hooked.") + public boolean hook_lambda_instrumentation_strategy_enabled = false; + + @ConfigDesc("") + public String hook_add_fields = ""; + @ConfigDesc("") + public boolean _hook_serivce_enabled = true; + @ConfigDesc("") + public boolean _hook_dbsql_enabled = true; + @ConfigDesc("") + public boolean _hook_dbconn_enabled = true; + @ConfigDesc("") + public boolean _hook_cap_enabled = true; + @ConfigDesc("") + public boolean _hook_methods_enabled = true; + @ConfigDesc("") + public boolean _hook_apicall_enabled = true; + @ConfigDesc("") + public boolean _hook_socket_enabled = true; + @ConfigDesc("") + public boolean _hook_jsp_enabled = true; + @ConfigDesc("") + public boolean _hook_async_enabled = true; + @ConfigDesc("") + public boolean _hook_usertx_enabled = true; + @ConfigDesc("") + public boolean _hook_spring_rest_enabled = true; + @ConfigDesc("") + public boolean _hook_redis_enabled = true; + + @ConfigDesc("") + public String _hook_direct_patch_classes = ""; + + @ConfigDesc("") + public String _hook_boot_prefix = null; + @ConfigDesc("for warning a big Map type object that have a lot of entities.\n It may increase system load. be careful to enable this option.") + public boolean _hook_map_impl_enabled = false; + @ConfigDesc("") + public int _hook_map_impl_warning_size = 50000; + + //Control + @ConfigDesc("Activating Reject service") + public boolean control_reject_service_enabled = false; + @ConfigDesc("Minimum count of rejecting active service") + public int control_reject_service_max_count = 10000; + @ConfigDesc("Activating Reject URL") + public boolean control_reject_redirect_url_enabled = false; + @ConfigDesc("Reject Text") + public String control_reject_text = "too many request!!"; + @ConfigDesc("Reject URL") + public String control_reject_redirect_url = "/error.html"; + + // Counter + @ConfigDesc("Activating collect counter") + public boolean counter_enabled = true; + @ConfigDesc("think time (ms) of recent user") + public long counter_recentuser_valid_ms = DateUtil.MILLIS_PER_FIVE_MINUTE; + @ConfigDesc("Path to file creation directory of process ID file") + public String counter_object_registry_path = "/tmp/scouter"; + @ConfigDesc("Activating custom jmx") + public boolean counter_custom_jmx_enabled = false; + @ConfigDesc("Activating interaction counter") + public boolean counter_interaction_enabled = false; + + // SFA(Stack Frequency Analyzer) + @ConfigDesc("Activating period threaddump function") + public boolean sfa_dump_enabled = false; + @ConfigDesc("SFA thread dump Interval(ms)") + public int sfa_dump_interval_ms = 10000; + + //PSTS(Preiodical Stacktrace Step) + @ConfigDesc("Activating periodical stacktrace step (write fixed interval thread dump on a profile)") + public boolean _psts_enabled = false; + @ConfigDesc("PSTS(periodical stacktrace step) thread dump Interval(ms) - hard min limit 2000") + public int _psts_dump_interval_ms = 10000; ``` ## Host agent options @@ -392,39 +970,78 @@ public String mgr_static_content_extensions = "js, htm, html, gif, png, jpg, css ``` ```java -//Network -@ConfigDesc("Collector IP") -public String net_collector_ip = "127.0.0.1"; -@ConfigDesc("Collector UDP Port") -public int net_collector_udp_port = 6100; -@ConfigDesc("Collector TCP Port") -public int net_collector_tcp_port = 6100; - -//Log -@ConfigDesc("Log directory") -public String log_dir = "./logs"; -@ConfigDesc("Keeping period of log") -public int log_keep_days = 365; - -//Disk -public boolean disk_alert_enabled = true; -public int disk_warning_pct = 70; -public int disk_fatal_pct = 90; -public StringSet disk_ignore_names = new StringSet(); - -//Cpu -public boolean cpu_alert_enabled = true; -public long cpu_check_period_ms = 300000; -public long cpu_alert_interval_ms = 30000; -public int cpu_warning_pct = 70; -public int cpu_fatal_pct = 90; -public int cpu_warning_history = 3; -public int cpu_fatal_history = 3; -public int _cpu_value_avg_sec = 10; - -//Memory -public boolean mem_alert_enabled = false; -public long mem_alert_interval_ms = 30000; -public int mem_warning_pct = 80; -public int mem_fatal_pct = 90; + //Network + @ConfigDesc("UDP local IP") + public String net_local_udp_ip = null; + @ConfigDesc("UDP local Port") + public int net_local_udp_port; + @ConfigDesc("Collector IP") + public String net_collector_ip = "127.0.0.1"; + @ConfigDesc("Collector UDP Port") + public int net_collector_udp_port = NetConstants.SERVER_UDP_PORT; + @ConfigDesc("Collector TCP Port") + public int net_collector_tcp_port = NetConstants.SERVER_TCP_PORT; + @ConfigDesc("Collector TCP Session Count") + public int net_collector_tcp_session_count = 1; + @ConfigDesc("Collector TCP Socket Timeout(ms)") + public int net_collector_tcp_so_timeout_ms = 60000; + @ConfigDesc("Collector TCP Connection Timeout(ms)") + public int net_collector_tcp_connection_timeout_ms = 3000; + @ConfigDesc("UDP Buffer Size") + public int net_udp_packet_max_bytes = 60000; + + //Object + @ConfigDesc("Deprecated. It's just an alias of monitoring_group_type which overrides this value.") + public String obj_type = ""; + @ConfigDesc("monitoring group type, commonly named as system name and a monitoring type.\neg) ORDER-JVM, WAREHOUSE-LINUX ...") + public String monitoring_group_type = ""; + @ConfigDesc("Object Name") + public String obj_name = ""; + + //Manager + @ConfigDesc("") + @ConfigValueType(ValueType.COMMA_SEPARATED_VALUE) + public StringSet mgr_log_ignore_ids = new StringSet(); + + //Counter + @ConfigDesc("Activating collect counter") + public boolean counter_enabled = true; + @ConfigDesc("Path to file reading directory of java process ID file") + public String counter_object_registry_path = "/tmp/scouter"; + + @ConfigDesc("Activating netstat counter - too many sockets(ESTABLISHED, TIME_WAIT...) may cause heavy cpu load.") + public boolean counter_netstat_enabled = true; + + //Log + @ConfigDesc("") + public boolean log_udp_object = false; + @ConfigDesc("Retaining log according to date") + public boolean log_rotation_enalbed = true; + @ConfigDesc("Log directory") + public String log_dir = "./logs"; + @ConfigDesc("Keeping period of log") + public int log_keep_days = 365; + + //Disk + public boolean disk_alert_enabled = true; + public int disk_warning_pct = 70; + public int disk_fatal_pct = 90; + public StringSet disk_ignore_names = new StringSet(); + + //Cpu + public boolean cpu_alert_enabled = true; + public long cpu_check_period_ms = 300000; + public long cpu_alert_interval_ms = 30000; + public int cpu_warning_pct = 70; + public int cpu_fatal_pct = 90; + public int cpu_warning_history = 3; + public int cpu_fatal_history = 3; + public int _cpu_value_avg_sec = 10; + + //Memory + public boolean mem_alert_enabled = false; + public long mem_alert_interval_ms = 30000; + public int mem_warning_pct = 80; + public int mem_fatal_pct = 90; + ``` From a0e2d642f776bf1e1cdd4498709a98cc395f4136 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Fri, 28 Sep 2018 13:38:29 +0900 Subject: [PATCH 51/53] [doc] documentation. --- scouter.document/tech/Web-API-Guide.md | 18 ++++++++++++++++++ scouter.document/tech/Web-API-Guide_kr.md | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/scouter.document/tech/Web-API-Guide.md b/scouter.document/tech/Web-API-Guide.md index 7a28be5bc..0c6b29f7e 100644 --- a/scouter.document/tech/Web-API-Guide.md +++ b/scouter.document/tech/Web-API-Guide.md @@ -582,3 +582,21 @@ public int log_keep_days = 30; - **Query params** - `url` : url to shorten - `serverId` : (optional if single server) + +#### - `GET /v1/interactionCounter/realTime` + - get interaction counter values. + - Get performance information between multiple jvm and related systems such as db, redis, and external calls. + - Provides information such as the number of calls per unit time between each component, the sum of response times, and the sum of errors. + - this counter is activated when the option `counter_interaction_enabled` is set `true` from java agent. + - **Auth** : required + - **Query params** + - `objHashes` : object hashes by comma separator also allowed with bracket. eg) 10011,10012 or [10011,10012] + - `serverId` : (optional if single server) + +#### - `GET /v1/interactionCounter/realTime/ofType/{objType}` + - Same as above + - **Auth** : required + - **Path params** + - `objType` : (required) + - **Query params** + - `serverId` : (optional if single server) diff --git a/scouter.document/tech/Web-API-Guide_kr.md b/scouter.document/tech/Web-API-Guide_kr.md index d9792df3e..d4b861d55 100644 --- a/scouter.document/tech/Web-API-Guide_kr.md +++ b/scouter.document/tech/Web-API-Guide_kr.md @@ -581,3 +581,21 @@ public int log_keep_days = 30; - **Query params** - `url` : url to shorten - `serverId` : (optional if single server) + +#### - `GET /v1/interactionCounter/realTime` + - get interaction counter values. + - 여러 jvm과 db, redis, 외부 호출등 연관된 시스템간의 성능 정보를 가져올 수 있다. + - 예를 들면 각 구성 요소간 단위 시간당 호출 건수, 응답시간의 합, 에러의 총합 등의 정보를 제공해준다. + - this counter is activated when the option `counter_interaction_enabled` is set `true` from java agent. + - **Auth** : required + - **Query params** + - `objHashes` : object hashes by comma separator also allowed with bracket. eg) 10011,10012 or [10011,10012] + - `serverId` : (optional if single server) + +#### - `GET /v1/interactionCounter/realTime/ofType/{objType}` + - Same as above + - **Auth** : required + - **Path params** + - `objType` : (required) + - **Query params** + - `serverId` : (optional if single server) From 9efc08f47a18e5cb7a20c131f15ae7dea88ebd3d Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Fri, 28 Sep 2018 13:41:49 +0900 Subject: [PATCH 52/53] versioning 2.0.0 --- pom.xml | 2 +- scouter.agent.batch/pom.xml | 2 +- scouter.agent.host/pom.xml | 2 +- scouter.agent.java/pom.xml | 2 +- scouter.common/pom.xml | 2 +- scouter.deploy/pom.xml | 2 +- scouter.server.boot/pom.xml | 2 +- scouter.server/pom.xml | 2 +- scouter.webapp/pom.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index 8a93851a0..a7898e5b9 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.1.SNAPSHOT + 2.0.0 pom SCOUTER APM diff --git a/scouter.agent.batch/pom.xml b/scouter.agent.batch/pom.xml index ab9734015..7c17902d6 100644 --- a/scouter.agent.batch/pom.xml +++ b/scouter.agent.batch/pom.xml @@ -5,7 +5,7 @@ io.github.scouter-project scouter-parent - 1.9.1.SNAPSHOT + 2.0.0 scouter-agent-batch diff --git a/scouter.agent.host/pom.xml b/scouter.agent.host/pom.xml index 537d93e09..47fde0e77 100644 --- a/scouter.agent.host/pom.xml +++ b/scouter.agent.host/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.1.SNAPSHOT + 2.0.0 scouter-agent-host diff --git a/scouter.agent.java/pom.xml b/scouter.agent.java/pom.xml index a61145595..50ae7c2ac 100644 --- a/scouter.agent.java/pom.xml +++ b/scouter.agent.java/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.1.SNAPSHOT + 2.0.0 scouter-agent-java diff --git a/scouter.common/pom.xml b/scouter.common/pom.xml index 7cd45cf53..047b3ad40 100644 --- a/scouter.common/pom.xml +++ b/scouter.common/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.1.SNAPSHOT + 2.0.0 scouter-common diff --git a/scouter.deploy/pom.xml b/scouter.deploy/pom.xml index e4e518b45..3eff5eca0 100644 --- a/scouter.deploy/pom.xml +++ b/scouter.deploy/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.1.SNAPSHOT + 2.0.0 scouter-deploy diff --git a/scouter.server.boot/pom.xml b/scouter.server.boot/pom.xml index 24e5c0a58..8b214e426 100644 --- a/scouter.server.boot/pom.xml +++ b/scouter.server.boot/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.1.SNAPSHOT + 2.0.0 scouter-server-boot diff --git a/scouter.server/pom.xml b/scouter.server/pom.xml index eb50b916f..07cc06df8 100644 --- a/scouter.server/pom.xml +++ b/scouter.server/pom.xml @@ -4,7 +4,7 @@ io.github.scouter-project scouter-parent - 1.9.1.SNAPSHOT + 2.0.0 scouter-server diff --git a/scouter.webapp/pom.xml b/scouter.webapp/pom.xml index fbe43ce83..23e86c26b 100644 --- a/scouter.webapp/pom.xml +++ b/scouter.webapp/pom.xml @@ -5,7 +5,7 @@ scouter-parent io.github.scouter-project - 1.9.1.SNAPSHOT + 2.0.0 4.0.0 From eaeed96fbb896e3d9cc2c54558ef3cab6e149f03 Mon Sep 17 00:00:00 2001 From: Gunhee Lee Date: Fri, 28 Sep 2018 15:22:15 +0900 Subject: [PATCH 53/53] skip test on build' --- build_package.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build_package.sh b/build_package.sh index 89eb33688..61cb352eb 100755 --- a/build_package.sh +++ b/build_package.sh @@ -14,6 +14,6 @@ if [ -z "$MVN" ]; then echo maven not found. exit 1 else - $MVN clean package - $MVN -f ./scouter.deploy/pom.xml clean package + $MVN -Dmaven.test.skip=true clean package + $MVN -Dmaven.test.skip=true -f ./scouter.deploy/pom.xml clean package fi

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