date range - not done yet...
This commit is contained in:
1 parent
2019667990
commit
d742d77857
6 files changed
+20294
-9
No files matched your search
@@ -54,6 +54,8 @@ func serveTemplate(w http.ResponseWriter, r *http.Request) {
|
||||
var datetimestring = t.Format("20060102150405")
|
||||
var scales = getMyDevs(userName)
|
||||
var last_metrics []OneMetric
|
||||
|
||||
query_values := r.URL.Query()
|
||||
|
||||
if (r.URL.Path == "/scales.html") {
|
||||
// wir holen noch die letzten Metriken
|
||||
@@ -68,11 +70,13 @@ func serveTemplate(w http.ResponseWriter, r *http.Request) {
|
||||
DateTimeString string
|
||||
Scales []string
|
||||
LastMetrics []OneMetric
|
||||
QueryValues map[string][]string
|
||||
} {
|
||||
userName,
|
||||
datetimestring,
|
||||
scales,
|
||||
last_metrics,
|
||||
query_values,
|
||||
}
|
||||
|
||||
if err := tmpl.ExecuteTemplate(w, "layout", &data); err != nil {
|
||||
|
||||
+34
-1
@@ -24,6 +24,7 @@ type OneMetric struct {
|
||||
BatteryPercent string
|
||||
}
|
||||
|
||||
|
||||
// metrics handler
|
||||
|
||||
func metricsHandler(response http.ResponseWriter, request *http.Request) {
|
||||
@@ -56,8 +57,40 @@ func metricsHandler(response http.ResponseWriter, request *http.Request) {
|
||||
|
||||
log.Println("Url Param 'deveui' is: " + string(mydeveui))
|
||||
|
||||
// Format of start and stop: YYYY-MM-DDTHH:MI:SSZ
|
||||
|
||||
stop, ok := request.URL.Query()["stop"]
|
||||
var mystop string
|
||||
if !ok || len(stop[0]) < 1 {
|
||||
log.Println("Url Param 'stop' is missing, set it to now")
|
||||
mystop = time.Now().Format("2006-01-02T15:04:05Z")
|
||||
}
|
||||
|
||||
if ok {
|
||||
mystop = stop[0]
|
||||
}
|
||||
|
||||
layout := "2006-01-02T15:04:05Z"
|
||||
stopDate, err := time.Parse(layout, mystop)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
start, ok := request.URL.Query()["start"]
|
||||
var mystart string
|
||||
if !ok || len(start[0]) < 1 {
|
||||
log.Println("Url Param 'start' is missing, set it to stop minus one day")
|
||||
t := stopDate.AddDate(0,0,-1)
|
||||
mystart = t.Format("2006-01-02T15:04:05Z")
|
||||
}
|
||||
|
||||
if ok {
|
||||
mystart = start[0]
|
||||
}
|
||||
|
||||
url := "http://localhost:9999/api/v2/query?org=beieliorg"
|
||||
data := []byte(fmt.Sprintf(`from(bucket:"beielibucket") |> range(start:-24h) |> filter(fn: (r) => r._field == "%s") |> filter(fn: (r) => r.deveui == "%s")`,property[0],mydeveui))
|
||||
data := []byte(fmt.Sprintf(`from(bucket:"beielibucket") |> range(start: %s, stop: %s) |> filter(fn: (r) => r._field == "%s") |> filter(fn: (r) => r.deveui == "%s")`,mystart,mystop,property[0],mydeveui))
|
||||
|
||||
req, err := http.NewRequest("POST", url, bytes.NewBuffer(data))
|
||||
if err != nil {
|
||||
|
||||
+70
-8
@@ -1,9 +1,15 @@
|
||||
{{define "body_content"}}
|
||||
{{ if ne .UserName "" }}
|
||||
|
||||
<div class="has-text-centered">
|
||||
<a id="back-button" name="back-button" type="button" class="form-button button is-primary is-centered" href="#">Zurück</a>
|
||||
<br />
|
||||
{{ index (index .QueryValues "deveui") 0 }}
|
||||
|
||||
<link href="static/bulma-calendar/css/bulma-calendar.min.css" rel="stylesheet">
|
||||
<script src="static/bulma-calendar/js/bulma-calendar.min.js"></script>
|
||||
|
||||
<div class="columns">
|
||||
<div class="column is-one-third">
|
||||
<input type="date" id="daterangepicker" data-type="date" data-display-mode="dialog" data-lang="de" data-is-range="true" data-close-on-select="true" data-date-format="DD.MM.YYYY">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
@@ -13,13 +19,69 @@
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
console.log('Initialize Bulma Calendar');
|
||||
// Initialize all input of type date
|
||||
var calendars = bulmaCalendar.attach('[type="date"]', {});
|
||||
|
||||
// To access to bulmaCalendar instance of an element
|
||||
var element = document.querySelector('#daterangepicker');
|
||||
if (element) {
|
||||
// bulmaCalendar instance is available as element.bulmaCalendar
|
||||
element.bulmaCalendar.on('select', function(datepicker) {
|
||||
console.log(datepicker.data.value());
|
||||
s = datepicker.data.value();
|
||||
// 04.08.2019 - 08.08.2019
|
||||
start = s.substring(6,10).concat("-",s.substring(3,5),"-",s.substring(0,2),"T00:00:00Z");
|
||||
end = s.substring(19,23).concat("-",s.substring(16,18),"-",s.substring(13,15),"T00:00:00Z");
|
||||
console.log("Reload Graph start:"+start);
|
||||
console.log("Reload Graph end:"+end);
|
||||
reloadGraph(start,end);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var chart;
|
||||
|
||||
function reloadGraph(start, stop) {
|
||||
range = ""
|
||||
range = range + "&start=" + start;
|
||||
range = range + "&stop=" + stop;
|
||||
$.getJSON('https://mini-beieli.ch/metrics?' + sPageURL + range, function(mydata) {
|
||||
chart.updateSeries([{
|
||||
data: mydata
|
||||
}])
|
||||
});
|
||||
}
|
||||
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
var deveui = urlParams.get('deveui');
|
||||
if (deveui != null) {
|
||||
document.getElementById("back-button").href= '/scales.html#' + deveui;
|
||||
var start = urlParams.get('start');
|
||||
var stop = urlParams.get('stop');
|
||||
|
||||
range="";
|
||||
if (start == null) {
|
||||
var d = new Date();
|
||||
d.setHours(0,0,0,0);
|
||||
d.setSeconds(0,0);
|
||||
var start = d.toISOString().substring(0,19)+'Z';
|
||||
range = range + "&start=" + start;
|
||||
}
|
||||
|
||||
if (stop == null) {
|
||||
var d = new Date();
|
||||
var stop = d.toISOString().substring(0,19)+'Z';
|
||||
range = range + "&stop=" + stop;
|
||||
}
|
||||
|
||||
console.log("Start: "+start);
|
||||
console.log("Stop: "+stop);
|
||||
|
||||
var sPageURL = window.location.search.substring(1);
|
||||
var label;
|
||||
if (sPageURL.search("property=t") > -1) {
|
||||
@@ -46,7 +108,7 @@ if (sPageURL.search("property=t") > -1) {
|
||||
label = 'Unknown';
|
||||
}
|
||||
|
||||
$.getJSON('https://mini-beieli.ch/metrics?' + sPageURL, function(mydata) {
|
||||
$.getJSON('https://mini-beieli.ch/metrics?' + sPageURL + range, function(mydata) {
|
||||
var options = {
|
||||
chart: {
|
||||
type: 'line',
|
||||
@@ -75,8 +137,8 @@ $.getJSON('https://mini-beieli.ch/metrics?' + sPageURL, function(mydata) {
|
||||
}]
|
||||
}
|
||||
|
||||
var chart = new ApexCharts(document.querySelector("#chart"), options);
|
||||
|
||||
chart = new ApexCharts(document.querySelector("#chart"), options);
|
||||
|
||||
chart.render();
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
@-webkit-keyframes spinAround{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spinAround{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes decrement-prev{from{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes decrement-prev{from{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes decrement-next{from{opacity:0;-webkit-transform:translateY(-50px);transform:translateY(-50px)}}@keyframes decrement-next{from{opacity:0;-webkit-transform:translateY(-50px);transform:translateY(-50px)}}@-webkit-keyframes increment-prev{from{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes increment-prev{from{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes increment-next{from{opacity:0;-webkit-transform:translateY(50px);transform:translateY(50px)}}@keyframes increment-next{from{opacity:0;-webkit-transform:translateY(50px);transform:translateY(50px)}}.datetimepicker{transition:width .8s cubic-bezier(1,-.55,.2,1.37),opacity .2s ease,visibility .2s ease,margin .2s ease;display:none;background:#fff;border-radius:2px;max-width:320px;z-index:1;box-shadow:0 2px 3px rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.1)}.datetimepicker.is-active{display:block}.datetimepicker .datetimepicker-header{display:flex;flex-direction:column;flex:1;text-align:left;position:relative;padding:.5rem 1rem;font-size:1rem;box-shadow:0 .2rem .2rem -.2rem rgba(10,10,10,.1)}.datetimepicker .datetimepicker-header.is-date-only{flex-direction:row}.datetimepicker .datetimepicker-header.is-date-only .datetimepicker-selection-end .datetimepicker-selection-wrapper{justify-content:flex-end!important}.datetimepicker .datetimepicker-header .datetimepicker-selection-details{flex:1}.datetimepicker .datetimepicker-header .datetimepicker-selection-from,.datetimepicker .datetimepicker-header .datetimepicker-selection-to{font-size:.65rem;color:#b5b5b5;text-transform:uppercase;padding:0}.datetimepicker .datetimepicker-header .datetimepicker-selection-end,.datetimepicker .datetimepicker-header .datetimepicker-selection-start{padding:0;display:flex;flex:1;flex-direction:row}.datetimepicker .datetimepicker-header .datetimepicker-selection-end .datetimepicker-selection-wrapper,.datetimepicker .datetimepicker-header .datetimepicker-selection-start .datetimepicker-selection-wrapper{flex-direction:row;display:flex;min-height:2.5rem;flex:1 1 2rem}.datetimepicker .datetimepicker-header .datetimepicker-selection-end .datetimepicker-selection-day,.datetimepicker .datetimepicker-header .datetimepicker-selection-start .datetimepicker-selection-day{flex:0;text-transform:capitalize;font-size:2rem;line-height:2.5rem;margin-right:.5rem;color:#00d1b2;font-weight:100}.datetimepicker .datetimepicker-header .datetimepicker-selection-end .datetimepicker-selection-date,.datetimepicker .datetimepicker-header .datetimepicker-selection-start .datetimepicker-selection-date{font-size:.85rem;line-height:.85rem;justify-content:center;display:flex;flex-direction:column;font-weight:300}.datetimepicker .datetimepicker-header .datetimepicker-selection-end .datetimepicker-selection-month,.datetimepicker .datetimepicker-header .datetimepicker-selection-start .datetimepicker-selection-month{color:#4a4a4a;text-transform:capitalize}.datetimepicker .datetimepicker-header .datetimepicker-selection-end .datetimepicker-selection-weekday,.datetimepicker .datetimepicker-header .datetimepicker-selection-start .datetimepicker-selection-weekday{font-size:.75em;color:#b6b4b6;text-transform:capitalize;text-align:left}.datetimepicker .datetimepicker-header .datetimepicker-selection-end .datetimepicker-selection-hour,.datetimepicker .datetimepicker-header .datetimepicker-selection-start .datetimepicker-selection-hour{font-size:1.5rem;font-weight:100;flex:1;justify-content:center;align-items:center;text-align:center}.datetimepicker .datetimepicker-header .datetimepicker-selection-end,.datetimepicker .datetimepicker-header .datetimepicker-selection-start{align-items:center}.datetimepicker .datetimepicker-header .datetimepicker-selection-end.is-centered .datetimepicker-selection-wrapper,.datetimepicker .datetimepicker-header .datetimepicker-selection-start.is-centered .datetimepicker-selection-wrapper{justify-content:center;align-items:center}.datetimepicker .datetimepicker-header .datetimepicker-selection-time{flex:1;display:flex}.datetimepicker .datetimepicker-header .datetimepicker-selection-time .datetimepicker-selection-time-icon{display:flex;justify-content:center;align-items:center;padding:0 1rem;color:#b5b5b5}.datetimepicker .datepicker-nav{background:#00d1b2;color:#fff;display:flex;align-items:center;justify-content:space-between;padding:.5em;flex-direction:row}.datetimepicker .datepicker-nav .datepicker-nav-month-year{flex-direction:row;displayLine truncated
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1 @@
|
||||
!function webpackUniversalModuleDefinition(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.bulmaCalendar=t():e.bulmaCalendar=t()}("undefined"!=typeof self?self:this,function(){return function(n){var o={};function __webpack_require__(e){if(o[e])return o[e].exports;var t=o[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,__webpack_require__),t.l=!0,t.exports}return __webpack_require__.m=n,__webpack_require__.c=o,__webpack_require__.d=function(e,t,n){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},__webpack_require__.n=function(e){var t=e&&e.__esModule?function getDefault(){return e.default}:function getModuleExports(){return e};return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=232)}([function(e,t,n){var d=n(120),l=36e5,f=6e4,h=/[T ]/,m=/:/,p=/^(\d{2})$/,v=[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],g=/^(\d{4})/,b=[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],_=/^-(\d{2})$/,M=/^-?(\d{3})$/,k=/^-?(\d{2})-?(\d{2})$/,y=/^-?W(\d{2})$/,x=/^-?W(\d{2})-?(\d{1})$/,D=/^(\d{2}([.,]\d*)?)$/,w=/^(\d{2}):?(\d{2}([.,]\d*)?)$/,j=/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,T=/([Z+-].*)$/,S=/^(Z)$/,P=/^([+-])(\d{2})$/,H=/^([+-])(\d{2}):?(\d{2})$/;function dayOfISOYear(e,t,n){t=t||0,n=n||0;var o=new Date(0);o.setUTCFullYear(e,0,4);var i=7*t+n+1-(o.getUTCDay()||7);return o.setUTCDate(o.getUTCDate()+i),o}e.exports=function parse(e,t){if(d(e))return new Date(e.getTime());if("string"!=typeof e)return new Date(e);var n=(t||{}).additionalDigits;n=null==n?2:Number(n);var o=function splitDateString(e){var t,n={},o=e.split(h);if(t=m.test(o[0])?(n.date=null,o[0]):(n.date=o[0],o[1])){var i=T.exec(t);i?(n.time=t.replace(i[1],""),n.timezone=i[1]):n.time=t}return n}(e),i=function parseYear(e,t){var n,o=v[t],i=b[t];if(n=g.exec(e)||i.exec(e)){var r=n[1];return{year:parseInt(r,10),restDateString:e.slice(r.length)}}if(n=p.exec(e)||o.exec(e)){var a=n[1];return{year:100*parseInt(a,10),restDateString:e.slice(a.length)}}return{year:null}}(o.date,n),r=i.year,a=function parseDate(e,t){if(null===t)return null;var n,o,i,r;if(0===e.length)return(o=new Date(0)).setUTCFullYear(t),o;if(n=_.exec(e))return o=new Date(0),i=parseInt(n[1],10)-1,o.setUTCFullYear(t,i),o;if(n=M.exec(e)){o=new Date(0);var a=parseInt(n[1],10);return o.setUTCFullYear(t,0,a),o}if(n=k.exec(e)){o=new Date(0),i=parseInt(n[1],10)-1;var s=parseInt(n[2],10);return o.setUTCFullYear(t,i,s),o}if(n=y.exec(e))return r=parseInt(n[1],10)-1,dayOfISOYear(t,r);if(n=x.exec(e)){r=parseInt(n[1],10)-1;var u=parseInt(n[2],10)-1;return dayOfISOYear(t,r,u)}return null}(i.restDateString,r);if(a){var s,u=a.getTime(),c=0;return o.time&&(c=function parseTime(e){var t,n,o;if(t=D.exec(e))return(n=parseFloat(t[1].replace(",",".")))%24*l;if(t=w.exec(e))return n=parseInt(t[1],10),o=parseFloat(t[2].replace(",",".")),n%24*l+o*f;if(t=j.exec(e)){n=parseInt(t[1],10),o=parseInt(t[2],10);var i=parseFloat(t[3].replace(",","."));return n%24*l+o*f+1e3*i}return null}(o.time)),s=o.timezone?function parseTimezone(e){var t,n;return(t=S.exec(e))?0:(t=P.exec(e))?(n=60*parseInt(t[2],10),"+"===t[1]?-n:n):(t=H.exec(e))?(n=60*parseInt(t[2],10)+parseInt(t[3],10),"+"===t[1]?-n:n):0}(o.timezone):(s=new Date(u+c).getTimezoneOffset(),new Date(u+c+s*f).getTimezoneOffset()),new Date(u+c+s*f)}return new Date(e)}},function(e,n,o){var i;!function(t){"use strict";var b={},_="en",M={en:{MMMM:["January","February","March","April","May","June","July","August","September","October","November","December"],MMM:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dddd:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ddd:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dd:["Su","Mo","Tu","We","Th","Fr","Sa"],A:["a.m.","p.m."],formatter:{YYYY:function(e){return("000"+e.getFullYear()).slice(-4)},YY:function(e){return("0"+e.getFullYear()).slice(-2)},Y:function(e){return""+e.getFullYear()},MMMM:function(e){return this.MMMM[e.getMonth()]},MMM:function(e){return this.MMM[e.getMonth()]},MM:function(e){return("0"+(e.getMonth()+1)).slice(-2)},M:function(e){return""+(e.getMonth()+1)},DD:function(e){return("0"+e.getDate()).slice(-2)},D:function(e){return""+e.getDate()},HH:function(e){return("0"+e.getHours()).slice(-2)},H:function(e){return""+e.getHours()},A:function(e){return this.A[11<e.getHours()|0]},hh:function(e){return("0"+(e.getHours()%12||12)).slice(-2)},h:function(e){return""+(e.getHours()%12||12)},mm:function(e){return("0"+e.getMinutes()).slice(-2)},m:function(e){return""+e.getMinutes()},ss:function(e){return("0"+e.getSeconds()).slice(-2)},s:function(e){return""+e.getSeconds()},SSS:function(e){return("00"+e.getMilliseconds()).slice(-3)},SS:function(e){return("0"+(e.getMilliseconds()/10|0)).slice(-2)},S:fuLine truncated
|
||||
Reference in new issue
Block a user