Skip to content

Rad 5888 meta script to use maintenance event service #22

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
185 changes: 185 additions & 0 deletions Meta-MaintenanceEvent-Script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
//spring application context
var Common = Java.type('com.serotonin.m2m2.Common');
var ArrayList = Java.type('java.util.ArrayList');
var Consumer = Java.type('java.util.function.Consumer');

//DAO
var maintenanceEventDao = Java.type('com.serotonin.m2m2.maintenanceEvents.MaintenanceEventDao');
var daoClass = Common.getBean(maintenanceEventDao.class);

var Arrays = Java.type('java.util.Arrays');

var maintenanceEventModel = Java.type('com.infiniteautomation.mango.rest.latest.model.MaintenanceEventModel');
var eventModelClass = new maintenanceEventModel();

//RQL libraries
var ASTNode = Java.type('net.jazdw.rql.parser.ASTNode');
var RQLUtils = Java.type('com.infiniteautomation.mango.util.RQLUtils');
var EventInstanceService = Java.type('com.infiniteautomation.mango.spring.service.EventInstanceService');
var eventInstanceServiceClass = Common.getBean(EventInstanceService.class);

var pointValueSum = 0;
//first check whether this Meta data point has any acitve maintenance events, if has return 0
var metapointActiveMtcEventsCount = 0;
var MetaPointXid = 'DP_a620e9ab-8760-4177-8c1a-fecea969652f'
var isMetaPointEnabled = RuntimeManager.isDataPointEnabled(MetaPointXid);
//print(isEnabled);
if (isMetaPointEnabled) {
metapointActiveMtcEventsCount = getPointXidActiveMaintenanceEvents('DP_a620e9ab-8760-4177-8c1a-fecea969652f');
} else {
print("Metapoint disabled");
return pointValueSum;
}
//print("This Meta point has MaintenanceEvents: Count is....", metapointActiveMtcEventsCount);

if(metapointActiveMtcEventsCount > 0) {
return pointValueSum;
} else {
// var pointValueSum = 0;
var activeContextPointCount = 0;

for (var key in EXTERNAL_POINTS) {
//get the point value of each context point
var contextPoint = this[key];

//print(contextPoint);
var wrapper = contextPoint.getDataPointWrapper();
print('context point Xid ' + wrapper.xid + "context point value " + contextPoint.value);
// print(wrapper.extendedName); // print(wrapper.value);
//print('Current Context Point: id=' + wrapper.id + ' || pointXid= ' + wrapper.xid + '|| pointName= ' + wrapper.extendedName);

if (wrapper.enabled) {

//check this pointXid has any active MaintenanceEvents
var sumOfActiveMaintenanceEventsCount = getPointXidActiveMaintenanceEvents(wrapper.xid);
print("Active Maintenance Events Count for pointXid " + wrapper.xid + ' are ', sumOfActiveMaintenanceEventsCount);

if (sumOfActiveMaintenanceEventsCount !== null && sumOfActiveMaintenanceEventsCount > 0){
//contextPoint.PointValue = 0;
pointValueSum += 0;
// print("entered..",contextPoint.value);
} else {
pointValueSum += contextPoint.value;
}

// pointValueSum += contextPoint.value;
activeContextPointCount += 1;
}

print('pointValueSum=' + pointValueSum + ' ' + 'activeContextPoint ' + activeContextPointCount);
print(' ');
//Accessing a single data point tag by name
//print('Accessing a single tag: deviceID: ' + wrapper.tags.deviceId);
}

if (activeContextPointCount > 0) {
// print('Sum of all ENABLED context points: ' + pointValueSum);
return pointValueSum;
} else {
//return 0;
}

}

//Helper functions
function fillDataPoints(model){
var xids = new ArrayList();
var addConsumer = Java.extend(Consumer, {
accept: function(xid) {
xids.add(xid);
}
});

daoClass.getPointXids(model.getId(), new addConsumer());
model.setDataPoints(xids.isEmpty() ? null : xids);
// if(xids.isEmpty()) { model.setDataPoints(null);} //else { model.setDataPoints(xids); }
}

//another helper function
function fillDataSources(model){
var dsXids = new ArrayList();
var addConsumerDataSources = Java.extend(Consumer, {
accept: function(xid) {
dsXids.add(xid);
}
});
daoClass.getSourceXids(model.getId(), new addConsumerDataSources());
model.setDataSources(dsXids.isEmpty() ? null : dsXids);
}

