cisco-perfmon 1.4.2 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/main.js +112 -22
- package/package.json +1 -1
- package/test/tests.js +9 -8
package/main.js
CHANGED
|
@@ -85,17 +85,6 @@ var XML_REMOVE_COUNTER_ENVELOPE = `<soapenv:Envelope xmlns:soapenv="http://schem
|
|
|
85
85
|
</soapenv:Body>
|
|
86
86
|
</soapenv:Envelope>`;
|
|
87
87
|
|
|
88
|
-
// Set up our promise results
|
|
89
|
-
var promiseResults = {
|
|
90
|
-
cookie: "",
|
|
91
|
-
results: "",
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
// Set up our error results
|
|
95
|
-
var errorResults = {
|
|
96
|
-
message: "",
|
|
97
|
-
};
|
|
98
|
-
|
|
99
88
|
/**
|
|
100
89
|
* Cisco Perfmon Service
|
|
101
90
|
* This is a service class that uses fetch and promises to pull Perfmon data from Cisco CUCM
|
|
@@ -111,9 +100,20 @@ var errorResults = {
|
|
|
111
100
|
class perfMonService {
|
|
112
101
|
constructor(host, username, password, options) {
|
|
113
102
|
this._OPTIONS = {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
103
|
+
retryOn: function (attempt, error, response) {
|
|
104
|
+
// Only allow retries on JSESSIONIDSSO authenticaion attempts
|
|
105
|
+
if (!options) {
|
|
106
|
+
return false;
|
|
107
|
+
} else if (attempt > (process.env.PERFMON_RETRIES ? parseInt(process.env.PERFMON_RETRIES) : 3)) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
// retry on any network error, or 4xx or 5xx status codes
|
|
111
|
+
if (error !== null || response.status >= 400) {
|
|
112
|
+
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
113
|
+
delay(process.env.PERFMON_RETRY_DELAY ? parseInt(process.env.PERFMON_RETRY_DELAY) : 1000);
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
117
|
method: "POST",
|
|
118
118
|
headers: {
|
|
119
119
|
Authorization: "Basic " + Buffer.from(username + ":" + password).toString("base64"),
|
|
@@ -159,6 +159,16 @@ class perfMonService {
|
|
|
159
159
|
fetch(`https://${server}:8443/perfmonservice2/services/PerfmonService/`, options)
|
|
160
160
|
.then(async (response) => {
|
|
161
161
|
try {
|
|
162
|
+
// Set up our promise results
|
|
163
|
+
var promiseResults = {
|
|
164
|
+
cookie: "",
|
|
165
|
+
results: "",
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
// Set up our error results
|
|
169
|
+
var errorResults = {
|
|
170
|
+
message: "",
|
|
171
|
+
};
|
|
162
172
|
var data = []; // create an array to save chunked data from server
|
|
163
173
|
promiseResults.cookie = response.headers.get("set-cookie") ? response.headers.get("set-cookie") : "";
|
|
164
174
|
// response.body is a ReadableStream
|
|
@@ -273,6 +283,16 @@ class perfMonService {
|
|
|
273
283
|
fetch(`https://${server}:8443/perfmonservice2/services/PerfmonService/`, options)
|
|
274
284
|
.then(async (response) => {
|
|
275
285
|
try {
|
|
286
|
+
// Set up our promise results
|
|
287
|
+
var promiseResults = {
|
|
288
|
+
cookie: "",
|
|
289
|
+
results: "",
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
// Set up our error results
|
|
293
|
+
var errorResults = {
|
|
294
|
+
message: "",
|
|
295
|
+
};
|
|
276
296
|
var data = []; // create an array to save chunked data from server
|
|
277
297
|
promiseResults.cookie = response.headers.get("set-cookie") ? response.headers.get("set-cookie") : "";
|
|
278
298
|
// response.body is a ReadableStream
|
|
@@ -370,7 +390,7 @@ class perfMonService {
|
|
|
370
390
|
* @param {string} host - The host to collect data from.
|
|
371
391
|
* @returns {object} returns JSON via a Promise. JSON contains Session Cookie (If availible) and Results.
|
|
372
392
|
*/
|
|
373
|
-
listCounter(host,filtered = []) {
|
|
393
|
+
listCounter(host, filtered = []) {
|
|
374
394
|
var XML;
|
|
375
395
|
var options = this._OPTIONS;
|
|
376
396
|
options.SOAPAction = `perfmonListCounter`;
|
|
@@ -386,6 +406,16 @@ class perfMonService {
|
|
|
386
406
|
fetch(`https://${server}:8443/perfmonservice2/services/PerfmonService/`, options)
|
|
387
407
|
.then(async (response) => {
|
|
388
408
|
try {
|
|
409
|
+
// Set up our promise results
|
|
410
|
+
var promiseResults = {
|
|
411
|
+
cookie: "",
|
|
412
|
+
results: "",
|
|
413
|
+
};
|
|
414
|
+
|
|
415
|
+
// Set up our error results
|
|
416
|
+
var errorResults = {
|
|
417
|
+
message: "",
|
|
418
|
+
};
|
|
389
419
|
var data = []; // create an array to save chunked data from server
|
|
390
420
|
promiseResults.cookie = response.headers.get("set-cookie") ? response.headers.get("set-cookie") : "";
|
|
391
421
|
// response.body is a ReadableStream
|
|
@@ -404,7 +434,7 @@ class perfMonService {
|
|
|
404
434
|
var returnResults = output.Body.perfmonListCounterResponse.perfmonListCounterReturn;
|
|
405
435
|
promiseResults.results = clean(returnResults);
|
|
406
436
|
if (filtered.length > 0) {
|
|
407
|
-
var res = promiseResults.results.filter(item => filtered.includes(item.Name));
|
|
437
|
+
var res = promiseResults.results.filter((item) => filtered.includes(item.Name));
|
|
408
438
|
promiseResults.results = res;
|
|
409
439
|
}
|
|
410
440
|
resolve(promiseResults);
|
|
@@ -470,6 +500,16 @@ class perfMonService {
|
|
|
470
500
|
fetch(`https://${server}:8443/perfmonservice2/services/PerfmonService/`, options)
|
|
471
501
|
.then(async (response) => {
|
|
472
502
|
try {
|
|
503
|
+
// Set up our promise results
|
|
504
|
+
var promiseResults = {
|
|
505
|
+
cookie: "",
|
|
506
|
+
results: "",
|
|
507
|
+
};
|
|
508
|
+
|
|
509
|
+
// Set up our error results
|
|
510
|
+
var errorResults = {
|
|
511
|
+
message: "",
|
|
512
|
+
};
|
|
473
513
|
var data = []; // create an array to save chunked data from server
|
|
474
514
|
promiseResults.cookie = response.headers.get("set-cookie") ? response.headers.get("set-cookie") : "";
|
|
475
515
|
// response.body is a ReadableStream
|
|
@@ -554,6 +594,16 @@ class perfMonService {
|
|
|
554
594
|
fetch(`https://${server}:8443/perfmonservice2/services/PerfmonService/`, options)
|
|
555
595
|
.then(async (response) => {
|
|
556
596
|
try {
|
|
597
|
+
// Set up our promise results
|
|
598
|
+
var promiseResults = {
|
|
599
|
+
cookie: "",
|
|
600
|
+
results: "",
|
|
601
|
+
};
|
|
602
|
+
|
|
603
|
+
// Set up our error results
|
|
604
|
+
var errorResults = {
|
|
605
|
+
message: "",
|
|
606
|
+
};
|
|
557
607
|
var data = []; // create an array to save chunked data from server
|
|
558
608
|
promiseResults.cookie = response.headers.get("set-cookie") ? response.headers.get("set-cookie") : "";
|
|
559
609
|
// response.body is a ReadableStream
|
|
@@ -632,6 +682,16 @@ class perfMonService {
|
|
|
632
682
|
fetch(`https://${server}:8443/perfmonservice2/services/PerfmonService/`, options)
|
|
633
683
|
.then(async (response) => {
|
|
634
684
|
try {
|
|
685
|
+
// Set up our promise results
|
|
686
|
+
var promiseResults = {
|
|
687
|
+
cookie: "",
|
|
688
|
+
results: "",
|
|
689
|
+
};
|
|
690
|
+
|
|
691
|
+
// Set up our error results
|
|
692
|
+
var errorResults = {
|
|
693
|
+
message: "",
|
|
694
|
+
};
|
|
635
695
|
var data = []; // create an array to save chunked data from server
|
|
636
696
|
promiseResults.cookie = response.headers.get("set-cookie") ? response.headers.get("set-cookie") : "";
|
|
637
697
|
// response.body is a ReadableStream
|
|
@@ -702,11 +762,11 @@ class perfMonService {
|
|
|
702
762
|
var options = this._OPTIONS;
|
|
703
763
|
options.SOAPAction = `perfmonAddCounter`;
|
|
704
764
|
var server = this._HOST;
|
|
705
|
-
|
|
765
|
+
// var counterStr = "<soap:Counter>" + "\\\\" + counter.host + "\\" + (counter.instance ? `${counter.object}(${counter.instance})` : counter.object) + "\\" + counter.counter + "</soap:Counter>";
|
|
706
766
|
if (Array.isArray(counter)) {
|
|
707
|
-
counter.forEach((
|
|
767
|
+
counter.forEach((counter) => (counterStr += "<soap:Counter>" + "<soap:Name>" + "\\\\" + counter.host + "\\" + (counter.instance ? `${counter.object}(${counter.instance})` : counter.object) + "\\" + counter.counter + "</soap:Name>" + "</soap:Counter>"));
|
|
708
768
|
} else {
|
|
709
|
-
counterStr = "<soap:Counter>" + "<soap:Name>" + "\\\\" + counter.host + "\\" + counter.object + "\\" + counter.counter + "</soap:Name>" + "</soap:Counter>";
|
|
769
|
+
counterStr = "<soap:Counter>" + "<soap:Name>" + "\\\\" + counter.host + "\\" + (counter.instance ? `${counter.object}(${counter.instance})` : counter.object) + "\\" + counter.counter + "</soap:Name>" + "</soap:Counter>";
|
|
710
770
|
}
|
|
711
771
|
|
|
712
772
|
XML = util.format(XML_ADD_COUNTER_ENVELOPE, sessionHandle, counterStr);
|
|
@@ -719,6 +779,16 @@ class perfMonService {
|
|
|
719
779
|
fetch(`https://${server}:8443/perfmonservice2/services/PerfmonService/`, options)
|
|
720
780
|
.then(async (response) => {
|
|
721
781
|
try {
|
|
782
|
+
// Set up our promise results
|
|
783
|
+
var promiseResults = {
|
|
784
|
+
cookie: "",
|
|
785
|
+
results: "",
|
|
786
|
+
};
|
|
787
|
+
|
|
788
|
+
// Set up our error results
|
|
789
|
+
var errorResults = {
|
|
790
|
+
message: "",
|
|
791
|
+
};
|
|
722
792
|
var data = []; // create an array to save chunked data from server
|
|
723
793
|
// response.body is a ReadableStream
|
|
724
794
|
const reader = response.body.getReader();
|
|
@@ -790,9 +860,9 @@ class perfMonService {
|
|
|
790
860
|
var server = this._HOST;
|
|
791
861
|
|
|
792
862
|
if (Array.isArray(counter)) {
|
|
793
|
-
counter.forEach((
|
|
863
|
+
counter.forEach((counter) => (counterStr += "<soap:Counter>" + "<soap:Name>" + "\\\\" + counter.host + "\\" + (counter.instance ? `${counter.object}(${counter.instance})` : counter.object) + "\\" + counter.counter + "</soap:Name>" + "</soap:Counter>"));
|
|
794
864
|
} else {
|
|
795
|
-
counterStr = "<soap:Counter>" + "<soap:Name>" + "\\\\" + counter.host + "\\" + counter.object + "\\" + counter.counter + "</soap:Name>" + "</soap:Counter>";
|
|
865
|
+
counterStr = "<soap:Counter>" + "<soap:Name>" + "\\\\" + counter.host + "\\" + (counter.instance ? `${counter.object}(${counter.instance})` : counter.object) + "\\" + counter.counter + "</soap:Name>" + "</soap:Counter>";
|
|
796
866
|
}
|
|
797
867
|
|
|
798
868
|
XML = util.format(XML_REMOVE_COUNTER_ENVELOPE, sessionHandle, counterStr);
|
|
@@ -805,6 +875,16 @@ class perfMonService {
|
|
|
805
875
|
fetch(`https://${server}:8443/perfmonservice2/services/PerfmonService/`, options)
|
|
806
876
|
.then(async (response) => {
|
|
807
877
|
try {
|
|
878
|
+
// Set up our promise results
|
|
879
|
+
var promiseResults = {
|
|
880
|
+
cookie: "",
|
|
881
|
+
results: "",
|
|
882
|
+
};
|
|
883
|
+
|
|
884
|
+
// Set up our error results
|
|
885
|
+
var errorResults = {
|
|
886
|
+
message: "",
|
|
887
|
+
};
|
|
808
888
|
var data = []; // create an array to save chunked data from server
|
|
809
889
|
// response.body is a ReadableStream
|
|
810
890
|
const reader = response.body.getReader();
|
|
@@ -873,7 +953,7 @@ class perfMonService {
|
|
|
873
953
|
options.SOAPAction = `perfmonQueryCounterDescription`;
|
|
874
954
|
var server = this._HOST;
|
|
875
955
|
|
|
876
|
-
var counterStr = "<soap:Counter>" + "\\\\" + counter.host + "\\" + counter.object + "\\" + counter.counter + "</soap:Counter>";
|
|
956
|
+
var counterStr = "<soap:Counter>" + "\\\\" + counter.host + "\\" + (counter.instance ? `${counter.object}(${counter.instance})` : counter.object) + "\\" + counter.counter + "</soap:Counter>";
|
|
877
957
|
|
|
878
958
|
XML = util.format(XML_QUERY_COUNTER_ENVELOPE, counterStr);
|
|
879
959
|
|
|
@@ -885,6 +965,16 @@ class perfMonService {
|
|
|
885
965
|
fetch(`https://${server}:8443/perfmonservice2/services/PerfmonService/`, options)
|
|
886
966
|
.then(async (response) => {
|
|
887
967
|
try {
|
|
968
|
+
// Set up our promise results
|
|
969
|
+
var promiseResults = {
|
|
970
|
+
cookie: "",
|
|
971
|
+
results: "",
|
|
972
|
+
};
|
|
973
|
+
|
|
974
|
+
// Set up our error results
|
|
975
|
+
var errorResults = {
|
|
976
|
+
message: "",
|
|
977
|
+
};
|
|
888
978
|
var data = []; // create an array to save chunked data from server
|
|
889
979
|
promiseResults.cookie = response.headers.get("set-cookie") ? response.headers.get("set-cookie") : "";
|
|
890
980
|
// response.body is a ReadableStream
|
package/package.json
CHANGED
package/test/tests.js
CHANGED
|
@@ -28,17 +28,18 @@ var cucmServerName = env.CUCM_SERVER_NAME;
|
|
|
28
28
|
|
|
29
29
|
// Variables to hold our SessionID and our Session Counter
|
|
30
30
|
var SessionID;
|
|
31
|
-
var
|
|
31
|
+
var counterObject = "Cisco CallManager";
|
|
32
|
+
var sessionObj = {
|
|
32
33
|
host: cucmServerName,
|
|
33
|
-
object:
|
|
34
|
-
|
|
34
|
+
object: 'Partition',
|
|
35
|
+
instance: 'SharedMemory',
|
|
36
|
+
counter: 'Write Bytes Per Sec',
|
|
35
37
|
};
|
|
36
38
|
|
|
37
|
-
|
|
38
39
|
(async () => {
|
|
39
40
|
console.log("Let's get a description of our counter. We will also retrieve a cookie to use for the rest of the session.");
|
|
40
41
|
await service
|
|
41
|
-
.queryCounterDescription(
|
|
42
|
+
.queryCounterDescription(sessionObj)
|
|
42
43
|
.then((response) => {
|
|
43
44
|
console.log("queryCounterDescription: ", response.results);
|
|
44
45
|
if (response.cookie) {
|
|
@@ -51,9 +52,9 @@ var counterObj = {
|
|
|
51
52
|
|
|
52
53
|
console.log("Let's collect some non session counter data.");
|
|
53
54
|
await service
|
|
54
|
-
.collectCounterData(cucmServerName,
|
|
55
|
+
.collectCounterData(cucmServerName, counterObject)
|
|
55
56
|
.then((response) => {
|
|
56
|
-
console.log("collectCounterData", response
|
|
57
|
+
console.log("collectCounterData", response);
|
|
57
58
|
})
|
|
58
59
|
.catch((error) => {
|
|
59
60
|
console.log(error.message);
|
|
@@ -66,7 +67,7 @@ var counterObj = {
|
|
|
66
67
|
console.log("SessionID", response.results);
|
|
67
68
|
SessionID = response.results;
|
|
68
69
|
await service
|
|
69
|
-
.addCounter(SessionID,
|
|
70
|
+
.addCounter(SessionID, sessionObj)
|
|
70
71
|
.then(async (response) => {
|
|
71
72
|
console.log("addCounter", response.results);
|
|
72
73
|
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|