浏览代码

Hourly offset

Gamaliel Espinoza Macedo 6 年之前
父节点
当前提交
144b67a80e
共有 4 个文件被更改,包括 44 次插入16 次删除
  1. 1 1
      ondemand/__init__.py
  2. 7 0
      ondemand/calibration.py
  3. 32 14
      ondemand/service.py
  4. 4 1
      setup.py

+ 1 - 1
ondemand/__init__.py

@@ -1 +1 @@
-__version__ = '1.3.2-rc1'
+__version__ = '1.3.2-rc2'

+ 7 - 0
ondemand/calibration.py

@@ -9,6 +9,7 @@ class Calibrations(object):
     THRESHOLD = 10
     FALL_TOLERANCE = 0
     SEGMENT_SIZE = 5
+    HOURLY_OFFSET = -5
 
     # SEGMENT_SIZE
     # n = cualquier cantidad de segundos
@@ -39,6 +40,7 @@ class Calibrations(object):
                 'threshold': self.THRESHOLD,
                 'fallTolerance': self.FALL_TOLERANCE,
                 'segmentSize': self.SEGMENT_SIZE,
+                'hourlyOffset': self.HOURLY_OFFSET,
             }
 
         elif not remote and local:
@@ -47,6 +49,7 @@ class Calibrations(object):
                 'threshold': self.THRESHOLD,
                 'fallTolerance': self.FALL_TOLERANCE,
                 'segmentSize': self.SEGMENT_SIZE,
+                'hourlyOffset': self.HOURLY_OFFSET,
             }
 
         else:
@@ -66,6 +69,10 @@ class Calibrations(object):
                 'segmentSize': remote.get(
                     'segmentSize',
                     self.SEGMENT_SIZE,
+                ),
+                'hourlyOffset': remote.get(
+                    'hourlyOffset',
+                    self.HOURLY_OFFSET,
                 )
             }
 

+ 32 - 14
ondemand/service.py

@@ -141,12 +141,18 @@ def process_queue_with_threads():
                     item = queue.get(False)
                     station = item['station']
                     date = dateutil.parser.parse(item['date'])
+                    calibration = calibrations.get(station)
+
+                    audios = [f for f in iterate_audios(
+                        date, station,
+                        calibration=calibration
+                    )]
 
                     thread = MultiAPI(target=process_segment,
                         args=(item,),
                         kwargs={
-                            'audios': [f for f in iterate_audios(date, station)],
-                            'calibration': calibrations.get(station),
+                            'audios': audios,
+                            'calibration': calibration,
                         }
                     )
                     threads[index] = thread
@@ -177,13 +183,16 @@ def process_segment(item, audios=None, calibration=None):
     segment_size = calibration['segmentSize']
     audio_length = 0
 
-    log.info('[process_segment] (th: {}, tl: {}, ft: {}, ss: {}) {}'.format(
-        calibration['threshold'],
-        calibration['tolerance'],
-        calibration['fallTolerance'],
-        calibration['segmentSize'],
-        item,
-    ))
+    log.info('[process_segment] (th: {}, tl: {}, ft: {}, ss: {}, ho: {}) {}'\
+        .format(
+            calibration['threshold'],
+            calibration['tolerance'],
+            calibration['fallTolerance'],
+            calibration['segmentSize'],
+            calibration['hourlyOffset'],
+            item,
+        )
+    )
 
     # 1. obtener el audio desde firebase
     #    y calcular su fingerprint.
@@ -223,7 +232,7 @@ def process_segment(item, audios=None, calibration=None):
          de datos en modo de cursor.
     """
     audios_iterable = audios if audios \
-        else iterate_audios(date, station)
+        else iterate_audios(date, station, calibration=calibration)
 
     # 2. Read the list of files from local database
     audios_counter = 0
@@ -344,14 +353,23 @@ def find_repetitions(results, segments_needed=2, calibration=None):
 
     return found
 
-def iterate_audios(dt, station):
+def iterate_audios(dt, station, calibration=None):
     """ Given a datetime object and an station,
     iterate a list of files that are between
     the the date and itself plus 5 minutes;
     station must match too """
-    from_time = time.mktime(dt.timetuple()) \
-              - AHEAD_TIME_AUDIO_TOLERANCE
-    to_time = from_time + 3599 + AHEAD_TIME_AUDIO_TOLERANCE
+
+    tm = time.mktime(dt.timetuple())
+
+    if calibration and calibration['hourlyOffset']:
+        hoffset = calibration['hourlyOffset']
+        from_time = tm + hoffset
+        to_time = tm + 3599 + hoffset
+
+    elif AHEAD_TIME_AUDIO_TOLERANCE:
+        """ Conventional mode """
+        from_time = tm + AHEAD_TIME_AUDIO_TOLERANCE
+        to_time = from_time + 3599 + AHEAD_TIME_AUDIO_TOLERANCE
 
     log.info('from {} to {}'.format(int(from_time), int(to_time)))
 

+ 4 - 1
setup.py

@@ -13,7 +13,10 @@ setup(
   description = 'Fourier ondemand service',
   long_description = 'You can use it for do maintenance stuff',
   scripts = [join(binpath, 'fourier-ondemand')],
-  install_requires=['pyaudio', 'psutil', 'tornado', 'firebase_admin', 'mutagen'],
+  install_requires=['pyaudio', 'psutil', 'tornado',
+    'firebase_admin>=2.16', 'mutagen',
+    'requests>=2.18'
+  ],
   author = 'Gamaliel Espinoza M.',
   author_email = 'gamaliel.espinoza@gmail.com',
   url = 'https://git.miralo.xyz/AudioValid/fourier-ondemand',