Ho bisogno di creare una funzione in grado di visualizzare una metrica estratta in diverse ore del giorno da una fonte esterna una settimana fa. Il modo in cui ho il mio server attualmente impostato utilizza un metodo che estrae una metrica da una fonte esterna alle ore tra le 6:00 e le 17:00. La funzione per 06:00 è la seguente:Creare un server JS che archivia dati da una settimana fa
//get metric at 6 am
var millisTill6 = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 6, 0, 0, 0) - now;
if (millisTill6 < 0) {
millisTill6 += 86400000; // try again tomorrow
}
setTimeout(function() {
//get metric
}, millisTill6);
Non ci sono altre 11 metodi simili a quello di cui sopra per le ore dalle 07:00-05:00 che ho scritto per tenere traccia della metrica a tutti di questi tempi .
Quello che sto cercando di fare ora è archiviare e archiviare i dati che raccolgo nel corso di ogni giorno in modo da poter fare riferimento ai dati giornalieri dal giorno una settimana prima del giorno corrente (es. Se oggi è lunedì , accedere ai dati registrati lo scorso lunedì). Il mio primo pensiero è stato quello di creare un altro metodo chiamato millisTillMidnight
che ha passato questi dati in matrici diverse ogni giorno, ma non sono riuscito a far funzionare quel metodo. Idealmente, ho bisogno di essere in grado di visualizzare i dati orari dalla metrica nella mia domanda da una settimana prima del giorno corrente della settimana.
EDIT:
hanno lavorato su questo problema e ancora non hanno capito come ottenere questo lavoro. Ho omesso l'URL del server e il metodo per ottenere la metrica per rendere questa domanda più generale. Ecco il codice che ho usato:
var http = require('http');
var request = require('request');
var server = http.createServer(onRequest);
var port = Number(process.env.PORT || 3000)
server.listen(port);
var stat_a = [9, 9]; //display array
var tmp_stat_a = [0, 0]; //Holds the metric data for the day
var m_stat_a = [1, 1]; //monday archive
var t_stat_a = [2, 2]; //tuesday archive
var w_stat_a = [3, 3]; //wednesday archive
var th_stat_a = [4, 4]; //thursday archive
var f_stat_a = [5, 5]; //friday archive
var sa_stat_a = [6, 6]; //saturday archive
var s_stat_a = [7, 7]; //sunday archive
//----------------------------------------------------
function onRequest(req, res){
var Url = //URL
request(Url, function (error, response, body) {
var data = error;
var status = 404;
if(!error){
var now = new Date();
var millisTill6 = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 6, 0, 0, 0) - now;//6 AM
if (millisTill6 < 0) {
millisTill6 += 86400000;
}
setTimeout(function(){
tmp_stat_a[0] = //get metric
}, millisTill6);
var millisTill7 = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 7, 0, 0, 0) - now; //7 AM
if (millisTill7 < 0) {
millisTill7 += 86400000;
}
setTimeout(function(){
tmp_stat_a[1] = //get metric
}, millisTill7);
var millisTillMidnight = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 58, 0, 0) - now; //archive temp array and display data for next day at midnight
if (millisTillMidnight < 0) {
millisTillMidnight += 86400000;
}
setTimeout(function(){
var d = new Date();
var n = d.getDay();
if(n == 0) //SUNDAY
{
for(i=0; i<2; i++)
{
s_stat_a[i] = tmp_stat_a[i]; //archive temp array
stat_a[i] = m_stat_a[i]; //set display array to last weeks archive for the next day
}
console.log("0");
}
else if(n == 1) //MONDAY
{
for(i=0; i<2; i++)
{
m_stat_a[i] = tmp_stat_a[i];
stat_a[i] = t_stat_a[i];
}
console.log("1");
}
else if(n == 2) //TUESDAY
{
for(i=0; i<2; i++)
{
t_stat_a[i] = tmp_stat_a[i];
stat_a[i] = w_stat_a[i];
}
console.log("2");
}
else if(n == 3) //WEDNESDAY
{
for(i=0; i<2; i++)
{
w_stat_a[i] = tmp_stat_a[i];
stat_a[i] = th_stat_a[i];
}
console.log("3");
}
else if(n == 4) //THURSDAY
{
for(i=0; i<2; i++)
{
th_stat_a[i] = tmp_stat_a[i];
stat_a[i] = f_stat_a[i];
}
console.log("4");
}
else if(n == 5) //FRIDAY
{
for(i=0; i<2; i++)
{
f_stat_a[i] = tmp_stat_a[i];
stat_a[i] = sa_stat_a[i];
}
console.log("5");
}
else if(n == 6) //SATURDAY
{
for(i=0; i<2; i++)
{
sa_stat_a[i] = tmp_stat_a[i];
stat_a[i] = s_stat_a[i];
}
console.log("6");
}
}, millisTillMidnight);
status = 200;
data = {
aa: stat_a[0],
ab: stat_a[1]
};
}
res.writeHead(status, { 'Content-Type': 'application/json', "Access-Control-Allow-Origin":"*" });
res.write(JSON.stringify(data));
res.end();
});
}
Per eseguire questa operazione è necessario un database su un server, a meno che non si speri che il client mantenga la pagina aperta per una settimana per raccogliere tutti i dati in memoria. – stackErr
Il programma JS di cui sopra sarà ospitato su un server da cui viene estratto un file JS diverso, quindi il prorgam sopra sarà sempre in esecuzione. – Roger99
Quindi creare un database e memorizzare le metriche inserite nel database. Suppongo che tu stia usando node.js ... node.js funziona con tutti i principali datastore quindi sceglierne uno, creare le tabelle necessarie e memorizzare i dati lì. – stackErr