Skip to content

Commit 6a35720

Browse files
authored
Merge pull request #69 from Mips2648/master
fix memory leak in jeedom_com & small code quality improvment
2 parents 08c971c + a3e9318 commit 6a35720

File tree

2 files changed

+335
-369
lines changed

2 files changed

+335
-369
lines changed

resources/demond/demond.py

Lines changed: 57 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -14,73 +14,64 @@
1414
# along with Jeedom. If not, see <http://www.gnu.org/licenses/>.
1515

1616
import logging
17-
import string
1817
import sys
1918
import os
2019
import time
21-
import datetime
2220
import traceback
23-
import re
2421
import signal
25-
from optparse import OptionParser
26-
from os.path import join
2722
import json
2823
import argparse
2924

30-
try:
31-
from jeedom.jeedom import *
32-
except ImportError:
33-
print("Error: importing module jeedom.jeedom")
34-
sys.exit(1)
25+
from jeedom.jeedom import jeedom_socket, jeedom_utils, jeedom_com, JEEDOM_SOCKET_MESSAGE # jeedom_serial
26+
3527

3628
def read_socket():
37-
global JEEDOM_SOCKET_MESSAGE
38-
if not JEEDOM_SOCKET_MESSAGE.empty():
39-
logging.debug("Message received in socket JEEDOM_SOCKET_MESSAGE")
40-
message = json.loads(jeedom_utils.stripped(JEEDOM_SOCKET_MESSAGE.get()))
41-
if message['apikey'] != _apikey:
42-
logging.error("Invalid apikey from socket: %s", message)
43-
return
44-
try:
45-
print ('read')
46-
except Exception as e:
47-
logging.error('Send command to demon error: %s' ,e)
29+
if not JEEDOM_SOCKET_MESSAGE.empty():
30+
logging.debug("Message received in socket JEEDOM_SOCKET_MESSAGE")
31+
message = json.loads(jeedom_utils.stripped(JEEDOM_SOCKET_MESSAGE.get()))
32+
if message['apikey'] != _apikey:
33+
logging.error("Invalid apikey from socket: %s", message)
34+
return
35+
try:
36+
print('read')
37+
except Exception as e:
38+
logging.error('Send command to demon error: %s', e)
39+
4840

4941
def listen():
50-
jeedom_socket.open()
51-
try:
52-
while 1:
53-
time.sleep(0.5)
54-
read_socket()
55-
except KeyboardInterrupt:
56-
shutdown()
42+
my_jeedom_socket.open()
43+
try:
44+
while 1:
45+
time.sleep(0.5)
46+
read_socket()
47+
except KeyboardInterrupt:
48+
shutdown()
5749

58-
# ----------------------------------------------------------------------------
5950

6051
def handler(signum=None, frame=None):
61-
logging.debug("Signal %i caught, exiting...", int(signum))
62-
shutdown()
52+
logging.debug("Signal %i caught, exiting...", int(signum))
53+
shutdown()
54+
6355

6456
def shutdown():
65-
logging.debug("Shutdown")
66-
logging.debug("Removing PID file %s", _pidfile)
67-
try:
68-
os.remove(_pidfile)
69-
except:
70-
pass
71-
try:
72-
jeedom_socket.close()
73-
except:
74-
pass
75-
try:
76-
jeedom_serial.close()
77-
except:
78-
pass
79-
logging.debug("Exit 0")
80-
sys.stdout.flush()
81-
os._exit(0)
82-
83-
# ----------------------------------------------------------------------------
57+
logging.debug("Shutdown")
58+
logging.debug("Removing PID file %s", _pidfile)
59+
try:
60+
os.remove(_pidfile)
61+
except Exception as e:
62+
logging.warning('Error removing PID file: %s', e)
63+
try:
64+
my_jeedom_socket.close()
65+
except Exception as e:
66+
logging.warning('Error closing socket: %s', e)
67+
# try: # if you need jeedom_serial
68+
# my_jeedom_serial.close()
69+
# except Exception as e:
70+
# logging.warning('Error closing serial: %s', e)
71+
logging.debug("Exit 0")
72+
sys.stdout.flush()
73+
os._exit(0)
74+
8475

8576
_log_level = "error"
8677
_socket_port = 55009
@@ -91,19 +82,18 @@ def shutdown():
9182
_callback = ''
9283
_cycle = 0.3
9384

94-
parser = argparse.ArgumentParser(
95-
description='Desmond Daemon for Jeedom plugin')
85+
parser = argparse.ArgumentParser(description='Desmond Daemon for Jeedom plugin')
9686
parser.add_argument("--device", help="Device", type=str)
9787
parser.add_argument("--loglevel", help="Log Level for the daemon", type=str)
9888
parser.add_argument("--callback", help="Callback", type=str)
9989
parser.add_argument("--apikey", help="Apikey", type=str)
100-
parser.add_argument("--cycle", help="Cycle to send event", type=str)
90+
parser.add_argument("--cycle", help="Cycle to send event", type=float)
10191
parser.add_argument("--pid", help="Pid file", type=str)
102-
parser.add_argument("--socketport", help="Port for Zigbee server", type=str)
92+
parser.add_argument("--socketport", help="Port for socket server", type=int)
10393
args = parser.parse_args()
10494

10595
if args.device:
106-
_device = args.device
96+
_device = args.device
10797
if args.loglevel:
10898
_log_level = args.loglevel
10999
if args.callback:
@@ -115,7 +105,7 @@ def shutdown():
115105
if args.cycle:
116106
_cycle = float(args.cycle)
117107
if args.socketport:
118-
_socketport = args.socketport
108+
_socket_port = args.socketport
119109

120110
_socket_port = int(_socket_port)
121111

@@ -133,10 +123,15 @@ def shutdown():
133123
signal.signal(signal.SIGTERM, handler)
134124

135125
try:
136-
jeedom_utils.write_pid(str(_pidfile))
137-
jeedom_socket = jeedom_socket(port=_socket_port,address=_socket_host)
138-
listen()
126+
jeedom_utils.write_pid(str(_pidfile))
127+
my_jeedom_com = jeedom_com(apikey=_apikey, url=_callback, cycle=_cycle)
128+
if not my_jeedom_com.test():
129+
logging.error('Network communication issues. Please fixe your Jeedom network configuration.')
130+
shutdown()
131+
# my_jeedom_serial = jeedom_serial(device=_device) # if you need jeedom_serial
132+
my_jeedom_socket = jeedom_socket(port=_socket_port, address=_socket_host)
133+
listen()
139134
except Exception as e:
140-
logging.error('Fatal error: %s', e)
141-
logging.info(traceback.format_exc())
142-
shutdown()
135+
logging.error('Fatal error: %s', e)
136+
logging.info(traceback.format_exc())
137+
shutdown()

0 commit comments

Comments
 (0)