def initialise(self, description, clock): self.reputationSystem = ReputationSystem(description, clock) # self.reputationSystem.addSink(CSVSink()) # self.reputationSystem.addSink(VirtuosoSink(self.messageBusQueue)) # self.reputationSystem.addSink(TerminalSink()) self.reputationSystem.addSink(BlackHoleSink()) self.reputationSystem.addQoIMetric(Frequency()) self.reputationSystem.addQoIMetric(Completeness()) self.reputationSystem.addQoIMetric(Age()) self.reputationSystem.addQoIMetric(Latency()) self.reputationSystem.addQoIMetric(Correctness()) self.initialised = True L.d2("CpQoiSystem initialised")
class CpQoiSystem(object): def __init__(self): self.initialised = False self.reputationSystem = None self.messageBusQueue = None L.d2("CpQoiSystem started") def getObservationIds(self, data): return [data[field].observationID for field in data.fields] def addData(self, description, data, clock): if not self.initialised: self.initialise(description, clock) self.reputationSystem.setClock(clock) self.reputationSystem.setDescription(description) # send data to reputationsystem qoiInformation = self.reputationSystem.update(data) # persist calculated qoi # get list of observationIds for virtuoso sink self.reputationSystem.persist(self.getObservationIds(data)) return qoiInformation # initialise reputationsystem with values from sensor description, add qoi metrics and sinks def initialise(self, description, clock): self.reputationSystem = ReputationSystem(description, clock) # self.reputationSystem.addSink(CSVSink()) # self.reputationSystem.addSink(VirtuosoSink(self.messageBusQueue)) # self.reputationSystem.addSink(TerminalSink()) self.reputationSystem.addSink(BlackHoleSink()) self.reputationSystem.addQoIMetric(Frequency()) self.reputationSystem.addQoIMetric(Completeness()) self.reputationSystem.addQoIMetric(Age()) self.reputationSystem.addQoIMetric(Latency()) self.reputationSystem.addQoIMetric(Correctness()) self.initialised = True L.d2("CpQoiSystem initialised") def setMessageBusQueue(self, messageBusQueue): self.messageBusQueue = messageBusQueue def getLastQoI(self, types=None, avg=None, minimum=None, maximum=None): qoiData = JSONObject() for metric in self.reputationSystem.metrics: q = JSONObject() currentValues = JSONObject() currentValues.absoluteValue = metric.absoluteValue currentValues.ratedValue = metric.ratedValue q.unit = metric.unit qoiData[metric.name] = q q.CURRENT = currentValues if types: self.reputationSystem.avgQoIManager.getValues(q, metric.name, types, avg, minimum, maximum) return qoiData