Commit b3cff686 by amir

add /_mon/_apiList to get all rest api's and add influxdb metrics

parent 1c73cca9
### Microservice Framework in JAVA
## 2.0.1 add /_mon/_apiList to get all rest api's and add influxdb metrics
- Add env params:
- "influxdb.hostport": influxdb server ( default 'null' > no server)
- "influx.report.intrerval": the report interval in seconds ( default 10 )
- "influxdb.user": influxdb user ( default "root")
- "influxdb.pass": influxdb pass( default "giptmgrr")
- "influxdb.dbname": db name ( default "mcx_db");
## 2.0.0 merge the new microservices design in develop branch
## 1.4.x: New microservices design:
- Truly async handling for rest commands receive and send
......
group 'com.ipgallery.common'
version '2.0.0'
version '2.0.1'
apply plugin: 'java'
apply plugin: 'maven-publish'
......@@ -13,7 +13,7 @@ repositories {
//use mavenLocal in cases you want to create this jar on your local machine
//or to be able to use one
//mavenLocal()//defaults to ~/.m2/repository
maven { url "http://172.16.1.132:8081/repository/internal" }
maven { url "https://municipalitybank.com:8081/repository/internal" }
}
......@@ -29,8 +29,8 @@ dependencies {
compile 'com.ipgallery.common:utils:1.2.5'
compile ('com.ipgallery.common:rabbitmq:1.0.3')
compile 'com.ecwid.consul:consul-api:1.1.9'
compile 'com.github.davidb:metrics-influxdb:0.8.2'
compile 'io.dropwizard.metrics:metrics-graphite:3.1.2'
compile 'com.github.davidb:metrics-influxdb:0.9.3'
compile 'io.dropwizard.metrics:metrics-graphite:3.2.5'
compile 'io.jsonwebtoken:jjwt:0.6.0'
compile group: 'org.zeromq', name: 'jeromq', version: '0.4.0'
compile 'org.elasticsearch.client:rest:5.4.1'
......@@ -58,12 +58,20 @@ publishing {
publications {
repositories.maven {
url 'http://172.16.1.132:8081/repository/internal'
url 'https://municipalitybank.com:8081/repository/internal'
credentials {
username "admin"
password "giptmgr1"
username "amir.aharon@ipgallery.com"
password "giptmgrr"
}
}
// repositories.maven {
// url 'http://172.16.1.132:8081/repository/internal'
// credentials {
// username "admin"
// password "giptmgr1"
// }
// }
mavenJava(MavenPublication) {
//artifactId 'group-service'
from components.java
......
......@@ -21,6 +21,8 @@ import rabbitmq.common.RMQId;
import rabbitmq.server.RMQHandler;
import rabbitmq.server.RMQServer;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.*;
import java.util.Map.Entry;
import java.util.function.BiConsumer;
......@@ -48,6 +50,7 @@ public class MicroserviceApp
RMQClientParams mbiParams = null;
String appName;
String id;
String serverName;
Map<String, BaseHandler> msMap = null;
// the server containers - rest and MQ
Undertow restServer = null;
......@@ -68,14 +71,29 @@ public class MicroserviceApp
/////////////// new design microservice ///////////////////
Reactor reactor;
public MicroserviceApp(String appName)
{
this.appName = appName;
id = String.valueOf(System.currentTimeMillis() & 0xffff);
reactor = new Reactor();
serverName = getMachineName();
sInstance = this;
}
private String getMachineName() {
String machineName = "";
InetAddress localMachine = null;
try {
localMachine = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
if (localMachine != null)
machineName = localMachine.getHostName();
return machineName;
}
public MicroserviceApp(RestServerParams rsiParams,
RMQClientParams mbiParams, String appName)
{
......@@ -106,6 +124,10 @@ public class MicroserviceApp
return id;
}
public String getServerName() {
return serverName;
}
public boolean isEnableDefaultServiceAuthorization() { return enableDefaultServiceAuthorization; }
public IServiceDiscovery getServiceDiscovery() { return serviceDiscovery; }
......@@ -158,9 +180,8 @@ public class MicroserviceApp
}
public MicroserviceApp withMonitoring() {
// optMonitorHandler = Optional.of(new MonitorHandler());
// this.addHandler(MON_PREFIX, optMonitorHandler.get());
addMethodClass(new MonitorHandler());
optMonitorHandler = Optional.of(new MonitorHandler());
addMethodClass(optMonitorHandler.get());
return this;
}
......@@ -583,7 +604,7 @@ public class MicroserviceApp
logger = new ILoggerConsoleImpl(appName); //new ILogger4jImpl(appName); // default logger
// some java 8 now...
optMonitorHandler.ifPresent(mon -> msMap.forEach((prfx,handler) -> { mon.addHandler(handler);}));
optMonitorHandler.ifPresent(mon -> mon.setReactor(reactor));
/*
* checking configuration
......
......@@ -2,6 +2,7 @@ package microservice.handlers;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
......@@ -12,9 +13,11 @@ import com.codahale.metrics.Meter;
import com.codahale.metrics.Timer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import microservice.MicroserviceApp;
import microservice.defs.Constants;
import microservice.defs.Enums;
import microservice.io.iface.ILogger;
import microservice.services.CommonServices;
......@@ -36,19 +39,20 @@ public class MonitorHandler implements CommonServices.IMethodClass
public static final String LOG_LEVEL = "_logLevel";
public static final String FIELD_NAME = "name";
public static final String LEVEL = "Level";
List<BaseHandler> containers = null;
protected ObjectMapper objMapper = new ObjectMapper();
public static final String API_LIST = "_apiList";
protected ObjectMapper objMapper = new ObjectMapper();
private Reactor reactor = null;
public MonitorHandler() {
super();
containers = new LinkedList<BaseHandler>();
}
public void addHandler(BaseHandler handler)
{
containers.add(handler);
}
// @Override
......@@ -199,9 +203,35 @@ public class MonitorHandler implements CommonServices.IMethodClass
(msgCtx,orgService) -> {
setLogLevel((RestContext)msgCtx);
}));
methodParamsList.add(new CommonServices.MethodParams(Enums.EnumServiceType.E_REST,
CommonServices.EnumRestCommands.E_READ,
"/" + MON_PREFIX + "/" + API_LIST,
(msgCtx,orgService) -> {
printApiList((RestContext)msgCtx);
}));
}
/**
* what do YOU think it is!
* @param reqCtx
*/
private void printApiList(RestContext reqCtx) {
BaseRestResponse brr = new BaseRestResponse(true, null);
ArrayNode arrayNode = JsonNodeFactory.instance.arrayNode();
if (reactor != null){
final Map<String, List<String>> listMap = reactor.getMethodKeyList().stream()
.collect(Collectors.groupingBy(key -> key.split(Constants.TYPE_PREFIX_SEPERATOR)[2]));
listMap.entrySet().forEach(stringListEntry -> {
final List<String> methodList = stringListEntry.getValue().stream().map(api -> api.split(Constants.TYPE_PREFIX_SEPERATOR)[1]).collect(Collectors.toList());
arrayNode.add(JsonNodeFactory.instance.objectNode().put(stringListEntry.getKey(),methodList.toString()));
});
}
brr.objectNode = arrayNode;
reqCtx.container.writeObjectToResponse(reqCtx.response, brr);
}
private void setLogLevel(RestContext reqCtx) {
final JsonNode jsonNode = (JsonNode) reqCtx.container.readObjectFromRequest(reqCtx.request, JsonNode.class);
if (jsonNode != null){
......@@ -220,4 +250,7 @@ public class MonitorHandler implements CommonServices.IMethodClass
}
public void setReactor(Reactor reactor) {
this.reactor = reactor;
}
}
......@@ -184,4 +184,8 @@ public class Reactor implements CommonServices.IServiceReactor {
}
}
}
public List<String> getMethodKeyList() {
return methodKeyList;
}
}
......@@ -5,6 +5,9 @@ import com.codahale.metrics.Timer.Context;
import com.codahale.metrics.graphite.GraphiteReporter;
import com.codahale.metrics.graphite.PickledGraphite;
import metrics_influxdb.HttpInfluxdbProtocol;
import metrics_influxdb.InfluxdbReporter;
import metrics_influxdb.api.measurements.CategoriesMetricMeasurementTransformer;
import microservice.MicroserviceApp;
import microservice.io.iface.IMetricsFactory;
......@@ -138,6 +141,42 @@ public class IMetricsFactoryImpl implements IMetricsFactory
@Override
public void startReporting(String appName)
{
startInfluxDbReporting();
//startGraphiteReporting(appName);
}
private void startInfluxDbReporting() {
String influxdb_hostport = MicroserviceApp.getsInstance().getConfiguration().getString("influxdb.hostport", null);
Long interval = MicroserviceApp.getsInstance().getConfiguration().getLong("influx.report.intrerval",Long.valueOf(10));
String influxdb_user = MicroserviceApp.getsInstance().getConfiguration().getString("influxdb.user", "root");
String influxdb_pass = MicroserviceApp.getsInstance().getConfiguration().getString("influxdb.pass", "giptmgrr");
String influxdb_dbname = MicroserviceApp.getsInstance().getConfiguration().getString("influxdb.dbname", "mcx_db");
if (influxdb_hostport != null) {
int port = 8086;
String host = influxdb_hostport;
int index = influxdb_hostport.indexOf(':');
if (index != -1){
port = Integer.valueOf(influxdb_hostport.substring(index + 1));
host = influxdb_hostport.substring(0, index);
}
final ScheduledReporter reporter = InfluxdbReporter.forRegistry(metrics)
.protocol(new HttpInfluxdbProtocol("http", host , port, influxdb_user, influxdb_pass, influxdb_dbname))
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.filter(MetricFilter.ALL)
.skipIdleMetrics(true)
.tag("service", MicroserviceApp.getsInstance().getAppName())
.tag("instance", MicroserviceApp.getsInstance().getId())
.tag("server", MicroserviceApp.getsInstance().getServerName())
.transformer(new CategoriesMetricMeasurementTransformer("module", "artifact"))
.build();
reporter.start(interval, TimeUnit.SECONDS);
MicroserviceApp.getsInstance().getLogger().info("Reporting started...");
}
}
private void startGraphiteReporting(String appName) {
String graphite_hostport = MicroserviceApp.getsInstance().getConfiguration().getString("graphite_hostport", null);
Long interval = MicroserviceApp.getsInstance().getConfiguration().getLong("graphite_report_intrerval",Long.valueOf(10));
if (graphite_hostport != null) {
......
......@@ -80,6 +80,8 @@ public class TestMicroserviceApp {
public void testMicroServices()
{
System.setProperty("configFile.location","/opt/mcx/config/config.properties");
System.setProperty("influxdb.hostport","172.16.1.244:8086");
String appName = "testApp";
CommonServices.IService httpRestService = ServiceBuilderFactory.createRestServiceHttpBuilder(CommonServices.EnumRestServiceMode.E_CLIENT_SERVER)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment