1
0
mirror of https://github.com/muety/wakapi.git synced 2023-08-10 21:12:56 +03:00

Properly redraw charts.

Add pre-defined interval for today.
Fix week interval.
This commit is contained in:
Ferdinand Muetsch 2019-05-23 08:14:32 +02:00
parent e23e7520d0
commit 899b2fff64
3 changed files with 25 additions and 8 deletions

View File

@ -13,6 +13,7 @@ import (
) )
const ( const (
IntervalToday string = "today"
IntervalLastDay string = "day" IntervalLastDay string = "day"
IntervalLastWeek string = "week" IntervalLastWeek string = "week"
IntervalLastMonth string = "month" IntervalLastMonth string = "month"
@ -44,10 +45,12 @@ func (h *SummaryHandler) Get(w http.ResponseWriter, r *http.Request) {
user := r.Context().Value(models.UserKey).(*models.User) user := r.Context().Value(models.UserKey).(*models.User)
params := r.URL.Query() params := r.URL.Query()
interval := params.Get("interval")
from, err := utils.ParseDate(params.Get("from")) from, err := utils.ParseDate(params.Get("from"))
if err != nil { if err != nil {
interval := params.Get("interval")
switch interval { switch interval {
case IntervalToday:
from = utils.StartOfDay()
case IntervalLastDay: case IntervalLastDay:
from = utils.StartOfDay().Add(-24 * time.Hour) from = utils.StartOfDay().Add(-24 * time.Hour)
case IntervalLastWeek: case IntervalLastWeek:
@ -63,7 +66,7 @@ func (h *SummaryHandler) Get(w http.ResponseWriter, r *http.Request) {
} }
} }
live := params.Get("live") != "" && params.Get("live") != "false" live := (params.Get("live") != "" && params.Get("live") != "false") || interval == IntervalToday
to := utils.StartOfDay() to := utils.StartOfDay()
if live { if live {
to = time.Now() to = time.Now()

View File

@ -56,7 +56,8 @@
<input type="text" class="input" id="user-input" name="user" placeholder="Enter Username"> <input type="text" class="input" id="user-input" name="user" placeholder="Enter Username">
<label for="pw">API Key: </label> <label for="pw">API Key: </label>
<input type="password" class="input" id="password-input" name="pw" placeholder="Enter Password"> <input type="password" class="input" id="password-input" name="pw" placeholder="Enter Password">
<button onclick="load('day', true)">Day (live)</button> <button onclick="load('today', true)">Today (live)</button>
<button onclick="load('day', false)">Day</button>
<button onclick="load('week', false)">Week</button> <button onclick="load('week', false)">Week</button>
<button onclick="load('month', false)">Month</button> <button onclick="load('month', false)">Month</button>
<button onclick="load('year', false)">Year</button> <button onclick="load('year', false)">Year</button>
@ -85,6 +86,13 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.bundle.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.bundle.min.js"></script>
<script> <script>
const projectsCanvas = document.getElementById("chart-projects")
const osCanvas = document.getElementById("chart-os")
const editorsCanvas = document.getElementById("chart-editor")
const languagesCanvas = document.getElementById("chart-language")
let charts = []
String.prototype.toHHMMSS = function () { String.prototype.toHHMMSS = function () {
var sec_num = parseInt(this, 10); var sec_num = parseInt(this, 10);
var hours = Math.floor(sec_num / 3600); var hours = Math.floor(sec_num / 3600);
@ -101,6 +109,7 @@
let user = document.getElementById('user-input').value let user = document.getElementById('user-input').value
let password = document.getElementById('password-input').value let password = document.getElementById('password-input').value
let hashed = btoa(`${user}:${password}`) let hashed = btoa(`${user}:${password}`)
fetch(`${window.location.href}/api/summary?interval=${interval}&live=${live}`, { fetch(`${window.location.href}/api/summary?interval=${interval}&live=${live}`, {
method: 'GET', method: 'GET',
headers: { headers: {
@ -139,7 +148,9 @@
} }
} }
let projectChart = new Chart(document.getElementById("chart-projects").getContext('2d'), { charts.forEach(c => c.destroy())
let projectChart = new Chart(projectsCanvas.getContext('2d'), {
type: 'horizontalBar', type: 'horizontalBar',
data: { data: {
datasets: data.projects datasets: data.projects
@ -160,7 +171,7 @@
} }
}); });
let osChart = new Chart(document.getElementById("chart-os").getContext('2d'), { let osChart = new Chart(osCanvas.getContext('2d'), {
type: 'pie', type: 'pie',
data: { data: {
datasets: [{ datasets: [{
@ -175,7 +186,7 @@
} }
}); });
let editorChart = new Chart(document.getElementById("chart-editor").getContext('2d'), { let editorChart = new Chart(editorsCanvas.getContext('2d'), {
type: 'pie', type: 'pie',
data: { data: {
datasets: [{ datasets: [{
@ -190,7 +201,7 @@
} }
}); });
let languageChart = new Chart(document.getElementById("chart-language").getContext('2d'), { let languageChart = new Chart(languagesCanvas.getContext('2d'), {
type: 'pie', type: 'pie',
data: { data: {
datasets: [{ datasets: [{
@ -209,6 +220,8 @@
getTotal(data.operating_systems) getTotal(data.operating_systems)
document.getElementById('grid-container').style.visibility = 'visible'; document.getElementById('grid-container').style.visibility = 'visible';
charts = [projectChart, osChart, editorChart, languageChart]
} }
function getRandomColor(seed) { function getRandomColor(seed) {

View File

@ -9,7 +9,8 @@ func StartOfDay() time.Time {
func StartOfWeek() time.Time { func StartOfWeek() time.Time {
ref := time.Now() ref := time.Now()
return firstDayOfISOWeek(ref.Year(), ref.Day(), ref.Location()) year, week := ref.ISOWeek()
return firstDayOfISOWeek(year, week, ref.Location())
} }
func StartOfMonth() time.Time { func StartOfMonth() time.Time {