2016-07-04 3 views
6

मुझे एक ऐसा फ़ंक्शन बनाना होगा जो एक हफ्ते पहले बाहरी स्रोत से दिन के विभिन्न घंटों में एक मीट्रिक खींच सके। जिस तरह से मेरा सर्वर वर्तमान में स्थापित है, वह एक विधि का उपयोग कर रहा है जो 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(); 
    }); 
} 
+4

आपको ऐसा करने के लिए सर्वर पर डेटाबेस की आवश्यकता है जब तक कि आप उम्मीद कर रहे हों कि क्लाइंट स्मृति में सभी डेटा एकत्र करने के लिए पृष्ठ को एक सप्ताह तक खुला रखता है। – stackErr

+0

उपरोक्त जेएस प्रोग्राम एक सर्वर पर होस्ट किया जाएगा कि एक अलग जेएस फ़ाइल से खींचती है ताकि उपरोक्त 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

के बारे में क्या बात कर रहे हैं कोशिश करने के लिए धन्यवाद। मैं एक प्रोग्राम लिखने की कोशिश कर रहा हूं जिसे एक चार्ट के लिए बैक एंड के रूप में उपयोग किया जा सकता है जो एक पहले से डेटा प्रदर्शित करता है। मेरे पास एक ऐसा कार्यक्रम है जो दिन के 12 अलग-अलग घंटों के लिए मीट्रिक प्राप्त कर सकता है। मुझे दिन के सभी 12 घंटों के लिए मीट्रिक इकट्ठा करने में सक्षम होने का एक तरीका चाहिए, इसे एक सप्ताह तक स्टोर करें, और फिर उस दिन के पुराने डेटा को वर्तमान दिन से एक्सेस करने में सक्षम हो। इस समाधान में 12 अलग-अलग डेटा पॉइंट्स के लिए 7 दिनों के डेटा को स्टोर करने का एक तरीका शामिल होगा, जो कि आज रात मध्यरात्रि में अपडेट किया जाता है जिससे वर्तमान दिन का डेटा संग्रह में डाल दिया जाता है। – Roger99

+0

तो क्या आप डेटा स्टोर करने के लिए सिस्टम ढूंढ रहे हैं और फिर इसे पुनर्प्राप्त कर सकते हैं? – spooky

संबंधित मुद्दे