Пример #1
0
    def do_GET(self):
        """ handle video request """
        APPLOGGER.info(self.path)
        if not exists(self.path) or not isfile(self.path) \
                or not self.path.endswith('mp4'):
            self.send_error(404, 'File Not Found: %s' % self.path)
            return
        try:
            sendreply = False
            if self.path.endswith('.mp4'):
                mimetype = 'video/mp4'
                sendreply = True

            if sendreply == True:
                # Open the static file requested and send it
                _setvodfile(self.path)
                fhandler = open(self.path)
                self.send_response(200)
                self.send_header('Content-type', mimetype)
                self.end_headers()
                self.wfile.write(fhandler.read())
                fhandler.close()
            return
        except IOError:
            self.send_error(404, 'File Not Found: %s' % self.path)
        finally:
            _setvodfile('')
Пример #2
0
def tcpserve(cfg, recmng, vvpmng):
    """ tcpserve """
    ipaddr = cfg.comm_port.address
    serve_port = cfg.comm_port.tcp_port
    try:
        if ipaddr is '':
            raise AppException('get local ip exp')
        if int(serve_port) <= 0 or int(serve_port) > 65535:
            raise AppException('port num err')
    except AppException as ex:
        APPLOGGER.error(ex)
        sys.exit(1)

    host, port = ipaddr, int(serve_port)
    server = None
    try:
        server = TcpCtlServer((host, port), TcpCtlHandler, cfg, recmng, vvpmng)
    except socket.error as ex:
        APPLOGGER.error(ex)
        sys.exit(1)
    APPLOGGER.info('Server Up IP=%s PORT=%s', ipaddr, serve_port)
    if server:
        server.serve_forever()
    else:
        raise AppException('server start err')
Пример #3
0
def tcpserve(cfg, recmng, vvpmng):
    """ tcpserve """
    ipaddr = cfg.comm_port.address
    serve_port = cfg.comm_port.tcp_port
    try:
        if ipaddr is '':
            raise AppException('get local ip exp')
        if int(serve_port) <= 0 or int(serve_port) > 65535:
            raise AppException('port num err')
    except AppException as ex:
        APPLOGGER.error(ex)
        sys.exit(1)

    host, port = ipaddr, int(serve_port)
    server = None
    try:
        server = TcpCtlServer((host, port), TcpCtlHandler, cfg, recmng, vvpmng)
    except socket.error as ex:
        APPLOGGER.error(ex)
        sys.exit(1)
    APPLOGGER.info('Server Up IP=%s PORT=%s', ipaddr, serve_port)
    if server:
        server.serve_forever()
    else:
        raise AppException('server start err')
Пример #4
0
    def do_GET(self):
        """ handle video request """
        APPLOGGER.info(self.path)
        if not exists(self.path) or not isfile(self.path) \
                or not self.path.endswith('mp4'):
            self.send_error(404, 'File Not Found: %s' % self.path)
            return
        try:
            sendreply = False
            if self.path.endswith('.mp4'):
                mimetype = 'video/mp4'
                sendreply = True

            if sendreply == True:
                # Open the static file requested and send it
                _setvodfile(self.path)
                fhandler = open(self.path)
                self.send_response(200)
                self.send_header('Content-type', mimetype)
                self.end_headers()
                self.wfile.write(fhandler.read())
                fhandler.close()
            return
        except IOError:
            self.send_error(404, 'File Not Found: %s' % self.path)
        finally:
            _setvodfile('')
