xref: /openbmc/phosphor-rest-server/module/obmc/wsgi/examples/websockets/client_simple.html (revision 8cc1a034b264d8771648840f3bc57f07ccad72fa)
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