var monitor_serviceDS = openConsole.RestDataSource.create({ ID:"monitor_serviceDS", fields:[ {name:"itemId", title:"ID", primaryKey:true}, {name:"itemName", title:"Name"}, {name:"parentId", title:"Parent", foreignKey:"itemId"} ], dataURL:"/update_services" }); var monitor_serviceListPane = openConsole.TreeGrid.create({ ID: "monitor_serviceTree", height: "65%", dataSource: "monitor_serviceDS", nodeIcon: "/public/images/service_topic.png", folderIcon: "/public/images/service.png", emptyMessage: "No services found on fabric.", fields: [ {name: "itemName", title: "Services"} ], rowDoubleClick: function (record) { if(record.parentId === null) { var w = openConsole.Window.create({ title: "Service Details", items: [ openConsole.DetailViewer.create({ data:record, fields:[ {name:"itemId", title:"ID", primaryKey:true}, {name:"serviceType", title:"Service Type", type: "string"}, {name:"brokerGuid", title:"Broker ID", type: "string"}, {name:"clientGuid", title:"Client ID", type: "string"}, {name:"managed", title:"Managed", type: "string"}, {name:"registrationTime", title:"Registration Time", type: "string"}, {name:"ttlMins", title:"TTL(min)", type: "string"}, {name:"requestChannels", title:"Request Topics", type: "string"}, {name:"unauthorizedTopics", title:"Unauthorized Topics", type: "string"}, {name:"certificates", title:"Certificates", type: "string"}, {name:"metaData", title:"Metadata", type: "string"} ], formatCellValue: function formatCellValue(value, record, field) { if(value != null) { if(field.name === "requestChannels" || field.name === "certificates") { if(Array.isArray(value)) return value.join(",
"); } else if(field.name === "unauthorizedTopics") { return "" + value.join(",
") + "
"; } else if(field.name === "registrationTime") { var registrationDate = new Date(value * 1000); return registrationDate.toLocaleString(); } } return value; } }) ] }); openConsole.Window.show(w); return false; } }, rowClick: function (record) { if(record.parentId != null) { monitor_sendMessageForm.getField('type').setValue('Request'); monitor_sendMessageForm.getField('topic').setValue(record.itemName); monitor_sendMessageForm.getField('payload').setValue(''); } return false; } /* getCellCSSText : function( record, rowNum, colNum ) { style = ""; if( record.received != null ) { var delta = new Date().getTime() - record.received.getTime(); var blinkPeriod = 2000; if (delta < blinkPeriod) { var grid = this; isc.Timer.setTimeout(function () { grid.refreshCell( rowNum, colNum ); }, 100); var changeValue = record.changeValue; var ratio = (blinkPeriod-delta)/blinkPeriod; var red = 255 - Math.round(119*ratio); var green = 255 - Math.round(45*ratio); var blue = 255 - Math.round(0*ratio); style += ";background-color:#"+red.toString(16)+green.toString(16)+blue.toString(16); } else { record.received = null; } } return style; } */ }); openConsole.RestDataSource.create({ ID:"monitor_subscriptionDS", fields:[ {name:"topic", title:"Topic", primaryKey:true} ], operationBindings : [ {operationType:"fetch", dataProtocol:"getParams"}, {operationType:"add", dataProtocol:"getParams"}, {operationType:"remove", dataProtocol:"getParams"} ], dataURL:"/subscriptions", transformRequest : function (dsRequest) { dsRequest.data.clientId = console_clientId; return this.Super("transformRequest", arguments); } }); var monitor_subscriptionList = openConsole.ListGrid.create({ ID:"monitor_subscriptionList", dataSource: "monitor_subscriptionDS", emptyMessage: "No subscriptions have been added.", showHeader: false, canRemoveRecords: true, editEvent: "none", modalEditing: true, fields:[ { name:"topic", title:"Subscriptions", required: true, } ] }); var monitor_messagesDS = openConsole.RestDataSource.create({ ID:"monitor_messagesDS", fields:[ { name:"topic", title:"Topic" }, { name:"id", title:"ID", type: "string", primaryKey: true }, { name:"type", title:"Type", type: "string" }, { name:"payload", title:"Payload", type: "string" }, { name:"sourceBroker", title:"Source Broker", type: "string" }, { name:"sourceClient", title:"Source Client", type: "string" }, { name:"otherFields", title:"Other Fields", type: "string" }, { name:"received", title:"Date", type: "datetime" }, { name:"originalPayload", title:"Payload", type: "string" } ], dataURL:"/messages", transformRequest : function (dsRequest) { if(dsRequest.data) dsRequest.data.clientId = console_clientId; return this.Super("transformRequest", arguments); } }); var monitor_messagesGrid = openConsole.ListGrid.create({ ID: "monitor_messagesGrid", dataSource: "monitor_messagesDS", canRemoveRecords: false, sortField: 3, emptyMessage: "No messages have been received.", sortDirection: "descending", canHover: true, fields:[ { name:"type", title:"Type", width: 100 }, { name:"topic", title:"Topic" }, { name:"originalPayload", title:"Payload", type: "string" }, { name:"received", title:"Date", type: "datetime", width: 150, format: "MMM d, yyyy HH:mm:ss" } ], getCellCSSText : function( record, rowNum, colNum ) { var style = ""; if( record.type == "Error Response" ) { style += "color:red"; } if( record.received != null) { var delta = new Date().getTime() - record.received.getTime(); var blinkPeriod = 2000; if (delta < blinkPeriod) { var grid = this; isc.Timer.setTimeout(function () { grid.refreshCell( rowNum, colNum ); }, 100); var changeValue = record.changeValue; var ratio = (blinkPeriod-delta)/blinkPeriod; var red = 255 - Math.round(119*ratio); var green = 255 - Math.round(45*ratio); var blue = 255 - Math.round(0*ratio); style += ";background-color:#"+red.toString(16)+green.toString(16)+blue.toString(16); } } return style; }, getValueIcon : function(field, value, record) { if( field.name == "type" ) { if( record.type == "Error Response" ) { return "/public/images/error_message.png"; } else if( record.type == "Response" ) { return "/public/images/response.png"; } else if( record.type == "Event" ) { return "/public/images/event.png"; } } return ""; }, cellHoverHTML : function(record, rowNum, colNum) { var field = this.fields[colNum]; return (field.name == "originalPayload" ? record["payload"] : record[field.name]); }, cellDoubleClick: function (record) { var w = openConsole.Window.create({ title: "Message Details", items: [ openConsole.DetailViewer.create({ data:record, fields:[ { name:"id", title:"ID", type: "string", primaryKey: true }, { name:"topic", title:"Topic" }, { name:"type", title:"Type", type: "string" }, { name:"payload", title:"Payload", type: "string" }, { name:"sourceBroker", title:"Source Broker", type: "string" }, { name:"sourceClient", title:"Source Client", type: "string" }, { name:"otherFields", title:"Other Fields", type: "string" }, { name:"received", title:"Date", type: "datetime" } ] }) ] }); openConsole.Window.show(w); } }); var monitor_hiddenRecords = []; function monitor_filterMessage(messages) { var filters = [] if( monitor_filterEvents.isSelected() ) filters.add('Event'); if( monitor_filterResponses.isSelected() ) { filters.add('Response'); } if( monitor_filterErrors.isSelected() ) { filters.add('Error Response'); } for( var i = messages.length - 1; i >= 0; i-- ) { var rec = messages[i]; if( filters.indexOf( rec['type'] ) == -1 ) { monitor_hiddenRecords.add( rec ); messages.remove( rec ); } } for( var i = monitor_hiddenRecords.length - 1; i >= 0; i-- ) { var rec = monitor_hiddenRecords[i]; if( filters.indexOf( rec['type'] ) != -1 ) { messages.add( rec ); monitor_hiddenRecords.remove( rec ); } } return messages; } function monitor_updateMessageFilters() { var gridData = monitor_messagesGrid.getOriginalData(); var filteredData = monitor_filterMessage( gridData ); monitor_messagesGrid.setData( gridData ); monitor_messagesGrid.resort(); } var monitor_sendMessageForm = openConsole.DynamicForm.create({ ID: "monitor_sendMessageForm", fields: [ { name: "type", title: "Type", type: "select", required: true, value: "Event", valueMap: ["Request", "Event"], changed: "monitor_serviceListPane.setSelectedState(null)" }, { name: "topic", type: "text", width: 400, title: "Topic", required: true, changed: "monitor_serviceListPane.setSelectedState(null)" }, { name: "payload", type: "textArea", width: 400, height: 150, wrap: "OFF", title: "Payload" }, { name: "clientId", type: "hidden", value: console_clientId } ], doSubmit : function () { messageStatusResponse.setContents(""); openConsole.RPCManager.sendRequest({ data: JSON.stringify(this.getValues()), callback: 'messageStatusResponse.setContents(data)', actionURL: "/send_message" }) } }); openConsole.Form.VLayout.create({ ID: "monitor_sendMessageFormLayout", members: [ "monitor_sendMessageForm", openConsole.Form.HLayout.create({ members: [ openConsole.IButton.create({ title: "Send Message", width: 150, click : function () { monitor_sendMessageForm.submit(); } }), openConsole.Form.StatusHTMLFlow.create({ ID: "messageStatusResponse" }) ] }) ] }); monitor_filterEvents = openConsole.CheckboxToolStripButton.create({ ID: "monitor_filterEvents", selected: true, title: "Events", icon: "/public/images/event.png", click: "monitor_updateMessageFilters()" }); monitor_filterResponses = openConsole.CheckboxToolStripButton.create({ ID: "monitor_filterResponses", selected: true, title: "Responses", icon: "/public/images/response.png", click: "monitor_updateMessageFilters()" }); monitor_filterErrors = openConsole.CheckboxToolStripButton.create({ ID: "monitor_filterErrors", selected: true, title: "Errors", icon: "/public/images/error_message.png", click: "monitor_updateMessageFilters()" }); openConsole.HLayout.create({ ID: "monitor_content_layout", members: [ openConsole.SectionStack.create({ width: 325, sections: [ {title: "Services", expanded: true, showHeader: false, items: [ "monitor_serviceTree" ]}, {title: "Subscriptions", expanded: true, items: [ openConsole.ToolStrip.create({ members: [ openConsole.ToolStripButton.create({ icon: "/public/images/add.png", title: "Add", click: "monitor_subscriptionList.startEditingNew()" }), isc.ToolStripSpacer.create(), ] }), "monitor_subscriptionList" ]} ] }), openConsole.SectionStack.create({ showResizeBar: false, sections: [ {title: "Send Message", expanded: true, items: [ isc.VLayout.create({ height: "300", members: [ "monitor_sendMessageFormLayout" ] }) ]}, {title: "Received Messages", expanded: true, items: [ openConsole.ToolStrip.create({ members: [ openConsole.Label.create({ width: 1, wrap: false, contents: "Filter by Type:" }), "monitor_filterEvents", "monitor_filterResponses", "monitor_filterErrors", isc.ToolStripSpacer.create(), ] }), "monitor_messagesGrid" ]} ] }) ] }); openConsole.ModuleWindow.create({ ID:"monitor_layout", title: "Fabric Monitor", items: [ "monitor_content_layout" ] }); monitor_subscriptionList.fetchData(); function monitor_fetch_new_messages() { monitor_messagesDS.fetchData( { clientId: console_clientId }, function( dsResponse, data ) { var gridData = monitor_messagesGrid.getOriginalData(); for( var i = 0; i < data.length; i++ ) { var rec = data[i]; rec.received = new Date(); gridData.add( rec ) } monitor_messagesGrid.setData( monitor_filterMessage(gridData) ); monitor_messagesGrid.resort(); }, { showPrompt: false } ); } monitor_serviceListPane.fetchData(); function monitor_fetch_service_data() { monitor_serviceDS.fetchData( null, function( dsResponse, data ) { var openState = monitor_serviceListPane.getOpenState(); var selectedPaths = monitor_serviceListPane.getSelectedState(); var gridData = monitor_serviceListPane.getData(); gridData.reportCollisions = false; for( var i = 0; i < data.length; i++ ) { var rec = data[i]; if( typeof rec.parentId === "undefined" ) { rec.received = new Date(); } } Object.keys(gridData.nodeIndex).forEach(function(key) { if( !gridData.nodeIndex.hasOwnProperty(key) ) return; var found = false; for( var i = 0; i < data.length; i++ ) { if( data[i].itemId === gridData.nodeIndex[key].itemId ) { data[i].received = null; found = true; break; } } if( !found ) { gridData.remove(gridData.nodeIndex[key]); } }); gridData.linkNodes(data); monitor_serviceListPane.setOpenState(openState); monitor_serviceListPane.setSelectedState(selectedPaths); monitor_serviceListPane.resort(); }, { showPrompt: false } ); } monitor_fetch_service_data(); monitor_fetch_new_messages(); function monitorWSHandler(message) { if(message.includes("messagesPending")) monitor_fetch_new_messages(); else if(message.includes("serviceUpdates")) monitor_fetch_service_data(); } $(document).ready(function() { ws.addHandler(monitorWSHandler); }); Offline.goOnline();