From 1e9dbb4df6bbecd27b0dd5ed0d78a220d0d5f133 Mon Sep 17 00:00:00 2001 From: Darko Lukic Date: Sat, 24 Mar 2018 18:18:05 +0100 Subject: [PATCH] Add histogram --- ui/src/assets/css/main.css | 4 - ui/src/assets/images/loader.gif | Bin 0 -> 64085 bytes ui/src/components/Science.vue | 8 +- ui/src/components/dashboard/Dashboard.vue | 71 ++++++++++++-- ui/src/components/dashboard/Histogram.vue | 108 +++++++++++++++++++++ ui/src/components/dashboard/Location.vue | 38 ++++++++ ui/src/components/dashboard/TimeSeries.vue | 22 +++-- ui/src/components/dashboard/Value.vue | 26 +++-- ui/src/store.js | 27 +++++- ui/webpack.config.js | 9 +- 10 files changed, 274 insertions(+), 39 deletions(-) create mode 100644 ui/src/assets/images/loader.gif create mode 100644 ui/src/components/dashboard/Histogram.vue create mode 100644 ui/src/components/dashboard/Location.vue diff --git a/ui/src/assets/css/main.css b/ui/src/assets/css/main.css index f242969..eb3a8c7 100644 --- a/ui/src/assets/css/main.css +++ b/ui/src/assets/css/main.css @@ -20,10 +20,6 @@ hr { background-color: rgba(255, 255, 255, 0.2); } -.huge { - font-size: 32px; -} - #sidebar { background-color: #222; background-size: cover; diff --git a/ui/src/assets/images/loader.gif b/ui/src/assets/images/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b4b8384b40a6f2f842d9f9fd0d6a643b4740867 GIT binary patch literal 64085 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 z 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 Oex1Ot6Zrpf0{;SFIsLZ) literal 0 HcmV?d00001 diff --git a/ui/src/components/Science.vue b/ui/src/components/Science.vue index 64af7c9..aeb8a7a 100644 --- a/ui/src/components/Science.vue +++ b/ui/src/components/Science.vue @@ -14,6 +14,7 @@
+
@@ -30,7 +31,6 @@ import { Datetime } from 'vue-datetime' import moment from 'moment'; - const FROM_DEFAULT = moment().add('-24', 'hours').toISOString(); const TO_DEFAULT = moment().toISOString(); @@ -42,6 +42,8 @@ export default { to: TO_DEFAULT, lastFrom: FROM_DEFAULT, lastTo: TO_DEFAULT, + graphIsLoading: true, + loaderUrl: require('../assets/images/loader.gif'), } }, components: { @@ -50,6 +52,8 @@ export default { mounted() { this.loadGraphImage(); this.updateDownloadUrl(); + + this.$refs.graph.onload = () => this.graphIsLoading = false; }, methods: { rangeUpdated() { @@ -75,6 +79,8 @@ export default { let root = this.$http.options.root; let binSize = 1; + this.$refs.graph.src = ''; + this.graphIsLoading = true; let imageUrl = `${root}histogram.png?from=${from}&to=${to}&bin_size=${binSize}`; this.$refs.graph.src = imageUrl; }, diff --git a/ui/src/components/dashboard/Dashboard.vue b/ui/src/components/dashboard/Dashboard.vue index 8e538fc..0c0ebf3 100644 --- a/ui/src/components/dashboard/Dashboard.vue +++ b/ui/src/components/dashboard/Dashboard.vue @@ -1,19 +1,35 @@ + + diff --git a/ui/src/components/dashboard/Location.vue b/ui/src/components/dashboard/Location.vue new file mode 100644 index 0000000..0817fe8 --- /dev/null +++ b/ui/src/components/dashboard/Location.vue @@ -0,0 +1,38 @@ + + + + + + diff --git a/ui/src/components/dashboard/TimeSeries.vue b/ui/src/components/dashboard/TimeSeries.vue index 7882fb4..7cf9e30 100644 --- a/ui/src/components/dashboard/TimeSeries.vue +++ b/ui/src/components/dashboard/TimeSeries.vue @@ -1,12 +1,10 @@ @@ -69,4 +67,10 @@ export default { */ }, } - \ No newline at end of file + + + diff --git a/ui/src/components/dashboard/Value.vue b/ui/src/components/dashboard/Value.vue index fbf3aec..6d13d16 100644 --- a/ui/src/components/dashboard/Value.vue +++ b/ui/src/components/dashboard/Value.vue @@ -1,19 +1,17 @@ \ No newline at end of file diff --git a/ui/src/store.js b/ui/src/store.js index de68c31..ad48410 100644 --- a/ui/src/store.js +++ b/ui/src/store.js @@ -3,7 +3,7 @@ import Vuex from 'vuex'; import moment from 'moment'; -const SERIES_MAX_SIZE = 30; +const SERIES_MAX_SIZE = 100; Vue.use(Vuex); @@ -32,6 +32,15 @@ const getters = { } return 'NA'; }, + getNumberOfEvents: (state) => () => { + return state.series.length; + }, + getPeriod: (state) => () => { + if (state.series.length > 1) { + return state.series[state.series.length - 1].UTCUnixTime - state.series[0].UTCUnixTime; + } + return 0; + }, isLogged: (state) => () => { return (state.token !== null); }, @@ -52,7 +61,11 @@ const getters = { const actions = { requestSeries({ commit }) { - Vue.http.get('series?format=json').then(response => { + let params = { + format: 'json', + limit: SERIES_MAX_SIZE, + }; + Vue.http.get('series', { params }).then(response => { commit('setSeries', response.body); }); }, @@ -71,7 +84,15 @@ const actions = { const mutations = { setSeries(state, data) { - state.series.push(...data); + data.sort((l, r) => l.UTCUnixTime + l.SubSeconds > r.UTCUnixTime + r.SubSeconds ? 1 : -1); + for (let item of data) { + let last = state.series[state.series.length - 1]; + let lastUTCUnixTime = last ? last.UTCUnixTime : 0; + let lastSubSeconds = last ? last.SubSeconds : 0; + if (item.UTCUnixTime + item.SubSeconds >= lastUTCUnixTime + lastSubSeconds) { + state.series.push(item); + } + } state.series = state.series.slice(-SERIES_MAX_SIZE); }, setAuth(state, token) { diff --git a/ui/webpack.config.js b/ui/webpack.config.js index 843fc31..6e50f34 100644 --- a/ui/webpack.config.js +++ b/ui/webpack.config.js @@ -19,12 +19,19 @@ module.exports = { exclude: /node_modules/ }, { - test: /\.(png|jpg|gif|svg)$/, + test: /\.(png|jpg|svg)$/, loader: 'file-loader', options: { name: '[name].[ext]?[hash]' } }, + { + test: /\.gif$/, + loader: 'file-loader', + options: { + name: '[name].[ext]' + } + }, { test: /\.css$/, loader: 'style-loader!css-loader'