Skip to content
Snippets Groups Projects
Commit 87987a4f authored by Matthias's avatar Matthias
Browse files

implemented list metrics

parent 769ba23f
No related branches found
No related tags found
No related merge requests found
......@@ -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();
......
......@@ -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);
}
}
}
......@@ -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);
}
}
}
}
......@@ -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);
}
}
}
}
}
}
}
......
......@@ -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();
}
......
......@@ -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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment