diff --git a/README.md b/README.md index 692ac6d..bcf2e70 100644 --- a/README.md +++ b/README.md @@ -2,17 +2,21 @@ This is a simple python tool that uses sysstat (sar) to plot cpu and ram usage. -Best used with screen: +Usage: +``` +$ python sargraph.py [session_name] [command] [arg] +``` + +Background use (requires screen): ``` -$ screen -dmSL chart python sargraph.py +$ python sargraph.py chart start $ sleep 1 -$ screen -S chart -X stuff "label1\n" +$ python sargraph.py chart label "label1" $ sleep 1 -$ screen -S chart -X stuff "label2\n" +$ python sargraph.py chart label "label2" $ sleep 1 -$ screen -S chart -X stuff "q\n" -$ sleep 3 +$ python sargraph.py chart stop ``` Or just: diff --git a/sargraph.py b/sargraph.py index 6965aac..1397810 100755 --- a/sargraph.py +++ b/sargraph.py @@ -27,6 +27,50 @@ def merge_dicts(x, y): res.update(y) return res +if len(sys.argv) > 1: + sid = sys.argv[1] + cmd = "" + if len(sys.argv) > 2: + cmd = sys.argv[2] + else: + print("Error: command not provided.") + sys.exit(1) + if cmd == "label" and len(sys.argv) != 4: + print("Error: label command requires an additional parameter") + sys.exit(1) + if cmd == "label": + label = sys.argv[3] + try: + p = subprocess.Popen(["screen", "-v"], stdout=subprocess.PIPE) + except: + print("Error: 'screen' tool not found!") + sys.exit(1) + if p.stdout.readline().decode().split(" ")[0] != "Screen": + print "Error: 'screen' tool returned unknown output!" + sys.exit(1) + if cmd == "start": + print("Starting sargraph session '%s'" % sid) + p = subprocess.Popen(["screen", "-dmSL", sid, os.path.realpath(__file__)]) + while p.poll() is None: + time.sleep(0.1) + + elif cmd == "stop": + print("Terminating sargraph session '%s'" % sid) + p = subprocess.Popen(["screen", "-S", sid, "-X", "stuff", "q\n"]) + while p.poll() is None: + time.sleep(0.1) + time.sleep(3) # TODO: work on that + elif cmd == "label": + print("Adding label '%s' to sargraph session '%s'." % (label, sid)) + p = subprocess.Popen(["screen", "-S", sid, "-X", "stuff", "%s\n" % label]) + while p.poll() is None: + time.sleep(0.1) + else: + print "Error: Unknown parameter '%s'" % cmd + sys.exit(1) + sys.exit(1) + + my_env = os.environ my_env["S_TIME_FORMAT"] = "ISO" @@ -178,6 +222,12 @@ while 1: if die: break +if i == 0: + f.close() + g("quit") + time.sleep(1) + sys.exit(0) + AVERAGE_LOAD = AVERAGE_LOAD / float(i) MAX_USED_RAM = MAX_USED_RAM / 1024.0 / 1024.0