diff --git a/actors/src/setup-dialog.ui b/actors/src/setup-dialog.ui index a0245e156..1db911e14 100644 --- a/actors/src/setup-dialog.ui +++ b/actors/src/setup-dialog.ui @@ -68,6 +68,12 @@ 23 + + + 0 + 0 + + 101 @@ -93,6 +99,12 @@ 23 + + + 0 + 0 + + 111 @@ -115,7 +127,7 @@ 20 20 361 - 131 + 146 diff --git a/actors/src/test.py b/actors/src/test.py index 0f02a3858..5a4d1f5c5 100644 --- a/actors/src/test.py +++ b/actors/src/test.py @@ -12,9 +12,9 @@ def testRest(): print "Intefaces: ", list(operations.getNetworkInfo()) print "Joined Domain: ", operations.getDomainName() - #renameComputer('win7-64') - #joinDomain('dom.dkmon.com', 'ou=pruebas_2,dc=dom,dc=dkmon,dc=com', 'administrador@dom.dkmon.com', 'Temporal2012', True) - #reboot() + # renameComputer('win7-64') + # joinDomain('dom.dkmon.com', 'ou=pruebas_2,dc=dom,dc=dkmon,dc=com', 'administrador@dom.dkmon.com', 'Temporal2012', True) + # reboot() r = REST.Api(cfg['host'], cfg['masterKey'], cfg['ssl'], scrambledResponses=True) print "Connected: {}".format(r.isConnected) r.test() @@ -30,14 +30,15 @@ def testRest(): print 'uuid = {}'.format(uuid) - #print 'Login: {}'.format(r.login('test-user')) - #print 'Logout: {}'.format(r.logout('test-user')) + # print 'Login: {}'.format(r.login('test-user')) + # print 'Logout: {}'.format(r.logout('test-user')) print "Information: >>{}<<".format(r.information()) print "Login: >>{}<<".format(r.login('Pepito')) print r.setReady([(v.mac, v.ip) for v in operations.getNetworkInfo()]) print r.log(10000, 'Test error message') + def ipcTest(): from udsactor import ipc from time import sleep @@ -80,15 +81,15 @@ def ipcTest(): client2.join() s.join() + def ipcServer(): from udsactor import ipc - from win32api import Sleep + from time import sleep s = ipc.ServerIPC(39188, {'idle': 180}) # I have got the enterprise number for Virtual Cable. This number is not about ports, but as good as any other selection :) s.start() - counter = 0 while True: try: @@ -99,33 +100,35 @@ def ipcServer(): s.sendMessage(ipc.MSG_SCRIPT, 'print "This is a test message ñöitó 33.3€ {}"'.format(counter)) counter += 1 s.sendMessage(ipc.MSG_LOGOFF, None) - Sleep(1000) + sleep(1) except: break s.stop() + def testIdle(): from udsactor import operations - from win32api import Sleep + from time import sleep for i in xrange(1, 10): print operations.getIdleDuration() - Sleep(1000) + sleep(1) + def testServer(): - from win32api import Sleep import random import requests import json import logging + from time import sleep from udsactor import httpserver from udsactor import ipc # Disable verify warinings logging.getLogger("requests").setLevel(logging.ERROR) - requests.packages.urllib3.disable_warnings() + # requests.packages.urllib3.disable_warnings() # @UndefinedVariable s = ipc.ServerIPC(39188) # I have got the enterprise number for Virtual Cable. This number is not about ports, but as good as any other selection :) @@ -167,16 +170,17 @@ def testServer(): print client.getMessage() print client.getMessage() - #try: + # try: # while True: # Sleep(1000) - #except: + # except: # pass server.stop() s.stop() client.stop() + def testRemote(): import requests import json @@ -202,9 +206,10 @@ def testRemote(): if __name__ == '__main__': - #ipcServer() - #testRest() - #testIdle() - testServer() - #testRemote() + # ipcServer() + ipcTest() + # testRest() + # testIdle() + # testServer() + # testRemote() diff --git a/actors/src/udsactor/ipc.py b/actors/src/udsactor/ipc.py index 6fa9a5445..4b6c11bcb 100644 --- a/actors/src/udsactor/ipc.py +++ b/actors/src/udsactor/ipc.py @@ -134,6 +134,7 @@ class ServerIPC(threading.Thread): self.port = listenPort self.running = False self.serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.threads = [] self.infoParams = infoParams diff --git a/actors/src/udsactor/linux/log.py b/actors/src/udsactor/linux/log.py new file mode 100644 index 000000000..13571a704 --- /dev/null +++ b/actors/src/udsactor/linux/log.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2014 Virtual Cable S.L. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# * Neither the name of Virtual Cable S.L. nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +''' +@author: Adolfo Gómez, dkmaster at dkmon dot com +''' +from __future__ import unicode_literals + +import logging +import os +import tempfile + +# Valid logging levels, from UDS Broker (uds.core.utils.log) +OTHER, DEBUG, INFO, WARN, ERROR, FATAL = (10000 * (x + 1) for x in xrange(6)) + + +class LocalLogger(object): + def __init__(self): + # tempdir is different for "user application" and "service" + # service wil get c:\windows\temp, while user will get c:\users\XXX\temp + logging.basicConfig( + filename=os.path.join(tempfile.gettempdir(), 'udsactor.log'), + filemode='a', + format='%(levelname)s %(asctime)s %(message)s', + level=logging.DEBUG + ) + self.logger = logging.getLogger('udsactor') + + def log(self, level, message): + # Debug messages are logged to a file + # our loglevels are 10000 (other), 20000 (debug), .... + # logging levels are 10 (debug), 20 (info) + # OTHER = logging.NOTSET + self.logger.log(level / 1000 - 10, message) + + def isWindows(self): + return False + + def isLinux(self): + return True diff --git a/actors/src/udsactor/log.py b/actors/src/udsactor/log.py index 76c6c350a..add83f53f 100644 --- a/actors/src/udsactor/log.py +++ b/actors/src/udsactor/log.py @@ -35,7 +35,7 @@ import sys if sys.platform == 'win32': from udsactor.windows.log import LocalLogger else: - pass + from udsactor.linux.log import LocalLogger # Valid logging levels, from UDS Broker (uds.core.utils.log) OTHER, DEBUG, INFO, WARN, ERROR, FATAL = (10000 * (x + 1) for x in xrange(6)) diff --git a/linuxActor/src/uds/actor/config.py b/linuxActor/src/uds/actor/config.py index 0176141d4..370e726ba 100644 --- a/linuxActor/src/uds/actor/config.py +++ b/linuxActor/src/uds/actor/config.py @@ -17,11 +17,13 @@ import os # backups = Number of backups to keep of log file (defaults to 3) -import ConfigParser, logging, sys +import ConfigParser +import logging +import sys CONFIGFILE = '/etc/udsactor/udsactor.cfg' -cfg = ConfigParser.SafeConfigParser(defaults={ 'server' : '', 'ssl' : False, 'timeout' : '10', +cfg = ConfigParser.SafeConfigParser(defaults={ 'server' : '', 'ssl' : False, 'timeout' : '10', 'log' : '/tmp/udsactor.log', 'debug' : 'ERROR', 'maxsize' : '20', 'backups' : '3' }) cfg.read(CONFIGFILE) @@ -38,7 +40,7 @@ try: 'timeout' : cfg.getint('broker', 'timeout'), 'log' : cfg.get('logging', 'log'), 'debug' : levels.get(cfg.get('logging', 'debug'), logging.ERROR), - 'maxsize' : cfg.getint('logging', 'maxsize')*1024*1024, + 'maxsize' : cfg.getint('logging', 'maxsize') * 1024 * 1024, 'backups' : cfg.getint('logging', 'backups') } # Config file is used only in "root mode", in user mode we overwrite it