2016-07-04 83 views
6

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(); 
    }); 
} 
+4

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

+0

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

+2

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

risposta

1

Io non credo di aver capito le domande, ma credo che si sta chiedendo come scoprire millisecondi fino a mezzanotte .. Se questo è il caso utilizzare il seguente ... Scusa in anticipo se ho frainteso.

var now = new Date(); 
var midnightDate = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 24, 0, 0, 0); 
console.log(midnightDate); //This is midnight... ie. if run on July 6th, this is - Thu Jul 07 2016 00:00:00 GMT-0700 (PDT) 
var millsTillMidnight = midnightDate - new Date(); 
console.log(millsTillMidnight); 

Spero che questo aiuti.

+0

Grazie per aver provato. Sto provando a scrivere un programma che può essere usato come back-end per un grafico che mostra i dati di un wek fa. Ho un programma che può ottenere una metrica per 12 diverse ore del giorno. Ho bisogno di un modo per essere in grado di raccogliere la metrica per tutte le 12 ore del giorno, conservarla per una settimana, e quindi essere in grado di accedere a quei vecchi dati della settimana dal giorno corrente. La soluzione includerebbe un modo per archiviare 7 giorni di dati per 12 diversi punti di dati che sono stati aggiornati ogni notte a mezzanotte inserendo i dati del giorno corrente in archivio. – Roger99

+0

Quindi stai cercando un sistema per archiviare i dati e poi recuperarli? – spooky