1fb3825ceSDeepak Kodihalli<!DOCTYPE html> 2fb3825ceSDeepak Kodihalli<html> 3fb3825ceSDeepak Kodihalli<head> 4fb3825ceSDeepak Kodihalli <script type="text/javascript"> 5f01d0ba3SGunnar Mills // This simple example subscribes, via websocket, to certain events occurring 6fb3825ceSDeepak Kodihalli // on the BMC. Specfically, it's interested in an d-bus events (object 7f01d0ba3SGunnar Mills // creations, property changes), occurring in the d-bus namespaces 8fb3825ceSDeepak Kodihalli // /xyz/openbmc_project/logging and /xyz/openbmc_project/sensors. It's also 9fb3825ceSDeepak Kodihalli // interested in the interfaces xyz.openbmc_project.Logging.Entry and 10fb3825ceSDeepak Kodihalli // xyz.openbmc_project.Sensor.Value being added, or property changes to 11fb3825ceSDeepak Kodihalli // these interfaces. 12fb3825ceSDeepak Kodihalli 13*8cc1a034SDeepak Kodihalli // Login to the BMC. 14*8cc1a034SDeepak Kodihalli var xhr = new XMLHttpRequest(); 15*8cc1a034SDeepak Kodihalli xhr.open("POST", "https://<BMC IP>/login", true); 16*8cc1a034SDeepak Kodihalli // Set 'withCredentials' to be able to send back login session cookie. 17*8cc1a034SDeepak Kodihalli xhr.withCredentials = true; 18*8cc1a034SDeepak Kodihalli xhr.setRequestHeader("Content-type", "application/json"); 19*8cc1a034SDeepak Kodihalli xhr.send(JSON.stringify({data: ["<username>", "<password>"]})); 20fb3825ceSDeepak Kodihalli 21fb3825ceSDeepak Kodihalli // Open a new secure websocket. The rest server on the BMC 22fb3825ceSDeepak Kodihalli // only supports the /subscribe route with websockets as of now. 23fb3825ceSDeepak Kodihalli var ws = new WebSocket("wss://<BMC IP>/subscribe"); 24fb3825ceSDeepak Kodihalli // Send in array of d-bus paths and interfaces of interest over the 25fb3825ceSDeepak Kodihalli // websocket. Either/both of them can be an empty array. The arrays 26fb3825ceSDeepak Kodihalli // need to be sent in a JSON dictionary. 27f01d0ba3SGunnar Mills // Client will be notified of events occurring on these paths and/or 28fb3825ceSDeepak Kodihalli // interfaces. 29fb3825ceSDeepak Kodihalli var data = JSON.stringify( 30fb3825ceSDeepak Kodihalli { 31fb3825ceSDeepak Kodihalli "paths": ["/xyz/openbmc_project/logging", 32fb3825ceSDeepak Kodihalli "/xyz/openbmc_project/sensors"], 33fb3825ceSDeepak Kodihalli "interfaces": ["xyz.openbmc_project.Logging.Entry", 34fb3825ceSDeepak Kodihalli "xyz.openbmc_project.Sensor.Value"] 35fb3825ceSDeepak Kodihalli }); 36fb3825ceSDeepak Kodihalli ws.onopen = function() { 37fb3825ceSDeepak Kodihalli // Send the JSON dictionary 38fb3825ceSDeepak Kodihalli ws.send(data); 39fb3825ceSDeepak Kodihalli }; 40fb3825ceSDeepak Kodihalli ws.onmessage = function (evt) { 41fb3825ceSDeepak Kodihalli // Received a message on the websocket, the response is a JSON dict. 42fb3825ceSDeepak Kodihalli var response = JSON.parse(evt.data); 43fb3825ceSDeepak Kodihalli for (var key in response) { 44fb3825ceSDeepak Kodihalli if (response.hasOwnProperty(key)) { 45fb3825ceSDeepak Kodihalli var value = response[key]; 46fb3825ceSDeepak Kodihalli if ("path" == key) { 47fb3825ceSDeepak Kodihalli // If the d-bus path is in the response, let's do a GET on 48fb3825ceSDeepak Kodihalli // that path. 49fb3825ceSDeepak Kodihalli var xhr = new XMLHttpRequest(); 50*8cc1a034SDeepak Kodihalli xhr.withCredentials = true; 51fb3825ceSDeepak Kodihalli var url = "https://<BMC IP>" + value; 52fb3825ceSDeepak Kodihalli xhr.open("GET", url, true); 53fb3825ceSDeepak Kodihalli xhr.setRequestHeader("Content-type", "application/json"); 54fb3825ceSDeepak Kodihalli xhr.send(); 55fb3825ceSDeepak Kodihalli } 56fb3825ceSDeepak Kodihalli } 57fb3825ceSDeepak Kodihalli } 58fb3825ceSDeepak Kodihalli }; 59fb3825ceSDeepak Kodihalli </script> 60fb3825ceSDeepak Kodihalli</head> 61fb3825ceSDeepak Kodihalli</html> 62