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('')
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')
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')
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('')
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')
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')
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')
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()
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()
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)
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)
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()
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()
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()
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()
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)
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()
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()
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()
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()
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')
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')
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)
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()
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()
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)
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)
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')