Пример #5
0
def httpserve(cfg, recmng, vvpmng):
    """ httpserve """
    ipaddr = cfg.comm_port.address
    serve_port = cfg.comm_port.http_port
    try:
        if ipaddr is '':
            raise AppException('get local ip exp')
        if int(serve_port) <= 0 or int(serve_port) > 65535:
            raise AppException('port num err')
        if cfg == None:
            raise AppException('cfg is null')
        else:
            from raspiserver.utils import ConfigObject
            if type(cfg) != ConfigObject:
                raise AppException('parameter type not correct')
    except AppException as ex:
        APPLOGGER.error(ex)
        sys.exit(1)
    APPLOGGER.info('Server Up IP=%s PORT=%s', ipaddr, serve_port)
    server = None
    try:
        server = HttpCtlServer((ipaddr, serve_port), \
                HttpCtlHandler, cfg, recmng, vvpmng)
    except socket.error as ex:
        APPLOGGER.error(ex)
        sys.exit(1)
    if server:
        server.serve_forever()
    else:
        APPLOGGER.error('http server start error')
Пример #6
0
def httpserve(cfg, recmng, vvpmng):
    """ httpserve """
    ipaddr = cfg.comm_port.address
    serve_port = cfg.comm_port.http_port
    try:
        if ipaddr is '':
            raise AppException('get local ip exp')
        if int(serve_port) <= 0 or int(serve_port) > 65535:
            raise AppException('port num err')
        if cfg == None:
            raise AppException('cfg is null')
        else:
            from raspiserver.utils import ConfigObject
            if type(cfg) != ConfigObject:
                raise AppException('parameter type not correct')
    except AppException as ex:
        APPLOGGER.error(ex)
        sys.exit(1)
    APPLOGGER.info('Server Up IP=%s PORT=%s', ipaddr, serve_port)
    server = None
    try:
        server = HttpCtlServer((ipaddr, serve_port), \
                HttpCtlHandler, cfg, recmng, vvpmng)
    except socket.error as ex:
        APPLOGGER.error(ex)
        sys.exit(1)
    if server:
        server.serve_forever()
    else:
        APPLOGGER.error('http server start error')
Пример #7
0
 def start(self):
     """ start video process """
     APPLOGGER.info('subcall in porcess')
     child = None
     child = subprocess.Popen(self.process_cmd.cmd(),
                              shell=True, preexec_fn=os.setsid)
     if child is not None:
         self.__vvprocess = child
         APPLOGGER.info('video process start and set')
Пример #8
0
 def __stop(self, form):
     """ stop the video process """
     _ = form
     self.vvpmng.getlock()
     try:
         if not self.vvpmng.isset():
             APPLOGGER.warn('no process to stop')
             self.__sendmsg(200, 'no process to stop')
             return  # jump to finally
         if self.vvpmng.isrun():
             self.vvpmng.stop()
             APPLOGGER.warn('terminating..')
             self.vvpmng.setprocess(None)
             self.__sendmsg(200, 'terminating..')
         else:
             APPLOGGER.info('process is terminate')
             self.vvpmng.setprocess(None)
             self.__sendmsg(200, 'process is terminated')
     finally:
         self.vvpmng.releaselock()
Пример #9
0
 def __stop(self, form):
     """ stop the video process """
     _ = form
     self.vvpmng.getlock()
     try:
         if not self.vvpmng.isset():
             APPLOGGER.warn('no process to stop')
             self.__sendmsg(200, 'no process to stop')
             return # jump to finally
         if self.vvpmng.isrun():
             self.vvpmng.stop()
             APPLOGGER.warn('terminating..')
             self.vvpmng.setprocess(None)
             self.__sendmsg(200, 'terminating..')
         else:
             APPLOGGER.info('process is terminate')
             self.vvpmng.setprocess(None)
             self.__sendmsg(200, 'process is terminated')
     finally:
         self.vvpmng.releaselock()
