+ ecs_producer_jobs_arr = JSON.parse(JSON.stringify(ecs_producer_arr))
+ for(var x=0;x<ecs_producer_jobs_arr.length;x++) {
+ getSimCtr(LOCALHOST+ECS_PORT+"/ei-producer/v1/eiproducers/"+ecs_producer_jobs_arr[x]+"/eijobs", x, function(data, x) {
+ var row=""+ecs_producer_jobs_arr[x]+" : "
+ try {
+ var jd=JSON.parse(data);
+ for(var j=0;j<jd.length;j++) {
+ var jda=jd[j]
+ row=""+row+jda["ei_job_identity"]+"("+jda["ei_type_identity"]+") "
+ }
+ ecs_producer_jobs_arr[x]=row
+ }
+ catch (err) {
+ ecs_producer_jobs_arr=new Array(0)
+ }
+ });
+ }
+
+ ecs_producer_status_arr = JSON.parse(JSON.stringify(ecs_producer_arr))
+ for(var x=0;x<ecs_producer_status_arr.length;x++) {
+ getSimCtr(LOCALHOST+ECS_PORT+"/ei-producer/v1/eiproducers/"+ecs_producer_status_arr[x]+"/status", x, function(data, x) {
+ var row=""+ecs_producer_status_arr[x]+" : "
+ try {
+ var jd=JSON.parse(data);
+ row=""+row+jd["operational_state"]
+ ecs_producer_status_arr[x]=row
+ }
+ catch (err) {
+ ecs_producer_status_arr=new Array(0)
+ }
+ });
+ }
+ clearFlag("ecs_stat")
+ }
+ if (checkFunctionFlag("prodstub_stat")) {
+ getSimCtr(LOCALHOST+PRODSTUB_PORT+"/status", x, function(data, x) {
+ var ctr2_map=new Map()
+ var ctr3_map=new Map()
+ var ctr2=0
+ var ctr4=0
+ ps_producers=""
+ ps_types=""
+ ps_producer_type_arr=new Array()
+ ps_producer_jobs_arr=new Array()
+ ps_producer_delivery_arr=new Array()
+ ps2=""
+ ps3=""
+ ps4=""
+ try {
+ var jp=JSON.parse(data);
+ for(var prod_name in jp) {
+ ctr2_map.set(prod_name, prod_name)
+ ctr2 += 1
+ var jj=jp[prod_name]
+ var row=""+prod_name+" : "
+ var rowj=""+prod_name+" : "
+ var rowd=""+prod_name+" : "
+ ps_producers += prod_name + " "
+ for(var ji in jj) {
+ if (ji == "types") {
+ var ta=jj[ji]
+ for(var i=0;i<ta.length;i++) {
+ ctr3_map.set(ta[i], ta[i])
+ row += " "+ta[i]
+ }
+ } else if (ji == "supervision_response") {
+ } else if (ji == "supervision_counter") {
+ } else if (ji == "types") {
+ } else {
+ ctr4 += 1
+ rowj += " "+ji
+ rowd += " "+ji
+ var job_data=jj[ji]["json"]
+ if (job_data != undefined) {
+ rowj += "("+job_data["ei_type_identity"]+")"
+ }
+ rowd += "("+jj[ji]["delivery_attempts"]+")"
+ }
+ }
+ ps_producer_type_arr[(ctr2-1)]=row
+ ps_producer_jobs_arr[(ctr2-1)]=rowj
+ ps_producer_delivery_arr[(ctr2-1)]=rowd
+ }
+ ps2=""+ctr2_map.size
+ ps3=""+ctr3_map.size
+ for(const [key, value] of ctr3_map.entries()) {
+ ps_types += key + " "
+ }
+ ps4=""+ctr4
+ }
+ catch (err) {
+ console.error(err);
+ ps_producers="error response"
+ ps_types="error response"
+ ps_producer_type_arr=new Array()
+ ps_producer_jobs_arr=new Array()
+ ps_producer_delivery_arr=new Array()
+ ps2="error response"
+ ps3="error response"
+ ps4="error response"
+ }
+ });
+ clearFlag("prodstub_stat")
+ }
+
+ fetchAllMetrics_ecs();
+
+ }, 500)
+}
+
+function fetchAllMetrics_cr() {
+
+ console.log("Fetching CR DB - timer:" + refreshCount_ecs)
+
+ if (refreshCount_cr < 0) {
+ refreshCount_cr = -1
+ return
+ } else {
+ refreshCount_cr = refreshCount_cr - 1
+ }
+ setTimeout(() => {
+
+ if (checkFunctionFlag("cr_stat")) {
+ getSimCtr(LOCALHOST+CR_PORT+"/db", 0, function(data, index) {
+ ecs4=""
+ try {
+ cr_db=JSON.parse(data);
+ }
+ catch (err) {
+ cr_db={}
+ }
+ });
+ clearFlag("cr_stat")
+ }
+ fetchAllMetrics_cr();
+ }, 500)
+}
+
+// Monitor for CR db
+app.get("/mon3",function(req, res){
+
+ console.log("Creating CR DB page - timer: " + refreshCount_ecs)
+
+ if (refreshCount_cr < 0) {
+ refreshCount_cr=5
+ fetchAllMetrics_cr()
+ }
+ refreshCount_cr=5
+ var json_str=JSON.stringify(cr_db, null, 1)
+ var htmlStr = "<!DOCTYPE html>" +
+ "<html>" +
+ "<head>" +
+ "<meta http-equiv=\"refresh\" content=\"2\">"+ //2 sec auto refresh
+ "<title>CR DB dump</title>"+
+ "</head>" +
+ "<body style=\"white-space: pre-wrap\">" +
+ json_str +
+ "</body>" +
+ "</html>";
+ res.send(htmlStr);
+})
+
+// Monitor for ECS
+app.get("/mon2",function(req, res){
+
+ console.log("Creating enrichment metrics - timer: " + refreshCount_ecs)
+
+ if (refreshCount_ecs < 0) {
+ refreshCount_ecs=5
+ fetchAllMetrics_ecs()
+ }
+ refreshCount_ecs=5
+
+ var summary=req.query.summary
+
+ if (summary == undefined) {
+ return res.redirect('/mon2?summary=false');
+ }