//return total
function getTotalCountOfActiveMaintenanceEvents(aList) {
var totalCountOfActiveMaintenanceEvents = 0;
for(var element = 0; element < aList.size(); element++){
totalCountOfActiveMaintenanceEvents += aList.get(element);
}
return totalCountOfActiveMaintenanceEvents;
}


//function to call for each xid
var eventType = 'MAINTENANCE';
var HashMap = Java.type('java.util.HashMap');

var maintenanceEventVO = Java.type('com.serotonin.m2m2.maintenanceEvents.MaintenanceEventVO');
var eventVOClass = new maintenanceEventVO();

//RQL related libraries
var ASTNode = Java.type('net.jazdw.rql.parser.ASTNode');
var RQLUtils = Java.type('com.infiniteautomation.mango.util.RQLUtils');
var eventInstance = Java.type('com.infiniteautomation.mango.spring.service.EventInstanceService');
var eventInstanceService = Common.getBean(eventInstance.class);
var subSelectMap = new HashMap();

//function to return the active MaintenanceEvent count linked to pointXids
function getPointXidActiveMaintenanceEvents(pointXid) {

//print("Entered getPointXidActiveMaintenanceEvents", pointXid);
var sumOfActiveMaintenanceEventsCount = new ArrayList();

//var finalCount = 0;
var activeEventsCount = null;
//create a map to store results
var HashMap = Java.type('java.util.HashMap');
var map = new HashMap();

var models = new ArrayList();
var MyConsumer = Java.extend(Consumer, {
accept: function(vo) {
var model = new maintenanceEventModel(vo);
fillDataPoints(model);
fillDataSources(model);
models.add(model);
//print("pointXid....", pointXid);
//print("model xid= ", model.xid + " model id= " + model.id);
var astNodeInitial = new ASTNode("eq", "typeName", 'MAINTENANCE');
var rql = RQLUtils.addAndRestriction(astNodeInitial, new ASTNode("eq", "rtnTs", null));
rql = RQLUtils.addAndRestriction(rql, new ASTNode("eq", "rtnApplicable", "Y"));
rql = RQLUtils.addAndRestriction(rql, new ASTNode("in", "typeRef1", model.id));
// print(rql);
activeEventsCount = eventInstanceServiceClass.customizedCount(rql);
//print("activeEventsCount....",activeEventsCount);
sumOfActiveMaintenanceEventsCount.add(activeEventsCount);
//}
//print("activeEventsCount..",activeEventsCount);
//print("Active maintenance events count for this Event xid" , model.xid + " are: "+ JSON.stringify(activeEventsCount));

if(activeEventsCount != null && Number(activeEventsCount) > 0)
print("This meta/context point has active maintenance events..")
}
});

//print("before calling MyConsumer", pointXid);
daoClass.getForDataPoint(pointXid, new MyConsumer());
//print("Called MyConsumer", pointXid);
// print("final Count..",finalCount);
//return activeEventsCount;
return getTotalCountOfActiveMaintenanceEvents(sumOfActiveMaintenanceEventsCount);
// map.put(pointXid,models);
//return map.size();
}





150 changes: 150 additions & 0 deletions meta_points_scripts/meta-script-to-use-maintenance-event-service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@

//to gain access to standard java objects
var Arrays = Java.type('java.util.Arrays');
var ArrayList = Java.type('java.util.ArrayList');
var Consumer = Java.type('java.util.function.Consumer');

//spring application context
var Common = Java.type('com.serotonin.m2m2.Common');

//DAO
var maintenanceEventDao = Java.type('com.serotonin.m2m2.maintenanceEvents.MaintenanceEventDao');
var daoClass = Common.getBean(maintenanceEventDao.class);

var maintenanceEventModel = Java.type('com.infiniteautomation.mango.rest.latest.model.MaintenanceEventModel');
var eventModelClass = new maintenanceEventModel();

//RQL related libraries
var ASTNode = Java.type('net.jazdw.rql.parser.ASTNode');
var RQLUtils = Java.type('com.infiniteautomation.mango.util.RQLUtils');
var EventInstanceService = Java.type('com.infiniteautomation.mango.spring.service.EventInstanceService');
var eventInstanceServiceClass = Common.getBean(EventInstanceService.class);

//first check whether this Meta data point has any acitve maintenance events, if has return 0
var metapointActiveMtcEventsCount = 0;
var pointValueSum = 0;
var MetaPointXid = 'DP_a620e9ab-8760-4177-8c1a-fecea969652f'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This XID doesn't have to be linked to a Meta Point, it can be used for any data point. This variable name should be renamed to avoid confusing users.

