stanley-king пре 2 година
родитељ
комит
df7369bd43

+ 1 - 1
admin/control/refill_analysis.php

@@ -170,4 +170,4 @@ class refill_analysisControl extends SystemControl
         }
         return $array;
     }
-}
+}

+ 2 - 0
docker/compose/homecuda/cli/docker-compose.yml

@@ -41,6 +41,8 @@ services:
 
   pythoncli:
     image: pycpu:3.7.10
+    ports:
+      - 5000:5000
     volumes:
       - /mnt/xyzshop/docker/compose/homecuda/conf/etc/localtime:/etc/localtime:ro
       - /mnt/xyzshop:/var/www/html

+ 25 - 0
plot/flask_test.py

@@ -0,0 +1,25 @@
+from flask import Flask
+from flask import request, jsonify
+
+app = Flask(__name__)
+
+import logging
+logging.basicConfig(filename='/var/www/html/data/log/flask.log',
+                    format='%(levelname)10s  %(asctime)s  %(name)10s %(thread)d %(message)s',
+                    level=logging.DEBUG)
+logger = logging.getLogger('plot')
+
+@app.route('/hello')
+def hello_world():
+    logger.debug('start chratio')
+    start_time = request.args.get('start_time') or None
+    end_time = request.args.get('end_time') or None
+    interval = request.args.get('interval') or None
+    chnames = request.args.get('chnames') or None
+    card_type = request.args.get('card_type') or None
+    spec = request.args.get('spec') or None
+    return 'Hello World'
+
+
+if __name__ == '__main__':
+    app.run(debug=True, host='0.0.0.0', port=5000)

+ 29 - 21
plot/plot_control.py

@@ -1,41 +1,41 @@
-# from gevent import monkey
-# from gevent.pywsgi import WSGIServer
-# from gevent import signal as geventsig
+from flask import Flask, request, jsonify
+app = Flask(__name__)
 
 import base64
 from io import BytesIO
 from matplotlib.figure import Figure
 import json
 
-from flask import request, jsonify
 import logging
 import time
 import signal as sig
 import sys, getopt
 
 from refill import ChannelPainter
-from refill import day_stamp
-
-from flask import Flask
-app = Flask(__name__)
+from refill import day_stamp,time_border
 
 logging.basicConfig(filename='/var/www/html/data/log/flask.log',
                     format='%(levelname)10s  %(asctime)s  %(name)10s %(thread)d %(message)s',
                     level=logging.DEBUG)
 logger = logging.getLogger('plot')
 
-@app.route('/plot/channelratio')
-def channelratio():
+@app.route('/plot/ch_ratio')
+def ch_ratio():
     try:
         logger.debug('start chratio')
-        start_time = request.args.get('start_time') or None
-        end_time = request.args.get('end_time') or None
-        interval = request.args.get('interval') or None
-        chnames = request.args.get('chnames') or None
+        cur_time = int(time.time())
+        interval = request.args.get('interval') or 300
+        start_time = request.args.get('start_time') or (cur_time - 7200)
+        end_time = request.args.get('end_time') or cur_time
+
+        start_time = time_border(start_time,interval,True)
+        end_time = time_border(cur_time,interval,False)
+
+        chnames = request.args.get('chnames') or list()
         card_type = request.args.get('card_type') or None
         spec = request.args.get('spec') or None
 
