You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							86 lines
						
					
					
						
							2.4 KiB
						
					
					
				
			
		
		
	
	
							86 lines
						
					
					
						
							2.4 KiB
						
					
					
				| #!/usr/bin/env python3
 | |
| import errno
 | |
| import fcntl
 | |
| import os
 | |
| import signal
 | |
| import subprocess
 | |
| import sys
 | |
| import time
 | |
| 
 | |
| import requests
 | |
| 
 | |
| from common.params import Params
 | |
| from common.timeout import Timeout
 | |
| 
 | |
| HOST = "testing.comma.life"
 | |
| 
 | |
| 
 | |
| def unblock_stdout():
 | |
|   # get a non-blocking stdout
 | |
|   child_pid, child_pty = os.forkpty()
 | |
|   if child_pid != 0:  # parent
 | |
| 
 | |
|     # child is in its own process group, manually pass kill signals
 | |
|     signal.signal(signal.SIGINT, lambda signum, frame: os.kill(child_pid, signal.SIGINT))
 | |
|     signal.signal(signal.SIGTERM, lambda signum, frame: os.kill(child_pid, signal.SIGTERM))
 | |
| 
 | |
|     fcntl.fcntl(sys.stdout, fcntl.F_SETFL, fcntl.fcntl(sys.stdout, fcntl.F_GETFL) | os.O_NONBLOCK)
 | |
| 
 | |
|     while True:
 | |
|       try:
 | |
|         dat = os.read(child_pty, 4096)
 | |
|       except OSError as e:
 | |
|         if e.errno == errno.EIO:
 | |
|           break
 | |
|         continue
 | |
| 
 | |
|       if not dat:
 | |
|         break
 | |
| 
 | |
|       try:
 | |
|         sys.stdout.write(dat.decode('utf8'))
 | |
|       except (OSError, IOError, UnicodeDecodeError):
 | |
|         pass
 | |
| 
 | |
|     # os.wait() returns a tuple with the pid and a 16 bit value
 | |
|     # whose low byte is the signal number and whose high byte is the exit satus
 | |
|     exit_status = os.wait()[1] >> 8
 | |
|     os._exit(exit_status)
 | |
| 
 | |
| 
 | |
| def heartbeat():
 | |
|   work_dir = '/data/openpilot'
 | |
| 
 | |
|   while True:
 | |
|     try:
 | |
|       with open(os.path.join(work_dir, "selfdrive", "common", "version.h")) as _versionf:
 | |
|         version = _versionf.read().split('"')[1]
 | |
| 
 | |
|       tmux = ""
 | |
| 
 | |
|       # try:
 | |
|       #  tmux = os.popen('tail -n 100 /tmp/tmux_out').read()
 | |
|       # except Exception:
 | |
|       #  pass
 | |
| 
 | |
|       params = Params()
 | |
|       msg = {
 | |
|         'version': version,
 | |
|         'dongle_id': params.get("DongleId").rstrip().decode('utf8'),
 | |
|         'remote': subprocess.check_output(["git", "config", "--get", "remote.origin.url"], cwd=work_dir).decode('utf8').rstrip(),
 | |
|         'branch': subprocess.check_output(["git", "rev-parse", "--abbrev-ref", "HEAD"], cwd=work_dir).decode('utf8').rstrip(),
 | |
|         'revision': subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=work_dir).decode('utf8').rstrip(),
 | |
|         'serial': subprocess.check_output(["getprop", "ro.boot.serialno"]).decode('utf8').rstrip(),
 | |
|         'tmux': tmux,
 | |
|       }
 | |
|       with Timeout(10):
 | |
|         requests.post('http://%s/eon/heartbeat/' % HOST, json=msg, timeout=5.0)
 | |
|     except Exception as e:
 | |
|       print("Unable to send heartbeat", e)
 | |
| 
 | |
|     time.sleep(5)
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|   unblock_stdout()
 | |
|   heartbeat()
 | |
| 
 |