view assets/index.html.hbs @ 44:e7e91f288868

Add origin country chart
author Lewin Bormann <lbo@spheniscida.de>
date Tue, 19 Jul 2022 20:18:25 -0700
parents 2ecb25f3adfe
children c2436a591e56
line wrap: on
line source

<!DOCTYPE html>
<html>
    <head>
        <title>Analyrics</title>

        <meta name="robots" content="noindex">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <link rel="stylesheet" href="static/style.css" type="text/css" />
        <link rel="icon" type="image/png" href="/static/favicon.ico">

        <script src="static/chart.min.js" type="application/javascript"></script>

        <script type="application/javascript">
            let from = "{{ date.today }}";
            let duration = {{ date.duration }}; // in days

            function formatDate(d) {
                let m = d.getUTCMonth()+1; m = m < 10 ? "0"+m : m;
                let day = d.getUTCDate(); day = day < 10 ? "0"+day : day;

                return `${d.getUTCFullYear()}-${m}-${day}`;
            }
            function adjustURLDateParams(dateOffsetDays, durationMultiplier) {
                let usp = new URLSearchParams(window.location.search);
                let from_date = new Date(usp.get("from") || from);
                console.log("from date", from_date, " ", dateOffsetDays);
                let gduration = +usp.get("duration") || duration;

                let new_from_date = formatDate(new Date(from_date.getTime() + dateOffsetDays * 86400 * 1000));
                console.log(from_date, new_from_date);
                let new_duration = gduration * durationMultiplier;

                usp.set("from", new_from_date);
                usp.set("duration", new_duration.toFixed());
                window.location.search = usp.toString();
            };
        </script>

    </head>
    <body>

    <!-- Header -->
    <div id="header">
        <span id="logo">AnaLyrics</span>
{{#if loggedin}}
        <form id="logout" action="/logout" method="POST">
            <input type="submit" value="Log out" />
        </form>
        <div class="useraction"><b>{{username}}</b>.</div>
        <div class="userdomain">{{#if domain}}Domain: <b>{{domain}}</b>{{else}}<i>(all domains)</i>{{/if}}</div>
{{else}}
        <a class="useraction" href="login">Log in</a>
{{/if}}
    </div>
    {{#if flash}}<div id="flash"><span id="flashtext">{{flash}}<span></div>{{/if}}
    {{#if error}}<div id="error"><span id="errortext">{{error}}</span></div>{{/if}}

    {{#if loggedin}}

    <!-- Time navigation -->
    <div id="timebox">
    <div id="timeindicator">
        from {{ date.today }} ({{date.duration}} days)
    </div>
    <div id="timenav">
        <button onclick="adjustURLDateParams(-30, 1)">-30d</button>
        <button onclick="adjustURLDateParams(-7, 1)">-7d</button>
        <button onclick="adjustURLDateParams(-1, 1)">-1d</button>
        &nbsp;&nbsp;
        <button onclick="adjustURLDateParams(1, 1)">+1d</button>
        <button onclick="adjustURLDateParams(7, 1)">+7d</button>
        <button onclick="adjustURLDateParams(30, 1)">+30d</button>
    </div>
    </div>


    <!-- Plots -- only shown when logged in. -->
    <div class="plotrow row1">
        <div class="plotframe fullwidth">
        <div class="plottitle">Visits and Sessions</div>
            <canvas id="visitsAndSessions" height="100"></canvas>
        </div>
    </div>
    <div class="plotrow row2">
        <div class="plotframe halfwidth">Top paths<canvas id="topPaths"></canvas> </div>
        <div class="plotframe halfwidth">Requests per Session<canvas id="requestsBySession"></canvas> </div>
    </div>
    <div class="plotrow row3">
        <div class="plotframe halfwidth">Sessions by country<canvas id="sessionsByCountry" height="30"></canvas> </div>
        <div class="plotframe halfwidth">Requests per Session<canvas id="BLAH"></canvas> </div>
    </div>

    <script>
        let plots = {"visitsAndSessions": {{{ chartconfig.visitsAndSessions }}},
                     "topPaths": {{{ chartconfig.topPaths }}},
                     "requestsBySession": {{{ chartconfig.requestsBySession }}},
                     "sessionsByCountry": {{{ chartconfig.sessionsByCountry }}} };

        Object.keys(plots).forEach((cv) => {
                    if (plots[cv] == undefined) {
                                return;
                            }
                    const ctx = document.getElementById(cv).getContext('2d');
                    const myChart = new Chart(ctx, plots[cv]);
                });
    </script>
    {{/if}}

    </body>
</html>