From 8516fa921c448fc00dd758dc5531af02ead367c9 Mon Sep 17 00:00:00 2001 From: iridiumR Date: Mon, 7 Aug 2023 23:15:58 +0800 Subject: [PATCH] change format to json --- PKGBUILD | 6 +-- uptimes | 117 ++++++++++++++++++++++++++++++++----------------------- 2 files changed, 71 insertions(+), 52 deletions(-) diff --git a/PKGBUILD b/PKGBUILD index 6d87b54..dd8d878 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,7 +1,7 @@ # Maintainer: 1ridic pkgname=uptimes -pkgver=0.1.4 -pkgrel=2 +pkgver=0.1.7 +pkgrel=1 pkgdesc="status of total uptime" arch=('any') url="" @@ -11,7 +11,7 @@ source=( local://uptimes local://uptimesd.service ) -md5sums=('17dfb70e8c5d7c21d13fca3f16c07d02' +md5sums=('a0d8fd353a37f14508367cb968601309' '7a90889f87792317e70ebdce9dae7023') package() { diff --git a/uptimes b/uptimes index ce80fda..870ec53 100755 --- a/uptimes +++ b/uptimes @@ -6,6 +6,7 @@ import sys import argparse import signal import socket +import json startTime = 0 uptime = 0 @@ -14,6 +15,48 @@ s = 0 socket_file = '/run/uptimesd.sock' uptimes_db = '/etc/uptimes/uptimes.db' +def readUpTime(): + global uptime,startTime + + with open('/proc/uptime', 'r') as f: + uptime = f.readline() + uptime = uptime.split(' ')[0] + uptime = float(uptime) + return uptime + +def updateTime(): + global uptime, startTime + now = readUpTime() + if uptime == 0: + with open(uptimes_db, 'r') as f: + j = f.readline() + j = json.loads(j) + uptime = float(j['uptime']) + + if startTime == 0: + startTime = now + uptime += now - startTime + pathExists() + with open(uptimes_db, 'w') as f: + j = json.dumps({'uptime': uptime}) + f.write(j) + +def pathExists(): + # if /etc/uptimes/uptimes.db exist + if os.path.exists(uptimes_db): + return True + else: + folder = uptimes_db.split('/') + folder.pop() + folder = '/'.join(folder) + if not os.path.exists(folder): + # create folder with 600 + os.mkdir(folder, 0o600) + # create uptimes.db with 600 + with open(uptimes_db, 'w') as f: + os.chmod(uptimes_db, 0o600) + + def main(): global uptime, s parse = argparse.ArgumentParser(description='Uptimes') @@ -49,50 +92,15 @@ def main(): print('Total Uptime: %d years %d days %d hours %d minutes %d seconds' % (years, days, hours, minutes, seconds)) -def readUpTime(): - global uptime,startTime - - with open('/proc/uptime', 'r') as f: - uptime = f.readline() - uptime = uptime.split(' ')[0] - uptime = float(uptime) - return uptime - -def pathExists(): - # if /etc/uptimes/uptimes.db exist - if os.path.exists(uptimes_db): - # check permissions - if os.stat(uptimes_db).st_mode != 0o600: - # change permissions - os.chmod(uptimes_db, 0o600) - - # check the content - with open(uptimes_db, 'r') as f: - content = f.readline() - if content == '': - # write 0 - with open(uptimes_db, 'w') as f: - f.write('0') - os.chmod(uptimes_db, 0o600) - - else: - folder = uptimes_db.split('/') - folder.pop() - folder = '/'.join(folder) - if not os.path.exists(folder): - # create folder with 600 - os.mkdir(folder, 0o600) - # create uptimes.db with 600 - with open(uptimes_db, 'w') as f: - f.write('0') - os.chmod(uptimes_db, 0o600) - - def daemon(fork = True): global uptime, now, s + print('Uptimesd starting...') + sys.stdout.flush() + if os.path.exists(socket_file): print('Uptimesd already running') + sys.stdout.flush() sys.exit(1) # fork @@ -137,6 +145,9 @@ def daemon(fork = True): import setproctitle setproctitle.setproctitle('uptimesd') + print('Creating socket...') + sys.stdout.flush() + s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.bind(socket_file) # socket file permission 777 @@ -151,9 +162,14 @@ def daemon(fork = True): pathExists() # read uptime - with open(uptimes_db, 'r') as f: - uptime = f.readline() - uptime = float(uptime) + + print('Reading db...') + sys.stdout.flush() + + readUpTime() + print('Uptime before: %f' % uptime) + print('Uptimesd started') + sys.stdout.flush() while True: conn, addr = s.accept() @@ -184,15 +200,10 @@ def daemon(fork = True): conn.close() continue -def updateTime(): - global uptime, startTime - now = readUpTime() - uptime += now - startTime - pathExists() - with open(uptimes_db, 'w') as f: - f.write(str(uptime)) def sigterm_handler(signo, frame): + print('Uptimesd stopping...') + sys.stdout.flush() # update uptime updateTime() # close socket @@ -200,6 +211,14 @@ def sigterm_handler(signo, frame): if os.path.exists(socket_file): os.unlink(socket_file) # exit + print('Uptimesd stopped. Goodbye.') + sys.stdout.flush() + + with open(uptimes_db, 'r') as f: + uptime = f.readline() + print('Total Uptime: ' + uptime + ' seconds') + sys.stdout.flush() + sys.exit(0) def comm(command):