Пример #10
0
 def __init__(self, cfg):
     self.__reclock = Lock()
     self.__recordbase = cfg.base.strip("'") if cfg.base != "" else "/home/pi/records"
     self.lefthrhold = cfg.fsp_limit if cfg.fsp_limit != -1 else 100
     self.cycle = cfg.cycle if cfg.cycle != None else False
     try:
         if not exists(self.__recordbase):
             makedirs(self.__recordbase)
         elif not isdir(self.__recordbase):
             remove(self.__recordbase)
             makedirs(self.__recordbase)
     except OSError as ex:
         APPLOGGER.error(ex)
         APPLOGGER.info("pls use sudo")
         sys.exit(1)
     self.__watchthr = None
     self.__watchthr = Thread(target=self.__watch_dog)
     self.__watchthr.setDaemon(True)
     self.__watchthr.setName("watchthr")
     self.__watchthr.start()
     APPLOGGER.debug(cfg.base)
Пример #11
0
 def __init__(self, cfg):
     self.__reclock = Lock()
     self.__recordbase = cfg.base.strip("'") \
             if cfg.base != '' else '/home/pi/records'
     self.lefthrhold = cfg.fsp_limit if cfg.fsp_limit != -1 else 100
     self.cycle = cfg.cycle if cfg.cycle != None else False
     try:
         if not exists(self.__recordbase):
             makedirs(self.__recordbase)
         elif not isdir(self.__recordbase):
             remove(self.__recordbase)
             makedirs(self.__recordbase)
     except OSError as ex:
         APPLOGGER.error(ex)
         APPLOGGER.info('pls use sudo')
         sys.exit(1)
     self.__watchthr = None
     self.__watchthr = Thread(target=self.__watch_dog)
     self.__watchthr.setDaemon(True)
     self.__watchthr.setName('watchthr')
     self.__watchthr.start()
     APPLOGGER.debug(cfg.base)
Пример #12
0
 def __rm_records(self, data):
     """ remove video record """
     data = data.lstrip('rm_records|')
     data = data.strip('\n')
     allfiles = self.recmng.get_recordfiles()
     if data not in allfiles:
         return
     self.recmng.getlock()
     ret = -1
     try:
         ret = self.recmng.rm_recordfiles(data)
     finally:
         if ret == 0 or ret == 1:
             APPLOGGER.info('rm success')
         elif ret == -1:
             APPLOGGER.info('rm failed')
         reclist = self.recmng.get_recordfiles()
         msg = 'records|'
         msg += ','.join(reclist)
         self.request.sendall(msg)
         self.request.close()
         self.recmng.releaselock()
Пример #13
0
 def __start(self, form):
     """ start the video process """
     _ = form
     self.vvpmng.getlock()
     self.vvpmng.process_cmd.record = False
     self.vvpmng.process_cmd.recordfname = ''
     try:
         if not self.vvpmng.isset():
             self.vvpmng.start()
             self.__sendmsg(200, self.vvpmng.process_cmd.cmd())
             APPLOGGER.info('video server run.')
         else:
             if self.vvpmng.isrun():
                 APPLOGGER.info('already run subprocess: ' +
                                str(self.vvpmng.currpid()))
                 APPLOGGER.info('video process already run.')
                 self.__sendmsg(200, 'already run')
             else:
                 APPLOGGER.info('subprocess not running')
         APPLOGGER.info('activeCount is ' + str(threading.activeCount()))
     finally:
         self.vvpmng.releaselock()
Пример #14
0
 def __start(self, form):
     """ start the video process """
     _ = form
     self.vvpmng.getlock()
     self.vvpmng.process_cmd.record = False
     self.vvpmng.process_cmd.recordfname = ''
     try:
         if not self.vvpmng.isset():
             self.vvpmng.start()
             self.__sendmsg(200, self.vvpmng.process_cmd.cmd())
             APPLOGGER.info('video server run.')
         else:
             if self.vvpmng.isrun():
                 APPLOGGER.info('already run subprocess: ' +
                                str(self.vvpmng.currpid()))
                 APPLOGGER.info('video process already run.')
                 self.__sendmsg(200, 'already run')
             else:
                 APPLOGGER.info('subprocess not running')
         APPLOGGER.info('activeCount is ' + str(threading.activeCount()))
     finally:
         self.vvpmng.releaselock()
