diff options
author | Koren Lev <korenlev@gmail.com> | 2017-07-27 16:42:15 +0300 |
---|---|---|
committer | Koren Lev <korenlev@gmail.com> | 2017-07-27 16:42:15 +0300 |
commit | b88c78e3cf2bef22aa2f1c4d0bf305e303bc15f0 (patch) | |
tree | ffa30a6e1511d72562d8772b8700cda52b2752a1 /ui/imports/api/statistics | |
parent | b70483739d1f6f4f0d31987ed2e4d1e30d71d579 (diff) |
adding calipso ui
Change-Id: Ifa6f63daebb07f45580f747341960e898fdb00c4
Signed-off-by: Koren Lev <korenlev@gmail.com>
Diffstat (limited to 'ui/imports/api/statistics')
-rw-r--r-- | ui/imports/api/statistics/helpers.js | 64 | ||||
-rw-r--r-- | ui/imports/api/statistics/methods.js | 159 | ||||
-rw-r--r-- | ui/imports/api/statistics/server/publications.js | 52 | ||||
-rw-r--r-- | ui/imports/api/statistics/statistics.js | 14 |
4 files changed, 289 insertions, 0 deletions
diff --git a/ui/imports/api/statistics/helpers.js b/ui/imports/api/statistics/helpers.js new file mode 100644 index 0000000..7cb78e8 --- /dev/null +++ b/ui/imports/api/statistics/helpers.js @@ -0,0 +1,64 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / +// / +// All rights reserved. This program and the accompanying materials / +// are made available under the terms of the Apache License, Version 2.0 / +// which accompanies this distribution, and is available at / +// http://www.apache.org/licenses/LICENSE-2.0 / +///////////////////////////////////////////////////////////////////////////////////////// +import * as R from 'ramda'; + +export function createGraphQuerySchema( + env, + object_id, + type, + flowType, + timeStart, + timeEnd, + sourceMacAddress, + destinationMacAddress, + sourceIPv4Address, + destinationIPv4Address) { + + let schema = { + environment: env, + object_id: object_id, + type: type, + flowType: flowType, + /* + averageArrivalNanoSeconds: { + $gte: timeStart, + //$lt: timeEnd + } + */ + data_arrival_avg: { + $gte: timeStart, + } + }; + + if (! R.isNil(timeEnd)) { + //schema = R.assocPath(['averageArrivalNanoSeconds', '$lt'], timeEnd, schema); + schema = R.assocPath(['data_arrival_avg', '$lt'], timeEnd, schema); + } + + switch (flowType) { + case 'L2': + schema = R.merge(schema, { + sourceMacAddress: sourceMacAddress, + destinationMacAddress: destinationMacAddress + }); + break; + + case 'L3': + schema = R.merge(schema, { + sourceIPv4Address: sourceIPv4Address, + destinationIPv4Address: destinationIPv4Address + }); + break; + + default: + break; + } + + return schema; +} diff --git a/ui/imports/api/statistics/methods.js b/ui/imports/api/statistics/methods.js new file mode 100644 index 0000000..23a216d --- /dev/null +++ b/ui/imports/api/statistics/methods.js @@ -0,0 +1,159 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / +// / +// All rights reserved. This program and the accompanying materials / +// are made available under the terms of the Apache License, Version 2.0 / +// which accompanies this distribution, and is available at / +// http://www.apache.org/licenses/LICENSE-2.0 / +///////////////////////////////////////////////////////////////////////////////////////// +import * as R from 'ramda'; +import { Statistics } from './statistics'; +import { createGraphQuerySchema } from './helpers'; + +Meteor.methods({ + 'statistics.flowTypes?env&object_id&type'({ env, object_id, type}) { + console.log('subscribe: statistics.flowTypes?env&object_id&type'); + console.log(`- env: ${env}`); + console.log(`- object_id: ${object_id}`); + console.log(`- type: ${type}`); + + let pipeline = [{ + $match: { + environment: env, + object_id: object_id, + type: type + } + }, { + $group: { + _id: { flowType: '$flowType' }, + flowType: { $first: '$flowType' } + } + }]; + + return Statistics.aggregate(pipeline); + }, + + 'statistics.srcMacAddresses?env&object_id&type&flowType'( + { env, object_id, type, flowType }) { + + let pipeline = [{ + $match: { + environment: env, + object_id: object_id, + type: type, + flowType: flowType + } + }, { + $group: { + _id: { sourceMacAddress: '$sourceMacAddress' }, + sourceMacAddress: { $first: '$sourceMacAddress' } + } + }]; + + return Statistics.aggregate(pipeline); + }, + + 'statistics.dstMacAddresses?env&object_id&type&flowType'( + { env, object_id, type, flowType }) { + + let pipeline = [{ + $match: { + environment: env, + object_id: object_id, + type: type, + flowType: flowType + } + }, { + $group: { + _id: { destinationMacAddress: '$destinationMacAddress' }, + destinationMacAddress: { $first: '$destinationMacAddress' } + } + }]; + + return Statistics.aggregate(pipeline); + }, + + 'statistics.srcIPv4Addresses?env&object_id&type&flow_typw'( + { env, object_id, type, flowType }) { + let pipeline = [{ + $match: { + environment: env, + object_id: object_id, + type: type, + flowType: flowType + } + }, { + $group: { + _id: { sourceIPv4Address: '$sourceIPv4Address' }, + sourceIPv4Address: { $first: '$sourceIPv4Address' } + } + }]; + + return Statistics.aggregate(pipeline); + }, + + 'statistics.dstIPv4Addresses?env&object_id&type&flowType'( + { env, object_id, type, flowType }) { + let pipeline = [{ + $match: { + environment: env, + object_id: object_id, + type: type, + flowType: flowType + } + }, { + $group: { + _id: { destinationIPv4Address: '$destinationIPv4Addres' }, + destinationIPv4Address: { $first: '$destinationIPv4Addres' } + } + }]; + + return Statistics.aggregate(pipeline); + }, + + 'statistics!graph-frames'({ + env, + object_id, + type, + flowType, + timeStart, + timeEnd, + sourceMacAddress, + destinationMacAddress, + sourceIPv4Address, + destinationIPv4Address + }) { + let schema = createGraphQuerySchema( + env, + object_id, + type, + flowType, + timeStart, + timeEnd, + sourceMacAddress, + destinationMacAddress, + sourceIPv4Address, + destinationIPv4Address); + + console.log('statistics!graph-frames'); + console.log(`- env: ${env}`); + console.log(`- object_id: ${object_id}`); + console.log(`- type: ${type}`); + console.log(`- flowType: ${flowType}`); + console.log(`- timeStart: ${timeStart}`); + console.log(`- timeEnd: ${timeEnd}`); + console.log(`- sourceMacAddress: ${sourceMacAddress}`); + console.log(`- destinationMacAddress: ${destinationMacAddress}`); + console.log(`- sourceIPv4Address: ${sourceIPv4Address}`); + console.log(`- destinationIPv4Address: ${destinationIPv4Address}`); + + //let data = Statistics.find(schema).fetch(); + let data = Statistics.findOne(schema); + console.log(`- averageArrivalNanoSeconds: ${R.path([0, 'averageArrivalNanoSeconds'], data)}`); + + return data; + } +}); + + + diff --git a/ui/imports/api/statistics/server/publications.js b/ui/imports/api/statistics/server/publications.js new file mode 100644 index 0000000..f69be56 --- /dev/null +++ b/ui/imports/api/statistics/server/publications.js @@ -0,0 +1,52 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / +// / +// All rights reserved. This program and the accompanying materials / +// are made available under the terms of the Apache License, Version 2.0 / +// which accompanies this distribution, and is available at / +// http://www.apache.org/licenses/LICENSE-2.0 / +///////////////////////////////////////////////////////////////////////////////////////// +import { Meteor } from 'meteor/meteor'; +//import { Counts } from 'meteor/tmeasday:publish-counts'; +import { Statistics } from '../statistics.js'; +import { createGraphQuerySchema } from '../helpers'; + +Meteor.publish('statistics!graph-frames', function ({ + env, + object_id, + type, + flowType, + timeStart, + sourceMacAddress, + destinationMacAddress, + sourceIPv4Address, + destinationIPv4Address +}) { + console.log('server subscribe: statistics?graph-frames'); + + let schema = createGraphQuerySchema( + env, + object_id, + type, + flowType, + timeStart, + null, + sourceMacAddress, + destinationMacAddress, + sourceIPv4Address, + destinationIPv4Address); + + console.log('statistics!graph-frames'); + console.log(`- env: ${env}`); + console.log(`- object_id: ${object_id}`); + console.log(`- type: ${type}`); + console.log(`- flowType: ${flowType}`); + console.log(`- timeStart: ${timeStart}`); + console.log(`- sourceMacAddress: ${sourceMacAddress}`); + console.log(`- destinationMacAddress: ${destinationMacAddress}`); + console.log(`- sourceIPv4Address: ${sourceIPv4Address}`); + console.log(`- destinationIPv4Address: ${destinationIPv4Address}`); + + return Statistics.find(schema); +}); + diff --git a/ui/imports/api/statistics/statistics.js b/ui/imports/api/statistics/statistics.js new file mode 100644 index 0000000..3391933 --- /dev/null +++ b/ui/imports/api/statistics/statistics.js @@ -0,0 +1,14 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / +// / +// All rights reserved. This program and the accompanying materials / +// are made available under the terms of the Apache License, Version 2.0 / +// which accompanies this distribution, and is available at / +// http://www.apache.org/licenses/LICENSE-2.0 / +///////////////////////////////////////////////////////////////////////////////////////// +import { Mongo } from 'meteor/mongo'; +//import { SimpleSchema } from 'meteor/aldeed:simple-schema'; +//import * as R from 'ramda'; + +export const Statistics = new Mongo.Collection( + 'statistics', { idGeneration: 'MONGO' }); |