def post(self): keyname = self.request.get('camera') if keyname is not None: cam = CameraSource.get(db.Key(keyname)) cam.deleted = True cam.put() self.response.out.write("deleted")
def post(self): keyname = self.request.get('camera') if keyname is not None: cam = CameraSource.get(db.Key(keyname)) cmd = self.request.get('cmd') if cmd == 'get': self.response.headers['Content-Type'] = 'text/json' self.response.out.write("{") # TODO: need to escape unsafe characters self.response.out.write(' "key": "%s",' % cam.key()) self.response.out.write(' "name": "%s",' % cam.name) self.response.out.write(' "url": "%s",' % cam.url) self.response.out.write(' "enabled": %d,' % cam.enabled) self.response.out.write(' "poll_max_fps": %d,' % cam.poll_max_fps) self.response.out.write(' "alert_max_fps": %d,' % cam.alert_max_fps) self.response.out.write(' "num_secs_after": %f,' % cam.num_secs_after) if cam.authuser: tmpuser = cam.authuser else: tmpuser = "" if cam.authpass: maskedpass = "******" * len(cam.authpass) else: maskedpass = "" self.response.out.write(' "authuser": "******",' % tmpuser) self.response.out.write(' "authpass": "******"' % maskedpass) self.response.out.write("}") elif cmd == 'save': cam.name = self.request.get('name') cam.url = self.request.get('url') cam.enabled = bool(int(self.request.get('enabled'))) cam.poll_max_fps = int(self.request.get('poll_max_fps')) cam.alert_max_fps = int(self.request.get('alert_max_fps')) cam.num_secs_after = float(self.request.get('num_secs_after')) tmpuser = self.request.get('authuser') if not tmpuser: cam.authuser = None else: cam.authuser = tmpuser tmppass = self.request.get('authpass') if not tmppass: cam.authpass = None elif tmppass != '*' * len(tmppass): cam.authpass = tmppass cam.put() self.response.out.write("success") else: self.error(500) return
def get(self): keyname = self.request.get('camera') if keyname is not None: cam = CameraSource.get(db.Key(keyname)) else: self.error(500) return period = self.request.get('period') q2 = CameraEvent.all() q2.filter("camera_id =", cam.key()).filter("deleted =", False).order("-event_start") if period == "today": q2.filter("event_start >=", datetime.now().replace(hour=0,minute=0,second=0)) elif period == "yesterday": q2.filter("event_start >=", datetime.now().replace(hour=0,minute=0,second=0) - timedelta(days=1)) q2.filter("event_start <", datetime.now().replace(hour=0,minute=0,second=0)) elif period == "week": startofweek = datetime.now().replace(hour=0, minute=0, second=0) - timedelta(days=datetime.now().isoweekday() % 7) q2.filter("event_start >=", startofweek) elif period == "month": #startofmonth = datetime.now().replace(day=1,hour=0,minute=0,second=0) startofmonth = datetime.now().replace(hour=0, minute=0, second=0) - timedelta(days=30) q2.filter("event_start >=", startofmonth) elif period == "all": pass else: return #cam.total = q2.count() results = q2.fetch(1000) for event in results: event.duration_text = (event.event_end - event.event_start) template_values = { 'user': users.get_current_user(), 'logout_url': users.create_logout_url('/'), 'camera': cam, 'eventlist': results, 'timenow': datetime.utcnow(), } path = os.path.join(os.path.dirname(__file__), 'inc/browse.html') self.response.out.write(template.render(path, template_values))
def get(self): keyname = self.request.get('camera') if keyname is not None: cam = CameraSource.get(db.Key(keyname)) memcache.set("camera{%s}.eventkey" % cam.key(), "trigger") self.response.out.write("triggered!")
def post(self): proc_start_time = datetime.now() self.response.headers['Content-Type'] = 'text/plain' # ensure that this task isn't too old (in case this task got requeued). epoch = self.request.get('epoch') if epoch is None: self.response.out.write("no epoch specified") return if (proc_start_time - datetime.fromtimestamp(float(epoch))) > timedelta(seconds=30): self.response.out.write("task too old") return keyname = self.request.get('camera') if keyname is not None: # The requested camera was specified as a parameter, so poll just that one. cam = CameraSource.get(db.Key(keyname)) # If disabled then stop processing and don't requeue a task. if not cam.enabled: self.response.out.write("disabled") return lastimg_time = memcache.get("camera{%s}.lastimg_time" % cam.key()) alerted = memcache.get("camera{%s}.eventkey" % cam.key()) is not None try: # Loop until we hit the execution time limit. while True: loop_start_time = datetime.now() # Time will expire at 30 seconds, so stop if we're getting close. if (loop_start_time - proc_start_time) > timedelta(seconds=MODETECT_RUNTIME_LIMIT): break if lastimg_time is None: sleep_amt = 0.0 elif alerted: td = (loop_start_time - lastimg_time) elapsed = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6 sleep_amt = 1.0 / cam.alert_max_fps - elapsed else: td = (loop_start_time - lastimg_time) elapsed = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6 sleep_amt = 1.0 / cam.poll_max_fps - elapsed if (sleep_amt > 0.0): time.sleep(sleep_amt) lastimg_time = datetime.now() alerted = self.pollCamera(cam) except DeadlineExceededError, apiproxy_errors.DeadlineExceededError: self.response.out.write("timeout hit, ignoring") # Time probably expired, so queue a task to start back up. # This may fail with CancelledError if we don't have time to do that. ImageFetcherTask.queueTask(cam.key())