मुझे एक ऐसा फ़ंक्शन बनाना होगा जो एक हफ्ते पहले बाहरी स्रोत से दिन के विभिन्न घंटों में एक मीट्रिक खींच सके। जिस तरह से मेरा सर्वर वर्तमान में स्थापित है, वह एक विधि का उपयोग कर रहा है जो 6am और 5 बजे के बीच के बाहरी स्रोत से मेट्रिक खींचता है। 6 बजे के लिए समारोह नीचे दिखाया गया है:एक जेएस सर्वर बनाएं जो एक सप्ताह पहले डेटा संग्रहित करता है
//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);
वहाँ 11 अधिक 7 से 5 बजे बजे से घंटे है कि मैं इस समय के सभी पर स्थित मीट्रिक का ट्रैक रखने के लिए लिखा है के लिए ऊपर एक के समान तरीके हैं ।
जो मैं अभी करने की कोशिश कर रहा हूं वह है कि मैं प्रत्येक दिन के दौरान एकत्र किए गए डेटा को संग्रहीत और संग्रहित करता हूं ताकि मैं वर्तमान दिन से एक सप्ताह पहले दैनिक डेटा का संदर्भ दे सकूं (उदा। अगर आज सोमवार है , पिछले सोमवार को दर्ज डेटा तक पहुंचें)। मेरा प्रारंभिक विचार millisTillMidnight
नामक एक और विधि बनाना था जिसने इस डेटा को प्रत्येक दिन अलग-अलग सरणी में परिवर्तित किया, लेकिन मैं काम करने के लिए उस विधि को प्राप्त करने में सक्षम नहीं हूं। आदर्श रूप में, मुझे सप्ताह के वर्तमान दिन से एक सप्ताह पहले अपने आवेदन में मीट्रिक से प्रति घंटा डेटा प्रदर्शित करने में सक्षम होना चाहिए।
संपादित करें:
इस समस्या पर काम कर रहा है और अभी भी पता लगा नहीं किया है कि यह कैसे काम कर पाने के लिए। मैंने इस प्रश्न को और अधिक सामान्य बनाने के लिए मीट्रिक प्राप्त करने के लिए सर्वर यूआरएल और विधि को छोड़ दिया है। ..
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();
});
}
आपको ऐसा करने के लिए सर्वर पर डेटाबेस की आवश्यकता है जब तक कि आप उम्मीद कर रहे हों कि क्लाइंट स्मृति में सभी डेटा एकत्र करने के लिए पृष्ठ को एक सप्ताह तक खुला रखता है। – stackErr
उपरोक्त जेएस प्रोग्राम एक सर्वर पर होस्ट किया जाएगा कि एक अलग जेएस फ़ाइल से खींचती है ताकि उपरोक्त prorgam हमेशा चल रहा होगा। – Roger99
तो डेटाबेस बनाएं और डेटाबेस में खींचने वाले मीट्रिक को स्टोर करें। मुझे लगता है कि आप node.js का उपयोग कर रहे हैं ... node.js सभी प्रमुख डेटास्टोरों के साथ काम करता है, इसलिए एक चुनें, आपको आवश्यक टेबल बनाएं और वहां डेटा स्टोर करें। – stackErr