2016-07-04 5 views
6

1週間前に外部ソースから別の時間帯にプルされたメトリックを表示できる関数を作成する必要があります。私のサーバーを現在設定している方法は、午前6時から午後5時の間に外部ソースからメトリックを取得する方法を使用しています。午前6時のための機能を以下に示します。1週間前からデータをアーカイブするJSサーバーを作成する

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

私はこれらの時間のすべてのメトリックを追跡するために書かれている午後5時まで午前7時から時間のための上記のものと同様11のより多くの方法があります。

私が今やっているのは、毎日のうちに収集したデータを保存してアーカイブすることです。その日の1日前の日のデータを参照できるようにします(例:今日は月曜日最後の月曜日に記録されたデータにアクセスする)。私の最初の考えは、millisTillMidnightという別のメソッドを作成してこのデータを毎日別の配列に変換していましたが、そのメソッドを動作させることができませんでした。理想的には、現在の曜日の1週間前から、アプリケーションのメトリックの時間別データを表示できるようにする必要があります。

EDIT:

は、この問題に取り組んできた、まだこの作業を取得する方法を考え出したていません。この質問をより一般的にするために、メトリックを取得するためのサーバーのURLとメソッドを省略しました。ここに私が使用しているコードは次のとおりです。

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

クライアントが1週間ページを開いたままにしてメモリ内のすべてのデータを収集することを望む場合を除き、これを行うにはサーバー上にデータベースが必要です。 – stackErr

+0

上記のJSプログラムは、別のJSファイルが取得するサーバー上でホストされるため、上記のprorgamは常に実行されます。 – Roger99

+2

データベースを作成し、データベースにプルするメトリックを格納します。私はあなたがnode.jsを使用していると推測しています... node.jsはすべての主要なデータストアで動作しますので、必要なテーブルを作成してそこにデータを格納します。 – stackErr

答えて

1

私は質問を理解しないと思うが、私はあなたが深夜までのミリ秒を見つける方法を求めていると信じて...それは場合には、以下を使用している場合...もし私が誤解すれば、事前に容赦してください。

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

これが役立ちます。

+0

お試しいただきありがとうございます。私はwek前のデータを表示するチャートのバックエンドとして使用できるプログラムを作成しようとしています。私は、1日の12時間分のメトリックを取得できるプログラムを持っています。 12時間すべての測定基準を収集し、1週間保管し、その1週間前のデータにアクセスできるようにする方法が必要です。このソリューションには、現在の日のデータをアーカイブに入れて、毎晩深夜に更新された12の異なるデータポイントに対して7日間分のデータを格納する方法が含まれます。 – Roger99

+0

データを保存して取得するシステムを探していますか? – spooky

関連する問題