Пример #15
0
 def __rm_records(self, data):
     """ remove video record """
     data = data.lstrip('rm_records|')
     data = data.strip('\n')
     allfiles = self.recmng.get_recordfiles()
     if data not in allfiles:
         return
     self.recmng.getlock()
     ret = -1
     try:
         ret = self.recmng.rm_recordfiles(data)
     finally:
         if ret == 0 or ret == 1:
             APPLOGGER.info('rm success')
         elif ret == -1:
             APPLOGGER.info('rm failed')
         reclist = self.recmng.get_recordfiles()
         msg = 'records|'
         msg += ','.join(reclist)
         self.request.sendall(msg)
         self.request.close()
         self.recmng.releaselock()
Пример #16
0
    def gen_recordfname(self):
        """ generate the video filename """
        currtime = gmtime()
        rec_sub_dir_name = ''
        rec_sub_dir_name += str(currtime.tm_year) + '_'
        rec_sub_dir_name += str(currtime.tm_mon) + '_'
        rec_sub_dir_name += str(currtime.tm_mday)
        day_recdir = self.__recordbase + '/' + rec_sub_dir_name
        filename = str(currtime.tm_hour) + ':' + \
                   str(currtime.tm_min) + ':' + \
                   str(currtime.tm_sec)
        whole_fname = day_recdir + '/' + filename
        try:
            if exists(day_recdir):
                if isdir(day_recdir):
                    if exists(whole_fname):
                        remove(whole_fname)
                else:
                    remove(day_recdir)
                    makedirs(day_recdir)
            else:
                makedirs(day_recdir)
        except OSError as ex:
            APPLOGGER.error(ex)

        # can record but don't have enough space
        try:
            if self.have_space():
                return whole_fname
            else:
                if self.cycle:
                    self.__free_space()
                    return whole_fname
                raise AppException('no space')
        except AppException as ex:
            APPLOGGER.info('free space is: ' + str(self.get_freespaces()))
            APPLOGGER.info('limit is : ' + str(self.lefthrhold))
            APPLOGGER.error(ex)
Пример #17
0
 def __stop(self):
     """ __stop_process """
     self.vvpmng.getlock()
     try:
         if not self.vvpmng.isset():
             APPLOGGER.warn('no process to stop')
             self.request.sendall(self.clientcmd_stop + '|' + '0')
             return  #just jump to finally
         if self.vvpmng.isrun():
             self.vvpmng.stop()
             APPLOGGER.warn('terminating..')
             self.vvpmng.setprocess(None)
             # fake done
             self.request.sendall(self.clientcmd_stop + '|' + '1')
         else:
             APPLOGGER.info('process is terminate')
             self.vvpmng.setprocess(None)
             self.request.sendall(self.clientcmd_stop + '|' + '0')
     finally:
         self.vvpmng.process_cmd.record = False
         self.vvpmng.process_cmd.recordfname = ''
         self.request.close()
         self.vvpmng.releaselock()
Пример #18
0
 def __start(self):
     """ start video process """
     self.vvpmng.getlock()
     try:
         self.vvpmng.process_cmd.record = False
         self.vvpmng.process_cmd.recordfname = ''
         if not self.vvpmng.isset():
             self.vvpmng.start()
             self.request.sendall(self.vvpmng.process_cmd.cmd())
             APPLOGGER.info('video server run.')
         else:
             if self.vvpmng.isrun():
                 APPLOGGER.info('already run subprocess: ' +
                                str(self.vvpmng.currpid()))
                 APPLOGGER.info('video process already run.')
                 self.request.sendall(self.clientcmd_start + '|' + '1')
                 self.request.sendall(self.vvpmng.process_cmd.cmd())
             else:
                 APPLOGGER.info('subprocess not running')
         APPLOGGER.info('activeCount is ' + str(threading.activeCount()))
     finally:
         self.request.close()
         self.vvpmng.releaselock()
