Beremiz_service.py
changeset 2245 fe3394697b02
parent 2189 49a6738b7c63
parent 2222 8ac0f1af5589
child 2249 602fdd08dfab
equal deleted inserted replaced
2244:42566291b9bc 2245:fe3394697b02
    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 
   569         self.run = run_with_except_hook
   569         self.run = run_with_except_hook
   570     threading.Thread.__init__ = init
   570     threading.Thread.__init__ = init
   571 
   571 
   572 
   572 
   573 installThreadExcepthook()
   573 installThreadExcepthook()
       
   574 havewamp = False
   574 
   575 
   575 if havetwisted:
   576 if havetwisted:
   576     if webport is not None:
   577     if webport is not None:
   577         try:
   578         try:
   578             import runtime.NevowServer as NS  # pylint: disable=ungrouped-imports
   579             import runtime.NevowServer as NS  # pylint: disable=ungrouped-imports
   579         except Exception, e:
   580         except Exception:
   580             print(_("Nevow/Athena import failed :"), e)
   581             LogMessageAndException(_("Nevow/Athena import failed :"))
   581             webport = None
   582             webport = None
   582         NS.WorkingDir = WorkingDir
   583         NS.WorkingDir = WorkingDir
   583 
   584 
   584     # Find pre-existing project WAMP config file
   585     try:
   585     _wampconf = os.path.join(WorkingDir, "wampconf.json")
   586         import runtime.WampClient as WC  # pylint: disable=ungrouped-imports
   586 
   587         WC.WorkingDir = WorkingDir
   587     # If project's WAMP config file exits, override default (-c)
   588         havewamp = True
   588     if os.path.exists(_wampconf):
   589     except Exception:
   589         wampconf = _wampconf
   590         LogMessageAndException(_("WAMP import failed :"))
   590 
       
   591     if wampconf is not None:
       
   592         try:
       
   593             import runtime.WampClient as WC  # pylint: disable=ungrouped-imports
       
   594         except Exception, e:
       
   595             print(_("WAMP import failed :"), e)
       
   596             wampconf = None
       
   597 
   591 
   598 # Load extensions
   592 # Load extensions
   599 for extention_file, extension_folder in extensions:
   593 for extention_file, extension_folder in extensions:
   600     sys.path.append(extension_folder)
   594     sys.path.append(extension_folder)
   601     execfile(os.path.join(extension_folder, extention_file), locals())
   595     execfile(os.path.join(extension_folder, extention_file), locals())
   603 if havetwisted:
   597 if havetwisted:
   604     if webport is not None:
   598     if webport is not None:
   605         try:
   599         try:
   606             website = NS.RegisterWebsite(webport)
   600             website = NS.RegisterWebsite(webport)
   607             pyruntimevars["website"] = website
   601             pyruntimevars["website"] = website
       
   602             NS.SetServer(pyroserver)
   608             statuschange.append(NS.website_statuslistener_factory(website))
   603             statuschange.append(NS.website_statuslistener_factory(website))
   609         except Exception:
   604         except Exception:
   610             LogMessageAndException(_("Nevow Web service failed. "))
   605             LogMessageAndException(_("Nevow Web service failed. "))
   611 
   606 
   612     if wampconf is not None:
   607     if havewamp:
   613         try:
   608         try:
   614             _wampconf = WC.LoadWampClientConf(wampconf)
   609             WC.SetServer(pyroserver)
   615             if _wampconf:
   610             WC.RegisterWampClient(wampconf, wampsecret)
   616                 if _wampconf["url"]:  # TODO : test more ?
   611             WC.RegisterWebSettings(NS)
   617                     WC.RegisterWampClient(wampconf, wampsecret)
       
   618                     pyruntimevars["wampsession"] = WC.GetSession
       
   619                     WC.SetServer(pyroserver)
       
   620                 else:
       
   621                     raise Exception(_("WAMP config is incomplete."))
       
   622             else:
       
   623                 raise Exception(_("WAMP config is missing."))
       
   624         except Exception:
   612         except Exception:
   625             LogMessageAndException(_("WAMP client startup failed. "))
   613             LogMessageAndException(_("WAMP client startup failed. "))
   626 
   614 
   627 pyro_thread_started = Lock()
   615 pyro_thread_started = Lock()
   628 pyro_thread_started.acquire()
   616 pyro_thread_started.acquire()