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();
});
}
Bunu yapmak için bir sunucu üzerinde bir veritabanı gerekiyor. – stackErr
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
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