Пример #19
0
 def __start(self):
     """ start video process """
     self.vvpmng.getlock()
     try:
         self.vvpmng.process_cmd.record = False
         self.vvpmng.process_cmd.recordfname = ''
         if not self.vvpmng.isset():
             self.vvpmng.start()
             self.request.sendall(self.vvpmng.process_cmd.cmd())
             APPLOGGER.info('video server run.')
         else:
             if self.vvpmng.isrun():
                 APPLOGGER.info('already run subprocess: ' +
                                str(self.vvpmng.currpid()))
                 APPLOGGER.info('video process already run.')
                 self.request.sendall(self.clientcmd_start + '|' + '1')
                 self.request.sendall(self.vvpmng.process_cmd.cmd())
             else:
                 APPLOGGER.info('subprocess not running')
         APPLOGGER.info('activeCount is ' + str(threading.activeCount()))
     finally:
         self.request.close()
         self.vvpmng.releaselock()
Пример #20
0
 def __stop(self):
     """ __stop_process """
     self.vvpmng.getlock()
     try:
         if not self.vvpmng.isset():
             APPLOGGER.warn('no process to stop')
             self.request.sendall(self.clientcmd_stop + '|' + '0')
             return #just jump to finally
         if self.vvpmng.isrun():
             self.vvpmng.stop()
             APPLOGGER.warn('terminating..')
             self.vvpmng.setprocess(None)
             # fake done
             self.request.sendall(self.clientcmd_stop + '|' + '1')
         else:
             APPLOGGER.info('process is terminate')
             self.vvpmng.setprocess(None)
             self.request.sendall(self.clientcmd_stop + '|' + '0')
     finally:
         self.vvpmng.process_cmd.record = False
         self.vvpmng.process_cmd.recordfname = ''
         self.request.close()
         self.vvpmng.releaselock()
Пример #21
0
def vodserve(cfg):
    """ vod serve """
    ipaddr = cfg.comm_port.address
    serve_port = cfg.comm_port.vod_port
    try:
        if ipaddr is '':
            raise AppException('get local ip exp')
        if int(serve_port) <= 0 or int(serve_port) > 65535:
            raise AppException('port num err')
    except AppException as ex:
        APPLOGGER.error(ex)
        sys.exit(1)
    APPLOGGER.info('Server Up IP=%s PORT=%s', ipaddr, serve_port)
    server = None
    try:
        server = VODServer((ipaddr, serve_port), VODReqHandler)
    except sockerror as ex:
        APPLOGGER.error(ex)
        sys.exit(1)
    if server:
        server.serve_forever()
    else:
        APPLOGGER.error('vod server start error')
Пример #22
0
def vodserve(cfg):
    """ vod serve """
    ipaddr = cfg.comm_port.address
    serve_port = cfg.comm_port.vod_port
    try:
        if ipaddr is '':
            raise AppException('get local ip exp')
        if int(serve_port) <= 0 or int(serve_port) > 65535:
            raise AppException('port num err')
    except AppException as ex:
        APPLOGGER.error(ex)
        sys.exit(1)
    APPLOGGER.info('Server Up IP=%s PORT=%s', ipaddr, serve_port)
    server = None
    try:
        server = VODServer((ipaddr, serve_port), VODReqHandler)
    except sockerror as ex:
        APPLOGGER.error(ex)
        sys.exit(1)
    if server:
        server.serve_forever()
    else:
        APPLOGGER.error('vod server start error')
