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.
Files changed (3) hide show
  1. package/main.js +112 -22
  2. package/package.json +1 -1
  3. 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
- retries: process.env.PERFMON_RETRIES ? parseInt(process.env.PERFMON_RETRIES) : 3,
115
- retryDelay: process.env.PERFMON_RETRY_DELAY ? parseInt(process.env.PERFMON_RETRY_DELAY) : 1000,
116
- retryOn: [503],
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((item) => (counterStr += "<soap:Counter>" + "<soap:Name>" + "\\\\" + item.host + "\\" + item.object + "\\" + item.counter + "</soap:Name>" + "</soap:Counter>"));
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((item) => (counterStr += "<soap:Counter>" + "<soap:Name>" + "\\\\" + item.host + "\\" + item.object + "\\" + item.counter + "</soap:Name>" + "</soap:Counter>"));
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cisco-perfmon",
3
- "version": "1.4.2",
3
+ "version": "1.4.4",
4
4
  "description": "A library to pull Perfmon data from Cisco VOS applications via SOAP",
5
5
  "main": "main.js",
6
6
  "scripts": {
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 counterObj = {
31
+ var counterObject = "Cisco CallManager";
32
+ var sessionObj = {
32
33
  host: cucmServerName,
33
- object: "Memory",
34
- counter: "% Mem Used",
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(counterObj)
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, "Cisco CallManager")
55
+ .collectCounterData(cucmServerName, counterObject)
55
56
  .then((response) => {
56
- console.log("collectCounterData", response.results);
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, counterObj)
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));