Compare commits
8 Commits
6e9d634f74
...
dev
Author | SHA1 | Date | |
---|---|---|---|
824d7c59e7 | |||
1be8a3f592 | |||
8100a19e76 | |||
b6dfad0515 | |||
aa4094cd05 | |||
d45c8a7e9a | |||
2ec9a9fe4d | |||
c3a11f1f3c |
@ -18,7 +18,7 @@
|
|||||||
"core-js": "^3.6.5",
|
"core-js": "^3.6.5",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"express-http-proxy": "^1.6.2",
|
"express-http-proxy": "^1.6.2",
|
||||||
"faker": "^4.1.0",
|
"faker": "^5.1.0",
|
||||||
"knex": "^0.21.2",
|
"knex": "^0.21.2",
|
||||||
"lodash.chunk": "^4.2.0",
|
"lodash.chunk": "^4.2.0",
|
||||||
"sqlite3": "^5.0.0",
|
"sqlite3": "^5.0.0",
|
||||||
@ -26,7 +26,7 @@
|
|||||||
"vue-chartjs": "^3.5.0",
|
"vue-chartjs": "^3.5.0",
|
||||||
"vue-router": "^3.2.0",
|
"vue-router": "^3.2.0",
|
||||||
"vuex": "^3.4.0",
|
"vuex": "^3.4.0",
|
||||||
"yargs": "^15.4.1"
|
"yargs": "^16.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@sapphirecode/eslint-config": "^2.1.16",
|
"@sapphirecode/eslint-config": "^2.1.16",
|
||||||
@ -38,7 +38,7 @@
|
|||||||
"@vue/cli-service": "^4.4.0",
|
"@vue/cli-service": "^4.4.0",
|
||||||
"babel-eslint": "^10.1.0",
|
"babel-eslint": "^10.1.0",
|
||||||
"eslint": "^7.5.0",
|
"eslint": "^7.5.0",
|
||||||
"eslint-plugin-vue": "^6.2.2",
|
"eslint-plugin-vue": "^7.1.0",
|
||||||
"vue-template-compiler": "^2.6.11"
|
"vue-template-compiler": "^2.6.11"
|
||||||
},
|
},
|
||||||
"license": "GPL-3.0-or-later",
|
"license": "GPL-3.0-or-later",
|
||||||
|
28
spec/api.json
Normal file
28
spec/api.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"openapi":"3.0.2",
|
||||||
|
"info": {
|
||||||
|
"title":"API Title",
|
||||||
|
"version":"1.0"
|
||||||
|
},
|
||||||
|
"servers": [
|
||||||
|
{"url":"https://appreports.scode.ovh/v1"}
|
||||||
|
],
|
||||||
|
"paths": {
|
||||||
|
"/app": {
|
||||||
|
"get": {
|
||||||
|
"description": "list all apps",
|
||||||
|
"parameters": [],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -86,4 +86,8 @@ select > option {
|
|||||||
color: var(--color-foreground);
|
color: var(--color-foreground);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.large_button {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,17 +1,31 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div>
|
||||||
class="grid"
|
<button
|
||||||
>
|
type="button"
|
||||||
<ViewComponent
|
class="large_button"
|
||||||
v-for="(item,key) of saved_config.displays"
|
@click="settings_btn_action"
|
||||||
:key="key"
|
v-text="editing?'Close':'Settings'"
|
||||||
:config="item"
|
|
||||||
:data="log(item.source)"
|
|
||||||
/>
|
|
||||||
<ConfigEditor
|
|
||||||
v-model="config"
|
|
||||||
:template="template"
|
|
||||||
/>
|
/>
|
||||||
|
<div
|
||||||
|
v-if="editing"
|
||||||
|
class="spacer"
|
||||||
|
>
|
||||||
|
<ConfigEditor
|
||||||
|
v-model="config"
|
||||||
|
:template="template"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-else
|
||||||
|
class="grid"
|
||||||
|
>
|
||||||
|
<ViewComponent
|
||||||
|
v-for="(item,key) of saved_config.displays"
|
||||||
|
:key="key"
|
||||||
|
:config="item"
|
||||||
|
:data="log(item.source)"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -35,14 +49,15 @@ export default {
|
|||||||
return {
|
return {
|
||||||
config: copy_object (default_config),
|
config: copy_object (default_config),
|
||||||
saved_config: copy_object (default_config),
|
saved_config: copy_object (default_config),
|
||||||
template: default_template
|
template: default_template,
|
||||||
|
editing: false
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: { ...Vuex.mapGetters ({ log: 'log' }) },
|
computed: { ...Vuex.mapGetters ({ log: 'log' }) },
|
||||||
mounted () {
|
mounted () {
|
||||||
this.fetch_log ();
|
this.fetch_log ();
|
||||||
document.body.addEventListener ('keydown', (ev) => {
|
document.body.addEventListener ('keydown', (ev) => {
|
||||||
if (ev.key === 's' && ev.ctrlKey) {
|
if (ev.key === 's' && ev.ctrlKey && this.editing) {
|
||||||
this.save_config ();
|
this.save_config ();
|
||||||
ev.preventDefault ();
|
ev.preventDefault ();
|
||||||
return false;
|
return false;
|
||||||
@ -58,6 +73,7 @@ export default {
|
|||||||
});
|
});
|
||||||
this.saved_config = copy_object (this.config);
|
this.saved_config = copy_object (this.config);
|
||||||
this.fetch_log ();
|
this.fetch_log ();
|
||||||
|
this.editing = false;
|
||||||
},
|
},
|
||||||
fetch_log () {
|
fetch_log () {
|
||||||
this.get_log ({
|
this.get_log ({
|
||||||
@ -65,6 +81,12 @@ export default {
|
|||||||
sources: this.saved_config.sources
|
sources: this.saved_config.sources
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
settings_btn_action () {
|
||||||
|
if (this.editing)
|
||||||
|
this.save_config ();
|
||||||
|
else
|
||||||
|
this.editing = true;
|
||||||
|
},
|
||||||
...Vuex.mapActions ({ get_log: 'get_log' })
|
...Vuex.mapActions ({ get_log: 'get_log' })
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -78,4 +100,8 @@ export default {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.spacer {
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -33,15 +33,19 @@ export default {
|
|||||||
yAxisID: index,
|
yAxisID: index,
|
||||||
borderColor: y.color,
|
borderColor: y.color,
|
||||||
backgroundColor: y.fill,
|
backgroundColor: y.fill,
|
||||||
spanGaps: true
|
spanGaps: true,
|
||||||
|
lineTension: 0
|
||||||
};
|
};
|
||||||
let last = null;
|
let last = null;
|
||||||
for (let i = 0; i < this.data.length; i++) {
|
for (let i = 0; i < this.data.length; i++) {
|
||||||
const data = this.data[i];
|
const data = this.data[i];
|
||||||
const val = resolve_data (data, y.field);
|
const val = resolve_data (data, y.field);
|
||||||
|
const next = this.data.length - 1 === i
|
||||||
|
? val
|
||||||
|
: resolve_data (this.data[i + 1], y.field);
|
||||||
if (
|
if (
|
||||||
!this.remove_duplicates
|
!this.remove_duplicates
|
||||||
|| last !== val
|
|| last !== val || next !== val
|
||||||
|| this.data.length - 1 === i
|
|| this.data.length - 1 === i
|
||||||
)
|
)
|
||||||
res.data.push (val);
|
res.data.push (val);
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
v-else
|
v-else
|
||||||
class="info"
|
class="info"
|
||||||
>
|
>
|
||||||
Select an app to view its Reports
|
Select an app to view its reports
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
|
Reference in New Issue
Block a user