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();
});
}
クライアントが1週間ページを開いたままにしてメモリ内のすべてのデータを収集することを望む場合を除き、これを行うにはサーバー上にデータベースが必要です。 – stackErr
上記のJSプログラムは、別のJSファイルが取得するサーバー上でホストされるため、上記のprorgamは常に実行されます。 – Roger99
データベースを作成し、データベースにプルするメトリックを格納します。私はあなたがnode.jsを使用していると推測しています... node.jsはすべての主要なデータストアで動作しますので、必要なテーブルを作成してそこにデータを格納します。 – stackErr