Beremiz_service.py
changeset 2225 2a9549e4380e
parent 2222 8ac0f1af5589
child 2245 fe3394697b02
equal deleted inserted replaced
2188:7f59aa398669 2225:2a9549e4380e
    43 
    43 
    44 def usage():
    44 def usage():
    45     print("""
    45     print("""
    46 Usage of Beremiz PLC execution service :\n
    46 Usage of Beremiz PLC execution service :\n
    47 %s {[-n servicename] [-i IP] [-p port] [-x enabletaskbar] [-a autostart]|-h|--help} working_dir
    47 %s {[-n servicename] [-i IP] [-p port] [-x enabletaskbar] [-a autostart]|-h|--help} working_dir
    48            -n        - zeroconf service name (default:disabled)
    48   -n  zeroconf service name (default:disabled)
    49            -i        - IP address of interface to bind to (default:localhost)
    49   -i  IP address of interface to bind to (default:localhost)
    50            -p        - port number default:3000
    50   -p  port number default:3000
    51            -h        - print this help text and quit
    51   -h  print this help text and quit
    52            -a        - autostart PLC (0:disable 1:enable) (default:0)
    52   -a  autostart PLC (0:disable 1:enable) (default:0)
    53            -x        - enable/disable wxTaskbarIcon (0:disable 1:enable) (default:1)
    53   -x  enable/disable wxTaskbarIcon (0:disable 1:enable) (default:1)
    54            -t        - enable/disable Twisted web interface (0:disable 1:enable) (default:1)
    54   -t  enable/disable Twisted web interface (0:disable 1:enable) (default:1)
    55            -w        - web server port or "off" to disable web server (default:8009)
    55   -w  web server port or "off" to disable web server (default:8009)
    56            -c        - WAMP client default config file (default:wampconf.json)
    56   -c  WAMP client config file (can be overriden by wampconf.json in project)
    57            -s        - WAMP client secret, given as a file
    57   -s  WAMP client secret, given as a file (can be overriden by wamp.secret in project)
    58            -e        - python extension (absolute path .py)
    58   -e  python extension (absolute path .py)
    59 
    59 
    60            working_dir - directory where are stored PLC files
    60            working_dir - directory where are stored PLC files
    61 """ % sys.argv[0])
    61 """ % sys.argv[0])
    62 
    62 
    63 
    63 
   580         self.run = run_with_except_hook
   580         self.run = run_with_except_hook
   581     threading.Thread.__init__ = init
   581     threading.Thread.__init__ = init
   582 
   582 
   583 
   583 
   584 installThreadExcepthook()
   584 installThreadExcepthook()
       
   585 havewamp = False
   585 
   586 
   586 if havetwisted:
   587 if havetwisted:
   587     if webport is not None:
   588     if webport is not None:
   588         try:
   589         try:
   589             import runtime.NevowServer as NS  # pylint: disable=ungrouped-imports
   590             import runtime.NevowServer as NS  # pylint: disable=ungrouped-imports
   590         except Exception, e:
   591         except Exception:
   591             print(_("Nevow/Athena import failed :"), e)
   592             LogMessageAndException(_("Nevow/Athena import failed :"))
   592             webport = None
   593             webport = None
   593         NS.WorkingDir = WorkingDir
   594         NS.WorkingDir = WorkingDir
   594 
   595 
   595     # Find pre-existing project WAMP config file
   596     try:
   596     _wampconf = os.path.join(WorkingDir, "wampconf.json")
   597         import runtime.WampClient as WC  # pylint: disable=ungrouped-imports
   597 
   598         WC.WorkingDir = WorkingDir
   598     # If project's WAMP config file exits, override default (-c)
   599         havewamp = True
   599     if os.path.exists(_wampconf):
   600     except Exception:
   600         wampconf = _wampconf
   601         LogMessageAndException(_("WAMP import failed :"))
   601 
       
   602     if wampconf is not None:
       
   603         try:
       
   604             import runtime.WampClient as WC  # pylint: disable=ungrouped-imports
       
   605         except Exception, e:
       
   606             print(_("WAMP import failed :"), e)
       
   607             wampconf = None
       
   608 
   602 
   609 # Load extensions
   603 # Load extensions
   610 for extention_file, extension_folder in extensions:
   604 for extention_file, extension_folder in extensions:
   611     sys.path.append(extension_folder)
   605     sys.path.append(extension_folder)
   612     execfile(os.path.join(extension_folder, extention_file), locals())
   606     execfile(os.path.join(extension_folder, extention_file), locals())
   614 if havetwisted:
   608 if havetwisted:
   615     if webport is not None:
   609     if webport is not None:
   616         try:
   610         try:
   617             website = NS.RegisterWebsite(webport)
   611             website = NS.RegisterWebsite(webport)
   618             pyruntimevars["website"] = website
   612             pyruntimevars["website"] = website
       
   613             NS.SetServer(pyroserver)
   619             statuschange.append(NS.website_statuslistener_factory(website))
   614             statuschange.append(NS.website_statuslistener_factory(website))
   620         except Exception:
   615         except Exception:
   621             LogMessageAndException(_("Nevow Web service failed. "))
   616             LogMessageAndException(_("Nevow Web service failed. "))
   622 
   617 
   623     if wampconf is not None:
   618     if havewamp:
   624         try:
   619         try:
   625             _wampconf = WC.LoadWampClientConf(wampconf)
   620             WC.SetServer(pyroserver)
   626             if _wampconf:
   621             WC.RegisterWampClient(wampconf, wampsecret)
   627                 if _wampconf["url"]:  # TODO : test more ?
   622             WC.RegisterWebSettings(NS)
   628                     WC.RegisterWampClient(wampconf, wampsecret)
       
   629                     pyruntimevars["wampsession"] = WC.GetSession
       
   630                     WC.SetServer(pyroserver)
       
   631                 else:
       
   632                     raise Exception(_("WAMP config is incomplete."))
       
   633             else:
       
   634                 raise Exception(_("WAMP config is missing."))
       
   635         except Exception:
   623         except Exception:
   636             LogMessageAndException(_("WAMP client startup failed. "))
   624             LogMessageAndException(_("WAMP client startup failed. "))
   637 
   625 
   638 pyro_thread_started = Lock()
   626 pyro_thread_started = Lock()
   639 pyro_thread_started.acquire()
   627 pyro_thread_started.acquire()