def test_get_timestamps_for_query(self): simmetrica = Simmetrica() timestamps = simmetrica.get_timestamps_for_query( 1363707480, 1363707780, 60) expected = [1363707480, 1363707540, 1363707600, 1363707660, 1363707720] self.assertEqual(list(timestamps), expected)
def test_get_timestamps_for_query(self): simmetrica = Simmetrica() timestamps = simmetrica.get_timestamps_for_query( 1363707480, 1363707780, 60) self.assertEqual( timestamps, [1363707480, 1363707540, 1363707600, 1363707660, 1363707720])
def push_simmetrica_event(event_name, increment_by=1, host=MONITORING_HOST, port=6379, db=0, password=None): """ :param event_name: str, event, like "spider_opened" :param increment_by: int, increments event counter by this value :param host: Redis server host, default is MONITORING_HOST :param port: Redis server port, default is 6379 :param db: Redis database, default is 0 :param password: Redis password, default is None :return: True if the event has been pushed, None otherwise """ global USING_SIMMETRICA if not USING_SIMMETRICA: return try: simm = Simmetrica(host=host, port=port, db=db, password=password) simm.push(event_name, increment=increment_by) except Exception, e: # in very rare cases, pushing fails (if using SocksiPy for ex). # TODO: implement command-line event addition return
def test_get_timestamps_for_push(self): simmetrica = Simmetrica() timestamps = list(simmetrica.get_timestamps_for_push(1363707716)) self.assertEqual(timestamps, [('week', 1363219200), ('hour', 1363705200), ('min', 1363707660), ('month', 1363392000), ('5min', 1363707600), ('year', 1356048000), ('day', 1363651200), ('15min', 1363707000)])
def get_simmetrica_events(event_name, start, end, period='hour', host=MONITORING_HOST, port=6379, db=0, password=None): simm = Simmetrica(host=host, port=port, db=db, password=password) results = simm.query(event_name, start, end, period) return results
def test_get_timestamps_for_push(self): simmetrica = Simmetrica() timestamps = list(simmetrica.get_timestamps_for_push(1363707716)) self.assertEqual(sorted(timestamps), [ ('15min', 1363707000), ('5min', 1363707600), ('day', 1363651200), ('hour', 1363705200), ('min', 1363707660), ('month', 1363392000), ('week', 1363219200), ('year', 1356048000), ])
def return_average_for_last_days(event_name, n_days=4, exclude_zeros=True, host=MONITORING_HOST, port=6379, db=0, password=None): simm = Simmetrica(host=host, port=port, db=db, password=password) start = simm.get_current_timestamp() - 86400 * n_days end = simm.get_current_timestamp() events = [] for _stamp, _events in get_simmetrica_events(event_name, start, end): _events = int(_events) if exclude_zeros: if _events == 0: continue events.append(int(_events)) if not events: return return float(sum(events)) / len(events)
subparsers = parser.add_subparsers(dest='subparser_name') push_parser = subparsers.add_parser('push') push_parser.add_argument('event') push_parser.add_argument('--increment', default=Simmetrica.DEFAULT_INCREMENT, type=int) push_parser.add_argument('--now', type=int) query_parser = subparsers.add_parser('query') query_parser.add_argument('event') query_parser.add_argument('start', type=int) query_parser.add_argument('end', type=int) query_parser.add_argument('--resolution', default='5min', choices=Simmetrica.resolutions) args = parser.parse_args() simmetrica = Simmetrica( os.getenv('REDIS_HOST'), os.getenv('REDIS_PORT'), os.getenv('REDIS_DB') ) if args.subparser_name == 'push': simmetrica.push(args.event, args.increment, args.now) print 'ok' if args.subparser_name == 'query': results = simmetrica.query(args.event, args.start, args.end, args.resolution) for timestamp, value in results: print timestamp, value
def test_push(self): with mock.patch('simmetrica.StrictRedis') as StrictRedis: simmetrica = Simmetrica() hincrby = StrictRedis.return_value.pipeline.return_value.hincrby simmetrica.push('foo') self.assertTrue(hincrby.called)
def test_get_event_key(self): simmetrica = Simmetrica() key = simmetrica.get_event_key('foo', '5min') self.assertEqual('simmetrica:foo:5min', key)
def test_round_time(self): simmetrica = Simmetrica() rounded_time = simmetrica.round_time(1363599249, 3600) self.assertEqual(rounded_time, 1363597200)
def test_get_timestamps_for_query(self): simmetrica = Simmetrica() timestamps = simmetrica.get_timestamps_for_query(1363707480, 1363707780, 60) self.assertEqual(timestamps, [1363707480, 1363707540, 1363707600, 1363707660, 1363707720])
'-rd', default=None, help='Connect to the specified db in redis') parser.add_argument('--redis_password', '-ra', default=None, help='Authorization password of redis') args = parser.parse_args() app = Flask(__name__, static_folder=STATIC_FOLDER, template_folder=TEMPLATE_FOLDER) simmetrica = Simmetrica(args.redis_host, args.redis_port, args.redis_db, args.redis_password) @app.route('/') def index(): return render_template('index.html') @app.route('/push/<event>') def push(event): increment = request.args.get('increment') or Simmetrica.DEFAULT_INCREMENT now = int(request.args.get('now')) if request.args.get('now') else None simmetrica.push(event, increment, now) return 'ok'
default=None, help='Connect to redis on the specified port') parser.add_argument('--redis_db', '-rd', default=None, help='Connect to the specified db in redis') parser.add_argument('--redis_password', '-ra', default=None, help='Authorization password of redis') args = parser.parse_args() app = Flask(__name__) simmetrica = Simmetrica(args.redis_host, args.redis_port, args.redis_db, args.redis_password) @app.route('/') def index(): return render_template('index.html') @app.route('/push/<event>') def push(event): increment = request.args.get('increment') or Simmetrica.DEFAULT_INCREMENT now = int(request.args.get('now')) if request.args.get('now') else None simmetrica.push(event, increment, now) return 'ok'
def test_get_timestamps_for_query(self): simmetrica = Simmetrica() timestamps = simmetrica.get_timestamps_for_query(1363707480, 1363707780, 60) expected = [1363707480, 1363707540, 1363707600, 1363707660, 1363707720] self.assertEqual(list(timestamps), expected)