2016-07-04 10 views
6

Potrzebuję utworzyć funkcję, która może wyświetlić dane pobrane o różnych porach dnia z zewnętrznego źródła sprzed tygodnia. Sposób, w jaki mam skonfigurowany mój serwer, polega na użyciu metody, która pobiera dane z zewnętrznego źródła w godzinach od 6:00 do 17:00. Funkcja do 6 rano jest pokazany poniżej:Utwórz serwer JS, który archiwizuje dane sprzed tygodnia.

//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); 

Istnieje 11 więcej metod podobnych do tych opisanych powyżej w godzinach od 7 rano do 5 po południu, że mam napisane śledzić metryki w ogóle z tych czasów .

Co próbuję teraz zrobić, to przechowywać i archiwizować dane, które zbieram w ciągu każdego dnia, aby móc odnieść się do dziennych danych z dnia tygodnia przed bieżącym dniem (np. Jeśli dzisiaj jest poniedziałek , dostęp do danych zarejestrowanych w poniedziałek). Początkowo myślałem o stworzeniu kolejnej metody o nazwie millisTillMidnight, która każdego dnia przenosiła te dane na różne tablice, ale nie udało mi się uruchomić tej metody. Najlepiej byłoby móc wyświetlać dane godzinowe z metryki w mojej aplikacji z jednego tygodnia przed bieżącym dniem tygodnia.

EDIT:

pracują nad tym problemem i jeszcze nie zorientowali się, jak uzyskać tej pracy. Pominąłem adres URL i metodę serwera, aby uzyskać dane, dzięki którym to pytanie będzie bardziej ogólne. Oto kod, który używam:

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

Potrzebujesz bazy danych na serwerze, aby to zrobić, chyba że masz nadzieję, że klient trzyma stronę otwartą przez tydzień, aby zebrać wszystkie dane w pamięci. – stackErr

+0

Powyższy program JS będzie hostowany na serwerze, z którego pobierany jest inny plik JS, więc powyższy prorgam będzie zawsze działał. – Roger99

+2

Utwórz bazę danych i zapisz dane, które pobierzesz do bazy danych. Zgaduję, że używasz node.js ... node.js współpracuje ze wszystkimi głównymi datastore, więc wybierz jedną, utwórz potrzebne tabele i zapisz tam dane. – stackErr

Odpowiedz

1

Nie sądzę rozumiem pytania, ale ja wierzę, że proszą o jak sprawdzić milisekund do północy .. Jeśli tak jest w przypadku korzystania z następujących ... Przepraszam z góry, jeśli źle to zrozumiałem.

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); 

Mam nadzieję, że to pomoże.

+0

Dzięki za próby. Próbuję napisać program, który może być używany jako back-end dla wykresu, który wyświetla dane z Wek temu. Mam program, który może uzyskać dane dla 12 różnych godzin dnia. Potrzebuję sposobu na zebranie danych przez wszystkie 12 godzin dziennie, przechowywanie ich przez tydzień, a następnie dostęp do danych z poprzedniego tygodnia z bieżącego dnia. Rozwiązanie to zawierałoby sposób przechowywania danych z siedmiodniową datą dla 12 różnych punktów danych, które były aktualizowane każdej nocy o północy poprzez umieszczanie danych z bieżącego dnia w archiwum. – Roger99

+0

Szukasz systemu do przechowywania danych, a następnie go pobrać? – spooky

Powiązane problemy