var isMetaPointEnabled = RuntimeManager.isDataPointEnabled(MetaPointXid);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This XID doesn't have to be linked to a Meta Point, it can be used for any data point. This variable name should be renamed to avoid confusing users.


if (isMetaPointEnabled) {
metapointActiveMtcEventsCount = getPointXidActiveMaintenanceEvents(MetaPointXid);
} else {
return pointValueSum;
}

if(metapointActiveMtcEventsCount > 0) {
return pointValueSum;
} else {
var activeContextPointCount = 0;

for (var key in EXTERNAL_POINTS) {
//get the point value of each context point
var contextPoint = this[key];
var wrapper = contextPoint.getDataPointWrapper();
if (wrapper.enabled) {

//check this pointXid has any active MaintenanceEvents
var sumOfActiveMaintenanceEventsCount = getPointXidActiveMaintenanceEvents(wrapper.xid);

if (sumOfActiveMaintenanceEventsCount !== null && sumOfActiveMaintenanceEventsCount > 0){
pointValueSum += 0;
} else {
pointValueSum += contextPoint.value;
}

activeContextPointCount += 1;
}
}

if (activeContextPointCount > 0) {
return pointValueSum;
} else {

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a return value here.

}
}

//Helper functions
function fillDataPoints(model){
var xids = new ArrayList();
var addConsumer = Java.extend(Consumer, {
accept: function(xid) {
xids.add(xid);
}
});

daoClass.getPointXids(model.getId(), new addConsumer());
model.setDataPoints(xids.isEmpty() ? null : xids);
}

//another helper function
function fillDataSources(model){
var dsXids = new ArrayList();
var addConsumerDataSources = Java.extend(Consumer, {
accept: function(xid) {
dsXids.add(xid);
}
});
daoClass.getSourceXids(model.getId(), new addConsumerDataSources());
model.setDataSources(dsXids.isEmpty() ? null : dsXids);
}

//return total
function getTotalCountOfActiveMaintenanceEvents(aList) {
var totalCountOfActiveMaintenanceEvents = 0;
for(var element = 0; element < aList.size(); element++){
totalCountOfActiveMaintenanceEvents += aList.get(element);
}
return totalCountOfActiveMaintenanceEvents;
}

//function to call for each xid
var HashMap = Java.type('java.util.HashMap');

var maintenanceEventVO = Java.type('com.serotonin.m2m2.maintenanceEvents.MaintenanceEventVO');
var eventVOClass = new maintenanceEventVO();

//RQL related libraries
var ASTNode = Java.type('net.jazdw.rql.parser.ASTNode');
var RQLUtils = Java.type('com.infiniteautomation.mango.util.RQLUtils');
var eventInstance = Java.type('com.infiniteautomation.mango.spring.service.EventInstanceService');
var eventInstanceService = Common.getBean(eventInstance.class);
var subSelectMap = new HashMap();

//function to return the active MaintenanceEvent count linked to pointXids
function getPointXidActiveMaintenanceEvents(pointXid) {

var sumOfActiveMaintenanceEventsCount = new ArrayList();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This variable name is a little confusing. This variable represents a list of items, not a numerical sum. Choosing a different variable name would improve readability.

var activeEventsCount = null;
//create a map to store results
var HashMap = Java.type('java.util.HashMap');
var map = new HashMap();
var models = new ArrayList();

var MyConsumer = Java.extend(Consumer, {
accept: function(vo) {
var model = new maintenanceEventModel(vo);
fillDataPoints(model);
fillDataSources(model);
models.add(model);

var astNodeInitial = new ASTNode("eq", "typeName", 'MAINTENANCE');
var rql = RQLUtils.addAndRestriction(astNodeInitial, new ASTNode("eq", "rtnTs", null));
rql = RQLUtils.addAndRestriction(rql, new ASTNode("eq", "rtnApplicable", "Y"));
rql = RQLUtils.addAndRestriction(rql, new ASTNode("in", "typeRef1", model.id));

activeEventsCount = eventInstanceServiceClass.customizedCount(rql);
sumOfActiveMaintenanceEventsCount.add(activeEventsCount);

//if(activeEventsCount != null && Number(activeEventsCount) > 0)
//print("This meta/context point has active maintenance events..")
}
});

daoClass.getForDataPoint(pointXid, new MyConsumer());
return getTotalCountOfActiveMaintenanceEvents(sumOfActiveMaintenanceEventsCount);
}