예제 #1
0
파일: handlers.py 프로젝트: bovine/cowguard
    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")
예제 #2
0
파일: handlers.py 프로젝트: bovine/cowguard
    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
예제 #3
0
파일: handlers.py 프로젝트: bovine/cowguard
    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))
예제 #4
0
파일: handlers.py 프로젝트: bovine/cowguard
 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!")
예제 #5
0
파일: handlers.py 프로젝트: bovine/cowguard
    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())