def aggregate_reuses_daily(org, day): keys = ['reuses_{0}'.format(k) for k in KEYS] ids = [r.id for r in Reuse.objects(organization=org).only('id')] metrics = Metrics.objects(object_id__in=ids, level='daily', date=day.isoformat()) values = [int(metrics.sum('values.{0}'.format(k))) for k in KEYS] Metrics.objects.update_daily(org, day, **dict(zip(keys, values)))
def get_value(self): ids = itertools.chain(*[ [r.id for r in d.resources] for d in (Dataset.objects(organization=self.target).only('resources') or []) ]) return int(Metrics.objects(object_id__in=ids, level='daily') .sum('values.nb_uniq_visitors'))
def upsert_metric_for_day(obj, day, data): oid = obj.id if hasattr(obj, 'id') else obj if not isinstance(day, basestring): day = (day or date.today()).isoformat() commands = dict(('inc__values__{0}'.format(k), data[k]) for k in KEYS) metrics = Metrics.objects(object_id=oid, level='daily', date=day) return metrics.update_one(upsert=True, **commands)
def clear(self, day): if not isinstance(day, basestring): day = (day or date.today()).isoformat() if is_today(day): commands = dict(('set__metrics__{0}'.format(k), 0) for k in KEYS) for model in Organization, Reuse, User: try: model.objects.update(**commands) except: log.exception('Unable to clean %s', model.__name__) for dataset in Dataset.objects: dcommands = commands.copy() for i, _ in enumerate(dataset.resources): dcommands.update({ 'set__resources__{0}__metrics__{1}'.format(i, k): 0 for k in KEYS }) try: dataset.update(**dcommands) except: log.exception('Unable to clear dataset %s', dataset.id) commands = dict(('unset__values__{0}'.format(k), '1') for k in KEYS) metrics = Metrics.objects(level='daily', date=day) return metrics.update(upsert=False, **commands)
def count(self, obj, day, data): oid = obj.id if hasattr(obj, 'id') else obj if not isinstance(day, basestring): day = (day or date.today()).isoformat() if hasattr(obj, 'metrics') and day == date.today().isoformat(): # Update object current metrics for k in KEYS: obj.metrics[k] = data[k] commands = dict(('inc__values__{0}'.format(k), data[k]) for k in KEYS) metrics = Metrics.objects(object_id=oid, level='daily', date=day) return metrics.update_one(upsert=True, **commands)
def get_value(self): ids = [d.id for d in (Reuse.objects(organization=self.target).only('id') or [])] return int(Metrics.objects(object_id__in=ids, level='daily') .sum('values.nb_uniq_visitors'))
def get_value(self): return int(Metrics.objects(object_id=self.target.id, level='daily') .sum('values.nb_uniq_visitors'))
def clear_metrics_for_day(day): if not isinstance(day, basestring): day = (day or date.today()).isoformat() commands = dict(('unset__values__{0}'.format(k), 1) for k in KEYS) metrics = Metrics.objects(level='daily', date=day) return metrics.update(upsert=False, **commands)