From 246671228c1d183feeee46ce07c81ef93e605658 Mon Sep 17 00:00:00 2001 From: Ajendra Joshi Date: Fri, 10 May 2019 12:02:59 +0530 Subject: [PATCH 1/3] Added turbine server --- turbine-server/README.md | 35 ++++++ .../com.tibco.bw.turbine.server/.classpath | 26 +++++ .../com.tibco.bw.turbine.server/.gitignore | 1 + .../com.tibco.bw.turbine.server/.project | 23 ++++ .../org.eclipse.core.resources.prefs | 3 + .../.settings/org.eclipse.jdt.core.prefs | 5 + .../.settings/org.eclipse.m2e.core.prefs | 4 + .../com.tibco.bw.turbine.server/pom.xml | 104 ++++++++++++++++++ .../server/DiscoveryFeedbackServlet.java | 34 ++++++ .../bw/turbine/server/OpenShiftDiscovery.java | 70 ++++++++++++ .../bw/turbine/server/TurbineInitializer.java | 28 +++++ .../webapp/WEB-INF/classes/config.properties | 10 ++ .../src/main/webapp/WEB-INF/web.xml | 33 ++++++ 13 files changed, 376 insertions(+) create mode 100644 turbine-server/README.md create mode 100644 turbine-server/com.tibco.bw.turbine.server/.classpath create mode 100644 turbine-server/com.tibco.bw.turbine.server/.gitignore create mode 100644 turbine-server/com.tibco.bw.turbine.server/.project create mode 100644 turbine-server/com.tibco.bw.turbine.server/.settings/org.eclipse.core.resources.prefs create mode 100644 turbine-server/com.tibco.bw.turbine.server/.settings/org.eclipse.jdt.core.prefs create mode 100644 turbine-server/com.tibco.bw.turbine.server/.settings/org.eclipse.m2e.core.prefs create mode 100644 turbine-server/com.tibco.bw.turbine.server/pom.xml create mode 100644 turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/DiscoveryFeedbackServlet.java create mode 100644 turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/OpenShiftDiscovery.java create mode 100644 turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/TurbineInitializer.java create mode 100644 turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/classes/config.properties create mode 100644 turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/web.xml diff --git a/turbine-server/README.md b/turbine-server/README.md new file mode 100644 index 0000000..697d457 --- /dev/null +++ b/turbine-server/README.md @@ -0,0 +1,35 @@ +# turbine-server +___ + +## Turbine server for TIBCO BWCE +### Environment Variables - + +PLATFORM = Openshit/Kubernetes (Default - Kubernetes) + +NAMESPACE = k8s namespace to monitor (Default - Current Namespace) + +### Label Selector + +To include a particular application, add the following label to pods. + +hystrix.enabled=true + +### Build docker image + +From the project path, execute - + +mvn clean package docker:build + +### Monitoring applications in projects/namespaces other than current + +Permissions need to be provided to view services from other projects/namespaces. + +##### Kubernetes (Tested on minikube) +Add clusterrolebinding + +kubectl create clusterrolebinding [hystrix-namespace] --clusterrole cluster-admin --serviceaccount=[hystrix-namespace]:[user] + +##### Openshift +oc project [project to monitor] + +oc policy add-role-to-user view system:serviceaccount:[hystrix-namespace]:[user] diff --git a/turbine-server/com.tibco.bw.turbine.server/.classpath b/turbine-server/com.tibco.bw.turbine.server/.classpath new file mode 100644 index 0000000..af1430b --- /dev/null +++ b/turbine-server/com.tibco.bw.turbine.server/.classpath @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/turbine-server/com.tibco.bw.turbine.server/.gitignore b/turbine-server/com.tibco.bw.turbine.server/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/turbine-server/com.tibco.bw.turbine.server/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/turbine-server/com.tibco.bw.turbine.server/.project b/turbine-server/com.tibco.bw.turbine.server/.project new file mode 100644 index 0000000..e7a2fd9 --- /dev/null +++ b/turbine-server/com.tibco.bw.turbine.server/.project @@ -0,0 +1,23 @@ + + + com.tibco.bw.turbine.server + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/turbine-server/com.tibco.bw.turbine.server/.settings/org.eclipse.core.resources.prefs b/turbine-server/com.tibco.bw.turbine.server/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..e9441bb --- /dev/null +++ b/turbine-server/com.tibco.bw.turbine.server/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/turbine-server/com.tibco.bw.turbine.server/.settings/org.eclipse.jdt.core.prefs b/turbine-server/com.tibco.bw.turbine.server/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..714351a --- /dev/null +++ b/turbine-server/com.tibco.bw.turbine.server/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/turbine-server/com.tibco.bw.turbine.server/.settings/org.eclipse.m2e.core.prefs b/turbine-server/com.tibco.bw.turbine.server/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/turbine-server/com.tibco.bw.turbine.server/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/turbine-server/com.tibco.bw.turbine.server/pom.xml b/turbine-server/com.tibco.bw.turbine.server/pom.xml new file mode 100644 index 0000000..988c6b4 --- /dev/null +++ b/turbine-server/com.tibco.bw.turbine.server/pom.xml @@ -0,0 +1,104 @@ + + + + + 4.0.0 + + com.tibco + turbine-server + 2.0.0-SNAPSHOT + war + Netflix Turbine + + + 1.8 + 1.8 + UTF-8 + tibco + + + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + com.netflix.turbine + turbine-core + 1.0.0 + + + io.fabric8 + openshift-client + 4.0.3 + + + io.fabric8 + kubernetes-client + 4.0.3 + + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.6 + + false + + + + io.fabric8 + docker-maven-plugin + 0.26.1 + + http://localhost:2375 + + + ${docker.group.name}/${project.artifactId}:${project.version} + + tomcat:8.0.30-jre8 + + latest + ${project.version} + + + 8080 + + + rm -rf /usr/local/tomcat/webapps/ROOT + rm -rf /usr/local/tomcat/webapps/docs + rm -rf /usr/local/tomcat/webapps/examples + rm -rf /usr/local/tomcat/webapps/host-manager + rm -rf /usr/local/tomcat/webapps/manager + + + /usr/local + + + + ${project.build.directory}/${project.artifactId}-${project.version}.war + tomcat/webapps/ + ROOT.war + + + + + + + + http.port:8080 + + + + + + + + + diff --git a/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/DiscoveryFeedbackServlet.java b/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/DiscoveryFeedbackServlet.java new file mode 100644 index 0000000..0851251 --- /dev/null +++ b/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/DiscoveryFeedbackServlet.java @@ -0,0 +1,34 @@ +/*Copyright © 2018. TIBCO Software Inc. All Rights Reserved.*/ +package com.tibco.bw.turbine.server; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.netflix.turbine.discovery.Instance; + +public class DiscoveryFeedbackServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + private static final OpenShiftDiscovery DISCOVERY = OpenShiftDiscovery.getOpenShiftDiscovery(); + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + resp.setContentType("text/html"); + PrintWriter out = resp.getWriter(); + out.println("

