From d7883a8d4c658e66ad6d6b3a535e558f8fe2e5e8 Mon Sep 17 00:00:00 2001 From: Mathis Neumann <mathis@simpletechs.net> Date: Thu, 14 Jul 2016 18:07:21 +0200 Subject: [PATCH] support node coloring if status property is set --- .../style.js | 6 ++ app/models/measurable.js | 3 +- app/models/serviceinstance.js | 1 + app/services/graphing-service.js | 63 ++++++++++++------- 4 files changed, 48 insertions(+), 25 deletions(-) diff --git a/app/components/architecture-visualisation-cytoscape/style.js b/app/components/architecture-visualisation-cytoscape/style.js index 8427a75..4598bd7 100644 --- a/app/components/architecture-visualisation-cytoscape/style.js +++ b/app/components/architecture-visualisation-cytoscape/style.js @@ -90,7 +90,13 @@ edge { font-weight: bold; target-arrow-shape: triangle-backcurve; curve-style: bezier; /* supports arrows */ +} +.warning { + background-color: yellow; +} +.fail { + background-color: red; } :selected { diff --git a/app/models/measurable.js b/app/models/measurable.js index a1ab382..d3dc7b9 100644 --- a/app/models/measurable.js +++ b/app/models/measurable.js @@ -3,7 +3,8 @@ import attr from 'ember-data/attr'; const Model = BaseEntity.extend({ timeSeries: attr(), - statusInformations: attr() + statusInformations: attr(), + status: attr('string') }); export default Model; diff --git a/app/models/serviceinstance.js b/app/models/serviceinstance.js index d0b2c9c..6039ee1 100644 --- a/app/models/serviceinstance.js +++ b/app/models/serviceinstance.js @@ -17,6 +17,7 @@ Model.reopenClass({ "revisionNumber":0, "systemId":"system123", "name":"Inventory", + "status": "warning", "nodeId":"test-system123-node-2", "serviceId":"test-system123-service-4" }, diff --git a/app/services/graphing-service.js b/app/services/graphing-service.js index 0f51d09..60335c3 100644 --- a/app/services/graphing-service.js +++ b/app/services/graphing-service.js @@ -4,53 +4,68 @@ import Ember from 'ember'; * parses a list of models and creates stores them */ export default Ember.Service.extend({ + store: Ember.inject.service(), createGraph(models) { this.debug('loaded models', models); - const serviceInstances = models.serviceInstances; - // const services = models.services; // not used in current view - const communicationInstances = models.communicationInstances; - const nodeGroups = models.nodeGroups; - const nodes = models.nodes; + + // prepare models by serializing them + const prepared = {}; + [ + 'serviceInstances', + 'communicationInstances', + 'nodeGroups', + 'nodes' + ].forEach((key) => { + const records = models[key]; + prepared[key] = records.map(record => record.serialize()); + }); + + // services not used in current view + const {serviceInstances, communicationInstances, nodeGroups, nodes} = prepared; var network = { nodes: [], edges: [] }; - nodeGroups.forEach(instance => { - const data = instance.serialize(); + nodeGroups.forEach(data => { data.label = data.name; - network.nodes.push({ - data: data - });}); + network.nodes.push({ + data: data + }); + }); - nodes.forEach(instance => { - const data = instance.serialize(); + nodes.forEach(data => { data.label = data.name; data.parent = data.nodeGroupId; - network.nodes.push({ - data: data - });}); + network.nodes.push({ + data: data, + classes: data.status || '' + }); + }); - serviceInstances.forEach(instance => { - const data = instance.serialize(); + serviceInstances.forEach(data => { data.label = data.name; data.parent = data.nodeId; - network.nodes.push({ - data: data - });}); + network.nodes.push({ + data: data, + classes: data.status || '' + }); + }); - communicationInstances.forEach(instance => { - const data = instance.serialize(); + communicationInstances.forEach(data => { data.source = data.sourceId; data.target = data.targetId; - data.technology = instance.store.peekRecord('communication', data.communicationId).get('technology'); + data.technology = this.get('store').peekRecord('communication', data.communicationId).get('technology'); data.label = data.technology; - network.edges.push({ data }); + network.edges.push({ + data, + classes: data.status || '' + }); }); return network; -- GitLab