2016-07-04 19 views
6

Bir metrik bir hafta önce bir dış kaynaktan günün farklı saatlerinde çekilmiş görüntüleyebilen bir işlev oluşturmanız gerekir bir JS sunucusu oluşturun. Sunucumun halihazırda kurmuş olduğu yol, 6 ile 17 arası saatlerde bir dış kaynaktan gelen bir metriği çeken bir yöntem kullanıyor. 6 am için fonksiyon aşağıda gösterilmiştir:bir hafta arşivleri verileri önce

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

Ben tüm bu kez de metrik takip etmek için yazdım 07:00 ila 5 pm den saat yukarıdakine benzer 11 daha yöntem vardır .

Şu an yapmaya çalıştığım şey, her gün boyunca topladığım verileri depolamak ve arşivlemek, böylece günlük verileri bir önceki güne ait günden bir gün öncesinden bildirebilmek (ör. Bugün pazartesi ise) , son pazartesi günü kaydedilen verilere erişin). İlk düşüncem, bu veriyi her gün farklı dizilere dönüştüren millisTillMidnight adlı başka bir yöntem oluşturmaktı, ancak bu yöntemin işe yaraması mümkün olmadı. İdeal olarak, saatlik verileri, uygulamamdaki metrikten, haftanın geçerli gününden önceki bir haftadan itibaren görüntüleyebilmem gerekir.

DÜZENLEME:

Bu sorun üzerinde çalışmaya mı ve hala bu çalışma almak için nasıl çözemedim. Bu soruyu daha genel hale getirmek için metriği almak için sunucu URL'sini ve yöntemini ihmal ettim. Eğer durum şu kullanmak ise

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

Bunu yapmak için bir sunucu üzerinde bir veritabanı gerekiyor. – stackErr

+0

Yukarıdaki JS programı, farklı bir JS dosyasının çektiği bir sunucuda barındırılacaktır, böylece yukarıdaki progam her zaman çalışacaktır. – Roger99

+2

Yani bir veritabanı oluşturun ve veritabanına aldığınız metrikleri saklayın. Node.js'yi kullandığınızı tahmin ediyorum ... node.js tüm önemli veri dosyaları ile çalışır, bu yüzden birini seçin, ihtiyacınız olan tabloları oluşturun ve verileri burada saklayın. – stackErr

cevap

1

Bunu merak anlıyorum ama gece yarısına kadar milisaniye öğrenmek için nasıl talep ediyorlar inandığını sanmıyorum ..: İşte kullanıyorum kodudur ... yanlış anladım eğer önceden Pardon.

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

umarım bu yardımcı olur. istemci belleğindeki tüm verileri toplamak için bir hafta boyunca açık sayfasını tutar umuduyla sürece

+0

Teşekkür bahsediyoruz ne @ytpillai olduğunu. Bir wek önce verileri görüntüleyen bir grafik için arka uç olarak kullanılabilecek bir program yazmaya çalışıyorum. Günün 12 saati boyunca bir metrik alabilen bir programım var. Ben, günün her 12 saat ölçüyü toplamak bir hafta saklayın ve ardından geçerli günden bu haftalık verilere erişmek mümkün edebilmek için bir yol gerekir. Çözüm, geçerli olan günün verilerini arşiv haline getirerek her gece gece yarısı güncellenen 12 farklı veri noktası için 7 günlük veriyi depolamanın bir yolunu içerecektir. – Roger99

+0

Yani verileri saklamak ve daha sonra almak için bir sistem mi arıyorsunuz? – spooky

İlgili konular