Hystrix Endpoints: "+OpenShiftDiscovery.getNamespace() +"

"); + try { + for (Instance instance : DISCOVERY.getInstanceList()) { + out.println("

" + instance.getHostname() + " : " + (instance.isUp()?"Running":"Unreachable") + "

"); + } + } catch (Throwable t) { + t.printStackTrace(out); + } + out.flush(); + } + +} diff --git a/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/OpenShiftDiscovery.java b/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/OpenShiftDiscovery.java new file mode 100644 index 0000000..0e04026 --- /dev/null +++ b/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/OpenShiftDiscovery.java @@ -0,0 +1,70 @@ +/*Copyright © 2018. TIBCO Software Inc. All Rights Reserved.*/ +package com.tibco.bw.turbine.server; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +import com.netflix.turbine.discovery.Instance; +import com.netflix.turbine.discovery.InstanceDiscovery; + +import io.fabric8.kubernetes.api.model.Pod; +import io.fabric8.kubernetes.api.model.PodList; +import io.fabric8.kubernetes.client.DefaultKubernetesClient; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.openshift.client.DefaultOpenShiftClient; + +public class OpenShiftDiscovery implements InstanceDiscovery { + + private static final Logger logger = Logger.getLogger(OpenShiftDiscovery.class.getName()); + private static String platform= System.getenv("PLATFORM"); + private static String namespace= System.getenv("NAMESPACE"); + private static final String HYSTRIX_ENABLED = "hystrix.enabled"; + private static final String TRUE = "true"; + private static final String DEFAULT = "default"; + private static final String OPENSHIFT = "Openshift"; + private static final String KUBERNETES = "Kubernetes"; + private static OpenShiftDiscovery openshiftDiscovery; + private boolean isOpenshift; + private KubernetesClient client; + + public OpenShiftDiscovery() { + + isOpenshift=(platform!=null && platform.equalsIgnoreCase(OPENSHIFT)); + logger.log(Level.INFO,"Configuring for "+ (isOpenshift?OPENSHIFT:KUBERNETES)); + try{ + client=(isOpenshift)?new DefaultOpenShiftClient():new DefaultKubernetesClient(); + }catch (Exception e){ + logger.log(Level.SEVERE,"Cannot connect to master server.",e); + } + if(namespace==null) + namespace=client.getNamespace(); + logger.log(Level.INFO,"Using Namespace " + namespace); + openshiftDiscovery=this; + } + + public Collection getInstanceList() throws Exception { + List result = new ArrayList(); + try{ + PodList podList=client.pods().inNamespace(namespace).withLabel(HYSTRIX_ENABLED, TRUE).list(); + for(Pod pod : podList.getItems()){ + String podip=pod.getStatus().getPodIP(); + Instance instance = new Instance(podip, DEFAULT, true); + result.add(instance); + } + }catch(Exception e){ + logger.log(Level.SEVERE,"Cannot fetch endpoints.",e); + } + return result; + } + + public static String getNamespace(){ + return namespace; + } + + public static OpenShiftDiscovery getOpenShiftDiscovery(){ + return openshiftDiscovery; + } +} diff --git a/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/TurbineInitializer.java b/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/TurbineInitializer.java new file mode 100644 index 0000000..1ff6d40 --- /dev/null +++ b/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/TurbineInitializer.java @@ -0,0 +1,28 @@ +/*Copyright © 2018. TIBCO Software Inc. All Rights Reserved.*/ +package com.tibco.bw.turbine.server; + +import java.util.logging.Logger; + +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; + +import com.netflix.turbine.plugins.PluginsFactory; +import com.netflix.turbine.init.TurbineInit; + +public class TurbineInitializer implements ServletContextListener { + + private static final Logger logger = Logger.getLogger(TurbineInitializer.class.getName()); + + @Override + public void contextInitialized(ServletContextEvent sce) { + logger.info("Starting Turbine server"); + PluginsFactory.setInstanceDiscovery(new OpenShiftDiscovery()); + TurbineInit.init(); + } + + @Override + public void contextDestroyed(ServletContextEvent sce) { + logger.info("Stopping Turbine server"); + TurbineInit.stop(); + } +} diff --git a/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/classes/config.properties b/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/classes/config.properties new file mode 100644 index 0000000..f303b1f --- /dev/null +++ b/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/classes/config.properties @@ -0,0 +1,10 @@ +#Copyright © 2018. TIBCO Software Inc. All Rights Reserved.# + +################################# +# Turbine +################################# +# turbine clusters +turbine.aggregator.clusterConfig=default +# turbine url suffix to where the hystrix stream can be retrieved from each cluster instance +turbine.instanceUrlSuffix=:8090/hystrix.stream +################################# diff --git a/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/web.xml b/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..6947d32 --- /dev/null +++ b/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,33 @@ + + + + + + com.tibco.bw.turbine.server.TurbineInitializer + + + + + TurbineStreamServlet + TurbineStreamServlet + com.netflix.turbine.streaming.servlet.TurbineStreamServlet + + + + Discovery Feedback Servlet + DiscoveryFeedbackServlet + DiscoveryFeedbackServlet + com.tibco.bw.turbine.server.DiscoveryFeedbackServlet + + + + TurbineStreamServlet + /turbine.stream + + + + DiscoveryFeedbackServlet + /discovery + + + \ No newline at end of file From 50ef29689522a2eef019e5d64c4ca9c6d9756d82 Mon Sep 17 00:00:00 2001 From: Ajendra Joshi Date: Fri, 10 May 2019 12:23:53 +0530 Subject: [PATCH 2/3] updated copyright --- turbine-server/com.tibco.bw.turbine.server/pom.xml | 2 +- .../com/tibco/bw/turbine/server/DiscoveryFeedbackServlet.java | 2 +- .../java/com/tibco/bw/turbine/server/OpenShiftDiscovery.java | 2 +- .../java/com/tibco/bw/turbine/server/TurbineInitializer.java | 2 +- .../src/main/webapp/WEB-INF/classes/config.properties | 2 +- .../com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/web.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/turbine-server/com.tibco.bw.turbine.server/pom.xml b/turbine-server/com.tibco.bw.turbine.server/pom.xml index 988c6b4..6fae6a9 100644 --- a/turbine-server/com.tibco.bw.turbine.server/pom.xml +++ b/turbine-server/com.tibco.bw.turbine.server/pom.xml @@ -1,5 +1,5 @@ - + diff --git a/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/DiscoveryFeedbackServlet.java b/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/DiscoveryFeedbackServlet.java index 0851251..b3476f6 100644 --- a/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/DiscoveryFeedbackServlet.java +++ b/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/DiscoveryFeedbackServlet.java @@ -1,4 +1,4 @@ -/*Copyright © 2018. TIBCO Software Inc. All Rights Reserved.*/ +/*Copyright © 2019. TIBCO Software Inc. All Rights Reserved.*/ package com.tibco.bw.turbine.server; import java.io.IOException; diff --git a/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/OpenShiftDiscovery.java b/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/OpenShiftDiscovery.java index 0e04026..1f43e16 100644 --- a/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/OpenShiftDiscovery.java +++ b/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/OpenShiftDiscovery.java @@ -1,4 +1,4 @@ -/*Copyright © 2018. TIBCO Software Inc. All Rights Reserved.*/ +/*Copyright © 2019. TIBCO Software Inc. All Rights Reserved.*/ package com.tibco.bw.turbine.server; import java.util.ArrayList; diff --git a/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/TurbineInitializer.java b/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/TurbineInitializer.java index 1ff6d40..d8fcd9d 100644 --- a/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/TurbineInitializer.java +++ b/turbine-server/com.tibco.bw.turbine.server/src/main/java/com/tibco/bw/turbine/server/TurbineInitializer.java @@ -1,4 +1,4 @@ -/*Copyright © 2018. TIBCO Software Inc. All Rights Reserved.*/ +/*Copyright © 2019. TIBCO Software Inc. All Rights Reserved.*/ package com.tibco.bw.turbine.server; import java.util.logging.Logger; diff --git a/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/classes/config.properties b/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/classes/config.properties index f303b1f..2533e9b 100644 --- a/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/classes/config.properties +++ b/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/classes/config.properties @@ -1,4 +1,4 @@ -#Copyright © 2018. TIBCO Software Inc. All Rights Reserved.# +#Copyright © 2019. TIBCO Software Inc. All Rights Reserved.# ################################# # Turbine diff --git a/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/web.xml b/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/web.xml index 6947d32..2dfdc35 100644 --- a/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/web.xml +++ b/turbine-server/com.tibco.bw.turbine.server/src/main/webapp/WEB-INF/web.xml @@ -1,5 +1,5 @@ - + From 8dc0001e9f58da04be4cad2367ef2dbc4321ca37 Mon Sep 17 00:00:00 2001 From: jajendra Date: Sun, 30 Aug 2020 20:12:27 +0530 Subject: [PATCH 3/3] Added host to InetSocker address Prometheus collector does not work when service mesh is enabled in K8S since httpserver binds to default hostname. Adding "0.0.0.0" to InetSockerAddress resolves the issue. --- .../com/tibco/bw/prometheus/monitor/PrometheusCollector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-integration/com.tibco.bw.prometheus.monitor/src/com/tibco/bw/prometheus/monitor/PrometheusCollector.java b/prometheus-integration/com.tibco.bw.prometheus.monitor/src/com/tibco/bw/prometheus/monitor/PrometheusCollector.java index 07bc565..37adfe4 100644 --- a/prometheus-integration/com.tibco.bw.prometheus.monitor/src/com/tibco/bw/prometheus/monitor/PrometheusCollector.java +++ b/prometheus-integration/com.tibco.bw.prometheus.monitor/src/com/tibco/bw/prometheus/monitor/PrometheusCollector.java @@ -31,7 +31,7 @@ public class PrometheusCollector extends Collector { private static Logger logger = LoggerFactory.getLogger(PrometheusCollector.class); public static HTTPServer server; - private final static InetSocketAddress DEFAULT_PROMETHEUS_MONITOR_PORT = new InetSocketAddress(9095); + private final static InetSocketAddress DEFAULT_PROMETHEUS_MONITOR_PORT = new InetSocketAddress("0.0.0.0",9095); private static final QName HTTPCONNECTOR_TYPE = new QName("http://xsd.tns.tibco.com/bw/models/sharedresource/httpconnector","HttpConnectorConfiguration"); private final static CountDownLatch proxyInitLatch = new CountDownLatch(1);