-        painter = ChannelPainter(start_time=start_time,end_time=end_time,interval=interval,chnames=chnames,card_type=card_type,spec=spec)
+        painter = ChannelPainter(start_time=start_time, end_time=end_time, interval=interval, chnames=chnames, card_type=card_type, spec=spec)
         data = painter.paint()
 
         logger.debug('start_time=%s end_time=%s interval= %s chnames=%s quality=%s card_type=%s amount=%s',
@@ -44,10 +44,18 @@ def channelratio():
         logger.error(ex)
     return None
 
+
 if __name__ == "__main__":
-    app.run(debug=True)
-    # monkey.patch_all()
-    # http_server = WSGIServer(('0.0.0.0', 5000), app)
-    # geventsig.signal(sig.SIGTERM, lambda: http_server.stop())
-    # geventsig.signal(sig.SIGINT, lambda: http_server.stop())
-    # http_server.serve_forever()
+    debug_mode = True
+    if debug_mode:
+        app.run(debug=True, host='0.0.0.0', port=5000)
+    else:
+        from gevent import monkey
+        from gevent.pywsgi import WSGIServer
+        from gevent import signal as geventsig
+
+        monkey.patch_all()
+        http_server = WSGIServer(('0.0.0.0', 5000), app)
+        geventsig.signal(sig.SIGTERM, lambda: http_server.stop())
+        geventsig.signal(sig.SIGINT, lambda: http_server.stop())
+        http_server.serve_forever()

+ 16 - 5
plot/refill/ChannelPainter.py

@@ -1,10 +1,21 @@
-from .DataStream import EChPosmap as pos_map
+from .DataStream import EChPosmap as pos_map,day_stamp,span_days
+from .ChannelReader import ChannelReader
 
 class ChannelPainter(object):
-    default_options = {
-    }
+    def __init__(self,start_time, end_time, interval, chnames, card_type, spec):
+        self._start_time, self._end_time, self._interval, self._chnames, self._card_type, self._spec = start_time, end_time, interval, chnames, card_type, spec
+        self._days = span_days(start_time,end_time)
+
+        reader = ChannelReader()
+        if len(chnames) == 0:
+            for day in self._days:
+
 
-    def __init__(self,**kwargs):
         pass
-    def paint(self,**kwargs):
+
+    def paint(self):
+
+        for day in self._days:
+
+
         pass

+ 3 - 0
plot/refill/ChannelReader.py

@@ -19,6 +19,9 @@ class ChannelReader(DataReadStream):
         super(ChannelReader, self).__del__()
         pass
 
+    def path(self, day, chnames, card_type = None, spec = None):
+
+
     def read(self, path):
         pass
     pass

+ 26 - 1
plot/refill/DataStream.py

@@ -5,7 +5,7 @@ import h5py
 from enum import IntEnum
 import threading
 
-__all__ = ['DataWriteStream', 'DataReadStream', 'day_stamp', 'EMchPosmap', 'EChPosmap', 'ENetPosmap', 'open_hdf5']
+__all__ = ['DataWriteStream', 'DataReadStream', 'day_stamp', 'EMchPosmap', 'EChPosmap', 'ENetPosmap', 'open_hdf5','time_border']
 
 import logging
 log = logging.getLogger('stream')
@@ -28,6 +28,31 @@ def open_hdf5(file, is_wirte):
         return h5py.File(file, 'r')
 
 
+def time_border(interval, time_stamp, lt):
+    day = day_stamp(time_stamp)
+    pos = time_stamp - day
+
+    if lt:
+        pos = pos - pos % interval
+    elif pos % interval > 0:
+        pos += interval - pos % interval
+    else:
+        pos = pos
+
+    return pos + day
+
+def span_days(start_time,end_time):
+    start_day = day_stamp(start_time)
+    end_time = day_stamp(end_time)
+
+    days = list()
+    if start_day <= end_time:
+        days.append(start_day)
+        start_day += 86400
+
+    return days
+
+
 class DataWriteStream(metaclass=ABCMeta):
     _version = 20200618
     _paths = dict()

+ 2 - 2
plot/refill/__init__.py

@@ -1,6 +1,6 @@
 
 from .QueueListener import queueListener
-from .DataStream import DataWriteStream,DataReadStream,open_hdf5,day_stamp
+from .DataStream import DataWriteStream,DataReadStream,open_hdf5,day_stamp,time_border
 from .MerchantWriter import MerchantWriter
 from .ChannelWriter import ChannelWriter
 from .NetchkWriter import NetchkWriter
@@ -15,4 +15,4 @@ __all__ = ['DataWriteStream', 'DataReadStream',
            'MerchantWriter', 'ChannelWriter','NetchkWriter',
            'MerchantReader','NetchkReader','ChannelReader',
            'ChannelPainter',
-           'queueListener','open_hdf5','day_stamp']
+           'queueListener','open_hdf5','day_stamp','time_border']

+ 16 - 13
plot/testPlot.py

@@ -2,12 +2,14 @@ import time
 import unittest
 import logging
 
+from refill import time_border
+
 logging.basicConfig(filename='/var/www/html/data/log/qreader.log', level=logging.DEBUG)
 log = logging.getLogger('reader')
 
 class MyTestCase(unittest.TestCase):
-    # __redis_host = '192.168.3.104'
-    __redis_host = '192.168.3.46'
+    __redis_host = '192.168.3.104'
+    # __redis_host = '192.168.3.46'
     def test_something(self):
         self.assertEqual(True, False)  # add assertion here
 
@@ -20,10 +22,22 @@ class MyTestCase(unittest.TestCase):
             log.error(ex)
         pass
 
+    def test_timestart(self):
+        stamp = int(time.time())
+        for i in range(300):
+            x = stamp + i
+            l = time_border(300,x,True)
+            r = time_border(300,x,False)
+            print('l=',l,'r=',r)
+
     def testDays(self):
         from refill import MerchantReader
+        from refill import ChannelReader
 
         try:
+            chreader = ChannelReader()
+            chdays = chreader.days()
+
             reader = MerchantReader()
             days = reader.days()
         except Exception as ex:
@@ -61,16 +75,5 @@ class MyTestCase(unittest.TestCase):
         person('Jack', 24, 'Beijing', job='Engineer')
         person('Jack', 24, 'Beijing', 'Engineer')
 
-    def test_kwargs(self):
-        def paint(**kwargs):
-            start_time = kwargs.setdefault('start_time',None)
-
-            pass
-
-        paint(start_time=time.time(),end_time = time.time() + 3600)
-
-
-
-
 if __name__ == '__main__':
     unittest.main()