view service/collector/static/state.js @ 1451:71684fc9c692

new index page table Ignore-this: 7668675a04bd5cc03cf4e1799c54d4d1 darcs-hash:5b546637d01f1fa70134c09470007ed1251d708c
author drewp <drewp@bigasterisk.com>
date Wed, 25 Sep 2019 17:27:35 -0700
parents
children 25b418e2659e
line wrap: on
line source

import { LitElement, TemplateResult, html, css } from '/lib/lit-element/2.2.0/lit-element-custom.js';

class CollectorState extends LitElement {
    static get properties() {
        return {
            latestState: { type: Object }
        };
    }
    firstUpdated() {
        this.latestState = {graphClients: {}};
        this.refreshLoop();
    }

    refreshLoop() {
        setTimeout(() => {
            requestAnimationFrame(() => {
                this.refresh();
            });
        }, 5000);
    }

    refresh() {
        fetch('state')
            .then((response) => {
                return response.json();
            })
            .then((newState) => {
                this.latestState = newState;
                this.refreshLoop();
            });
    }

    static get styles() {
        return css`
        :host {
          display: inline-block;
          border: 2px solid gray;
          padding: 5px;
        }`;
    }

    render() {
        const sourcesTable = (clients) => {
            const clientRow = (client) => {
                const d = client.reconnectedPatchSource;
                return html`
                  <tr>
                    <td><a href="/rdf/browse/?graph=${d.url}">[browse]</a> <a href="${d.url}">${d.url}</a></td>
                    <td>${d.fullGraphReceived}</td>
                    <td>${d.patchesReceived}</td>
                    <td>${d.time.open}</td>
                    <td>${d.time.fullGraph}</td>
                    <td>${d.time.latestPatch}</td>
                  </tr>
                `;
            };

            return html`
              <table>
                <thead>
                  <tr>
                    <th>patch source</th>
                    <th>full graph recv</th>
                    <th>patches recv</th>
                    <th>time open</th>
                    <th>time fullGraph</th>
                    <th>time latest patch</th>
                  </tr>
                </thead>
                <tbody>
                  ${clients.map(clientRow)}
                </tbody>
              </table>
              `;
        };

        const handlersTable = (handlers) => {
            const handlerRow = (d) => {
                return html`
                  <tr>
                    <td>${d.created}</td>
                    <td>${d.ageHours}</td>
                    <td><a href="/rdf/browse/?graph=/sse_collector/graph/${d.streamId}">${d.streamId}</a></td>
                    <td>${d.foafAgent}</td>
                    <td>${d.userAgent}</td>
                  </tr>
                  `;
            };

            return html`
              <table>
                <thead>
                  <tr>
                    <th>created</th>
                    <th>age hours</th>
                    <th>stream</th>
                    <th>foaf agent</th>
                    <th>user agent</th>
                  </tr>
                </thead>
                <tbody>
                  ${handlers.map(handlerRow)}
                </tbody>
              </table>
              `;
        };

        if (!this.latestState) {
            return 'loading...';
        }
        const d = this.latestState.graphClients;
        return html`
          <div>
            <p>
              Graph: ${d.statements.len} statements
            </p>

            <p>
              Sources:
              ${sourcesTable(d.clients)}
            </p>

            <p>
              Listening clients:
              ${handlersTable(d.sseHandlers)}
            </p>
          </div>`;
    }
}
customElements.define('collector-state', CollectorState);