from ops import *
def retention(cameras):
    code='''import os,sys,json,hashlib,collections
import redis
from urllib.parse import urlsplit
a=json.load(sys.stdin);u=urlsplit(os.environ['CONTEXTRA_METADATA_REDIS_URL'])
c=redis.Redis(host=u.hostname,port=u.port or 6379,db=int(u.path.strip('/') or 0),username=a['username'],password=a['password'],decode_responses=True,socket_timeout=3)
out={}
for camera in CAMERAS:
 k=os.environ.get('CONTEXTRA_METADATA_NAMESPACE','contextra:metadata:v1')+':camera:'+hashlib.sha256(str(camera).encode()).hexdigest()+':frames'
 rows=c.xrange(k,count=301);p={}
 for eid,fields in rows:
  s=json.loads(fields['json']);key=s['providerKey'];r=p.setdefault(key,dict(count=0,run=s['runId'],first_ms=int(eid.split('-')[0]),last_ms=0))
  r['count']+=1;r['last_ms']=int(eid.split('-')[0])
 out[camera]=dict(count=len(rows),span_ms=int(rows[-1][0].split('-')[0])-int(rows[0][0].split('-')[0]) if rows else None,providers=p)
 assert len(rows)<=300
c.close();print(json.dumps(out))'''.replace('CAMERAS',repr(cameras))
    auth=Path('/workspace/contextra-runtime-config/metadata-active/reader/reader-credentials.json')
    return json.loads(cmd(['docker','exec','-i','contextra-analytics-1','python3','-B','-c',code],input=auth.read_text(),timeout=15))