Пример #23
0
    def gen_recordfname(self):
        """ generate the video filename """
        currtime = gmtime()
        rec_sub_dir_name = ""
        rec_sub_dir_name += str(currtime.tm_year) + "_"
        rec_sub_dir_name += str(currtime.tm_mon) + "_"
        rec_sub_dir_name += str(currtime.tm_mday)
        day_recdir = self.__recordbase + "/" + rec_sub_dir_name
        filename = str(currtime.tm_hour) + ":" + str(currtime.tm_min) + ":" + str(currtime.tm_sec)
        whole_fname = day_recdir + "/" + filename
        try:
            if exists(day_recdir):
                if isdir(day_recdir):
                    if exists(whole_fname):
                        remove(whole_fname)
                else:
                    remove(day_recdir)
                    makedirs(day_recdir)
            else:
                makedirs(day_recdir)
        except OSError as ex:
            APPLOGGER.error(ex)

        # can record but don't have enough space
        try:
            if self.have_space():
                return whole_fname
            else:
                if self.cycle:
                    self.__free_space()
                    return whole_fname
                raise AppException("no space")
        except AppException as ex:
            APPLOGGER.info("free space is: " + str(self.get_freespaces()))
            APPLOGGER.info("limit is : " + str(self.lefthrhold))
            APPLOGGER.error(ex)
Пример #24
0
 def __rm_records(self, form):
     """ remove video record """
     para_key = 'rm_fname'
     file2rm = ''
     if para_key in form.keys():
         file2rm = form[para_key].value
     else:
         return
     if file2rm:
         allfiles = self.recmng.get_recordfiles()
         if file2rm not in allfiles:
             return
     self.recmng.getlock()
     ret = -1
     try:
         ret = self.recmng.rm_recordfiles(file2rm)
     finally:
         if ret == 0 or ret == 1:
             APPLOGGER.info('rm success')
         elif ret == -1:
             APPLOGGER.info('rm failed')
         reclist = self.recmng.get_recordfiles()
         self.__sendmsg(200, any2json_fstr(reclist))
         self.recmng.releaselock()
Пример #25
0
 def __rm_records(self, form):
     """ remove video record """
     para_key = 'rm_fname'
     file2rm = ''
     if para_key in form.keys():
         file2rm = form[para_key].value
     else:
         return
     if file2rm:
         allfiles = self.recmng.get_recordfiles()
         if file2rm not in allfiles:
             return
     self.recmng.getlock()
     ret = -1
     try:
         ret = self.recmng.rm_recordfiles(file2rm)
     finally:
         if ret == 0 or ret == 1:
             APPLOGGER.info('rm success')
         elif ret == -1:
             APPLOGGER.info('rm failed')
         reclist = self.recmng.get_recordfiles()
         self.__sendmsg(200, any2json_fstr(reclist))
         self.recmng.releaselock()
Пример #26
0
def signal_handler(signals, frame):
    """ handle ctrl -c """
    _, _ = signals, frame
    if PROCESSMNG == None:
        APPLOGGER.info('Process control object is None')
        return
    APPLOGGER.info('server exiting..')
    PROCESSMNG.getlock()
    try:
        if PROCESSMNG.isset():
            if PROCESSMNG.isrun():
                os.killpg(PROCESSMNG.currpid(), signal.SIGTERM)
    finally:
        PROCESSMNG.releaselock()

    APPLOGGER.info('shutdown complete')
    sys.exit(0)
Пример #27
0
def signal_handler(signals, frame):
    """ handle ctrl -c """
    _, _ = signals, frame
    if PROCESSMNG == None:
        APPLOGGER.info('Process control object is None')
        return
    APPLOGGER.info('server exiting..')
    PROCESSMNG.getlock()
    try:
        if PROCESSMNG.isset():
            if PROCESSMNG.isrun():
                os.killpg(PROCESSMNG.currpid(), signal.SIGTERM)
    finally:
        PROCESSMNG.releaselock()

    APPLOGGER.info('shutdown complete')
    sys.exit(0)
Пример #28
0
 def stop(self):
     """ kill video process """
     if self.isset() and self.isrun():
         os.killpg(self.__vvprocess.pid, signal.SIGTERM)
         APPLOGGER.info('send video process stoped signal')