diff --git a/tools.descartes.dql.connector.kieker.tests/src/tools/descartes/dql/connector/kieker/tests/CpuUtilizationTest.java b/tools.descartes.dql.connector.kieker.tests/src/tools/descartes/dql/connector/kieker/tests/CpuUtilizationTest.java index 3a5d9e085ced0242f91106b4a9d923e92e8fe68c..22e1403fc3031f1368156f3ac99e4908eba91ff2 100644 --- a/tools.descartes.dql.connector.kieker.tests/src/tools/descartes/dql/connector/kieker/tests/CpuUtilizationTest.java +++ b/tools.descartes.dql.connector.kieker.tests/src/tools/descartes/dql/connector/kieker/tests/CpuUtilizationTest.java @@ -29,7 +29,7 @@ public class CpuUtilizationTest { EntityMapping request = mappingFactory.createEntityMapping(); request.setModelLocation(modelLocation); Entity res1 = DomainFactory.eINSTANCE.createEntity(); - res1.setEntityType("RESSOURCE"); + res1.setEntityType("RESOURCE"); Probe p = DomainFactory.eINSTANCE.createProbe(); p.setMetricName("utilization"); StatType st = DomainFactory.eINSTANCE.createStatType(); diff --git a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/KiekerHelper.java b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/KiekerHelper.java index e7d92108181549a329658c0d9f9d0f54350dd45e..89de58d93437968ae73a3992862da8faa96baf3b 100644 --- a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/KiekerHelper.java +++ b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/KiekerHelper.java @@ -21,7 +21,9 @@ import org.eclipse.emf.common.util.EList; import kieker.common.configuration.Configuration; import tools.descartes.dql.connector.kieker.structures.Component; +import tools.descartes.dql.connector.kieker.structures.Resource; import tools.descartes.dql.connector.kieker.structures.Trace; +import tools.descartes.dql.connector.kieker.structures.identifier.ResourceIdentifier; import tools.descartes.dql.connector.kieker.structures.records.EventRecord; import tools.descartes.dql.connector.kieker.structures.records.ResourceRecord; import tools.descartes.dql.core.engine.util.DQLLogger; @@ -379,124 +381,4 @@ public class KiekerHelper { } } - - - - - - - /* Modifies response to include the results of Kieker */ - public static void processPerformanceResults(EntityMapping response, Trace kiekerResults, long firstTs) { - - - List<ResourceRecord> resources = kiekerResults.getResources(); - Map<Component, Trace> services = kiekerResults.getComponentToTraceMap(); - - - - - // browse through each entity and its probes - // and try to replace the probe with a result - for (Entity ent : response.getEntities()) { - for (Probe dqlProbe : ent.getProbes()) { - for (StatType st : dqlProbe.getStatTypes()) { - if (KiekerHelper.METRIC_UTILIZATION.equalsIgnoreCase(dqlProbe.getMetricName())) { - if (st.getTypeName().equals("DEFAULT") || st.getTypeName().equals("SAMPLE")){ - ContinuousSeriesResult result = DomainFactory.eINSTANCE.createContinuousSeriesResult(); - result.setXAxisDescription("ms"); - result.setYAxisDescription("% (between 0 and 1)"); - if (resources != null && resources.size() > 0) { - try { - for (ResourceRecord record : resources) { - if (record.getIdentifier().getRessourceName().equals(ent.getIdentifier())){ - //System.out.println("ADDING for "+ent.getIdentifier()+": Time" +record.getTimestamp()+" / Util: "+record.getContent().get(2)); - result.getElements().add(KiekerHelper.getSeriesResultElement(record.getTimestamp(), record.getContent().get(2), firstTs)); - } - } - result.setValid(true); - } catch (NumberFormatException exc) { - result.setValid(false); - } - st.setResult(result); - } - - } else { - // do nothing - } - } else if (KiekerHelper.METRIC_RESPONSE_TIME.equalsIgnoreCase(dqlProbe.getMetricName())) { - if (st.getTypeName().equals("DEFAULT") || st.getTypeName().equals("SAMPLE")){ - ContinuousSeriesResult res = DomainFactory.eINSTANCE.createContinuousSeriesResult(); - res.setXAxisDescription("ms"); - res.setYAxisDescription("ms"); - if (services != null) { - try { - Component comp = new Component(KiekerHelper.getComponentString(ent.getIdentifier())); - Trace tr = services.get(comp); - if (tr != null && tr.getEvents().size()>0){ - for (EventRecord er : tr.getEvents()) { - String dqlId = ent.getIdentifier(); - - String kiekerId = er.getIdentifier().getComponentID(); - if (er.getIdentifier().isInterfaceIdentifier()){ - kiekerId += "." + er.getIdentifier().getInterfaceID(); - } - if (dqlId.equals(kiekerId)) { - res.getElements().add(KiekerHelper.getSeriesResultElement(er.getTimestamp(), er.getRuntime(), firstTs)); - } - - } - res.setValid(true); - } - - } catch (NumberFormatException exc) { - res.setValid(false); - } - st.setResult(res); - } - } - - } - - } - } - } - - } - - - - - - public static void processModelStructureResults(EntityMapping response, Trace kiekerResults) { - List<ResourceRecord> resources = kiekerResults.getResources(); - List<EventRecord> events = kiekerResults.getEvents(); - - final Map<String, String> resourceIdentifiers = new HashMap<>(); - final Map<String, String> serviceIdentifiers = new HashMap<>(); - - final EList<Entity> entities = response.getEntities(); - for (ResourceRecord record: resources ) { - resourceIdentifiers.put(record.getIdentifier().getRessourceName(), ""); - } - for (EventRecord record: events ) { - if (record.getIdentifier().getInterfaceID() != null && !record.getIdentifier().getInterfaceID().equals("")){ - serviceIdentifiers.put(record.getIdentifier().getComponentID()+"."+record.getIdentifier().getInterfaceID(), ""); - } else { - serviceIdentifiers.put(record.getIdentifier().getComponentID(), ""); - } - } - - for (String identifier: resourceIdentifiers.keySet() ) { - Entity entity = DomainFactory.eINSTANCE.createEntity(); - entity.setEntityType("RESOURCE"); - entity.setIdentifier(identifier); - entities.add(entity); - } - for (String identifier: serviceIdentifiers.keySet() ) { - Entity entity = DomainFactory.eINSTANCE.createEntity(); - entity.setEntityType("SERVICE"); - entity.setIdentifier(identifier); - entities.add(entity); - } - } } diff --git a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/ModelStructureQueryConnectorImpl.java b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/ModelStructureQueryConnectorImpl.java index 3c8023280feee60fc4d7281827c631d6a53967d1..2f284611adfce54d365dae7cf23370323613b4bd 100644 --- a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/ModelStructureQueryConnectorImpl.java +++ b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/ModelStructureQueryConnectorImpl.java @@ -20,6 +20,7 @@ import tools.descartes.dql.core.engine.util.DQLLogger; import tools.descartes.dql.models.mapping.domain.DomainFactory; import tools.descartes.dql.models.mapping.domain.Entity; import tools.descartes.dql.models.mapping.domain.Probe; +import tools.descartes.dql.models.mapping.domain.StatType; import tools.descartes.dql.models.mapping.domain.impl.DomainFactoryImpl; import tools.descartes.dql.models.mapping.mapping.EntityMapping; @@ -76,18 +77,18 @@ public class ModelStructureQueryConnectorImpl extends AbstractOSGiQueryConnector KiekerManager manager = new KiekerManager(request); manager.run(); final Trace queryResults = manager.getAnalysisResult(); - KiekerHelper.processModelStructureResults(response,queryResults); + processListEntitiesResults(response,queryResults); return response; } @Override public EntityMapping requestProbes(final EntityMapping request) { - // Load and validate Model - + final EntityMapping response = EcoreUtil.copy(request); - // processProbesForServices(response.getServices()); - // processProbesForResources(response.getResources()); + + processListMetricsResults(response); + return response; } @@ -113,5 +114,68 @@ public class ModelStructureQueryConnectorImpl extends AbstractOSGiQueryConnector } + private void processListEntitiesResults(EntityMapping response, Trace kiekerResults) { + List<ResourceRecord> resources = kiekerResults.getResources(); + List<EventRecord> events = kiekerResults.getEvents(); + + final Map<String, String> resourceIdentifiers = new HashMap<>(); + final Map<String, String> serviceIdentifiers = new HashMap<>(); + + final EList<Entity> entities = response.getEntities(); + for (ResourceRecord record: resources ) { + resourceIdentifiers.put(record.getIdentifier().getRessourceName(), ""); + } + for (EventRecord record: events ) { + if (record.getIdentifier().getInterfaceID() != null && !record.getIdentifier().getInterfaceID().equals("")){ + serviceIdentifiers.put(record.getIdentifier().getComponentID()+"."+record.getIdentifier().getInterfaceID(), ""); + } else { + serviceIdentifiers.put(record.getIdentifier().getComponentID(), ""); + } + } + + for (String identifier: resourceIdentifiers.keySet() ) { + Entity entity = DomainFactory.eINSTANCE.createEntity(); + entity.setEntityType("RESOURCE"); + entity.setIdentifier(identifier); + entities.add(entity); + } + for (String identifier: serviceIdentifiers.keySet() ) { + Entity entity = DomainFactory.eINSTANCE.createEntity(); + entity.setEntityType("SERVICE"); + entity.setIdentifier(identifier); + entities.add(entity); + } + } + + private void processListMetricsResults(EntityMapping response) { + + for (Entity ent : response.getEntities()) { + if (ent.getEntityType().equals("RESOURCE")){ + Probe probe = DomainFactory.eINSTANCE.createProbe(); + probe.setMetricName(KiekerHelper.METRIC_UTILIZATION); + StatType def = DomainFactory.eINSTANCE.createStatType(); + def.setTypeName("DEFAULT"); + StatType samp = DomainFactory.eINSTANCE.createStatType(); + samp.setTypeName("SAMPLE"); + probe.getStatTypes().add(def); + probe.getStatTypes().add(samp); + ent.getProbes().add(probe); + } else if (ent.getEntityType().equals("SERVICE")){ + Probe probe = DomainFactory.eINSTANCE.createProbe(); + probe.setMetricName(KiekerHelper.METRIC_RESPONSE_TIME); + StatType def = DomainFactory.eINSTANCE.createStatType(); + def.setTypeName("DEFAULT"); + StatType samp = DomainFactory.eINSTANCE.createStatType(); + samp.setTypeName("SAMPLE"); + probe.getStatTypes().add(def); + probe.getStatTypes().add(samp); + ent.getProbes().add(probe); + } + + } + + } + + } diff --git a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/PerformanceMetricsQueryConnectorImpl.java b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/PerformanceMetricsQueryConnectorImpl.java index 47466fc44a496e0e33bc85e5f837524eba4cabcb..3696abb501ac094cba2d8541720ab8074e0f2533 100644 --- a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/PerformanceMetricsQueryConnectorImpl.java +++ b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/PerformanceMetricsQueryConnectorImpl.java @@ -23,7 +23,9 @@ import tools.descartes.dql.connector.QueryProgressListener; import tools.descartes.dql.connector.kieker.configgenerator.XMLGenerationManager; import tools.descartes.dql.connector.kieker.filter.KiekerAnalysisController; import tools.descartes.dql.connector.kieker.structures.Component; +import tools.descartes.dql.connector.kieker.structures.Resource; import tools.descartes.dql.connector.kieker.structures.Trace; +import tools.descartes.dql.connector.kieker.structures.identifier.ResourceIdentifier; import tools.descartes.dql.connector.kieker.structures.records.EventRecord; import tools.descartes.dql.connector.kieker.structures.records.ResourceRecord; import tools.descartes.dql.models.mapping.domain.ContinuousSeriesResult; @@ -55,12 +57,86 @@ public class PerformanceMetricsQueryConnectorImpl extends // Process the trace back to a DQL result // Kieker ergebnisse filtern - KiekerHelper.processPerformanceResults(response, result, firstTs); + processPerformanceResults(response, result, firstTs); return response; } + /* Modifies response to include the results of Kieker */ + private void processPerformanceResults(EntityMapping response, Trace kiekerResults, long firstTs) { + + Map<Resource, Trace> resources = kiekerResults.getResourceToTraceMap(); + Map<ResourceIdentifier, Resource> resourceIds = kiekerResults.getResourceIdentifierToResourceMap(); + Map<Component, Trace> services = kiekerResults.getComponentToTraceMap(); + + // browse through each entity and its probes + // and try to replace the probe with a result + for (Entity ent : response.getEntities()) { + for (Probe dqlProbe : ent.getProbes()) { + for (StatType st : dqlProbe.getStatTypes()) { + if (KiekerHelper.METRIC_UTILIZATION.equalsIgnoreCase(dqlProbe.getMetricName())) { + if (st.getTypeName().equals("DEFAULT") || st.getTypeName().equals("SAMPLE")){ + ContinuousSeriesResult result = DomainFactory.eINSTANCE.createContinuousSeriesResult(); + result.setXAxisDescription("ms"); + result.setYAxisDescription("% (between 0 and 1)"); + ResourceIdentifier dqlId = ResourceIdentifier.createResourceIdentifier("", ent.getIdentifier()); + Resource res = resourceIds.get(dqlId); + if (res != null && resources.get(res)!= null && resources.get(res).getResources().size()> 0) { + + try { + for (ResourceRecord record : resources.get(res).getResources()) { + //System.out.println("ADDING for "+ent.getIdentifier()+": Time" +record.getTimestamp()+" / Util: "+record.getContent().get(2)); + result.getElements().add(KiekerHelper.getSeriesResultElement(record.getTimestamp(), record.getContent().get(2), firstTs)); + } + result.setValid(true); + } catch (NumberFormatException exc) { + result.setValid(false); + } + st.setResult(result); + } + + } else { + // do nothing + } + } else if (KiekerHelper.METRIC_RESPONSE_TIME.equalsIgnoreCase(dqlProbe.getMetricName())) { + if (st.getTypeName().equals("DEFAULT") || st.getTypeName().equals("SAMPLE")){ + ContinuousSeriesResult res = DomainFactory.eINSTANCE.createContinuousSeriesResult(); + res.setXAxisDescription("ms"); + res.setYAxisDescription("ms"); + if (services != null) { + try { + Component comp = new Component(KiekerHelper.getComponentString(ent.getIdentifier())); + Trace tr = services.get(comp); + if (tr != null && tr.getEvents().size()>0){ + for (EventRecord er : tr.getEvents()) { + String dqlId = ent.getIdentifier(); + + String kiekerId = er.getIdentifier().getComponentID(); + if (er.getIdentifier().isInterfaceIdentifier()){ + kiekerId += "." + er.getIdentifier().getInterfaceID(); + } + if (dqlId.equals(kiekerId)) { + res.getElements().add(KiekerHelper.getSeriesResultElement(er.getTimestamp(), er.getRuntime(), firstTs)); + } + + } + res.setValid(true); + } + + } catch (NumberFormatException exc) { + res.setValid(false); + } + st.setResult(res); + } + } + + } + + } + } + } + } diff --git a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/KiekerAnalysisController.java b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/KiekerAnalysisController.java index c7ad12b3abc6f8be056db1d872f854458048ff7c..944862c9f025557576ae37b1987956e727e32ea6 100644 --- a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/KiekerAnalysisController.java +++ b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/KiekerAnalysisController.java @@ -76,7 +76,6 @@ public class KiekerAnalysisController { KiekerTraceLoader loader = new KiekerTraceLoader(t); t =loader.loadKiekerTraceFromDirectories(traceDirectories.toArray(new String[traceDirectories.size()])); this.trace = t.initializeMaps(ignoreHost); - loader.clearMaps(); } diff --git a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/KiekerTraceLoader.java b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/KiekerTraceLoader.java index 14f56ef995b5c04a9faa4006b66c66aa9ad4083c..06f4e68153b6b40d33cccab5e9144d97605cd7e6 100644 --- a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/KiekerTraceLoader.java +++ b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/KiekerTraceLoader.java @@ -28,12 +28,13 @@ public class KiekerTraceLoader { } public Trace loadKiekerTraceFromDirectories(String[] kiekerInputDirs) { + clearMaps(); KiekerReader kiekerReader = new KiekerReader(kiekerInputDirs); kiekerReader.read(); return fetchInformationFromMaps(); } - public void clearMaps(){ + private void clearMaps(){ ClassMap.getInstance().clear(); InterfaceMap.getInstance().clear(); ResourceMap.getInstance().clear();