From 16423eea5a5049cc24b200240d60f569d6c49a09 Mon Sep 17 00:00:00 2001
From: beudbeud <beudbeud@gbeudibox.fr>
Date: Thu, 1 Nov 2012 10:39:09 +0100
Subject: [PATCH] add public ip , enable and disable process, check port

---
 action_map.yml      | 11 ++++++++-
 yunohost_monitor.py | 58 +++++++++++++++++++++++++++++++++++----------
 2 files changed, 56 insertions(+), 13 deletions(-)

diff --git a/action_map.yml b/action_map.yml
index 4334f7ab..237204ae 100644
--- a/action_map.yml
+++ b/action_map.yml
@@ -379,28 +379,37 @@ monitor:
                     action: store_true
                 -i: 
                     full: --ifconfig
-                    help: Ifconfig
+                    help: Show Ip and MAC Adress
                     action: store_true
                 -u: 
                     full: --uptime
                     help: Show Uptime
                     action: store_true
+                -p:
+                    full: --public
+                    help: Show IP public
+                    action: store_true
         process:
             action_help: Check Process
             arguments:
                 -e: 
                     full: --enable
                     help: Enable process
+                    metavar: PROCESS
                 -d:
                     full: --disable
                     help: Disable process
+                    metavar: PROCESS
                 --start:
                     help: Start process
+                    metavar: PROCESS
                 --stop:
                     help: Stop process
+                    metavar: PROCESS
                 -c:
                     full: --check
                     help: Check process
+                    metavar: PORT
                 -i:
                     full: --info
                     help: Process info
diff --git a/yunohost_monitor.py b/yunohost_monitor.py
index 5d01fc3d..8b4696ab 100644
--- a/yunohost_monitor.py
+++ b/yunohost_monitor.py
@@ -3,6 +3,7 @@
 import os
 import sys
 import subprocess
+from urllib import urlopen
 try:
     import psutil
 except ImportError:
@@ -33,7 +34,7 @@ def check_disk():
     templ = "%s,%s/%s,%s,%s"
     for part in psutil.disk_partitions(all=False):
         usage = psutil.disk_usage(part.mountpoint)
-        return { _("Partition") : (part.mountpoint, bytes2human(usage.used), bytes2human(usage.total), bytes2human(usage.free), int(usage.percent)) }
+    return { _("Partition") : (part.mountpoint, bytes2human(usage.used), bytes2human(usage.total), bytes2human(usage.free), int(usage.percent)) }
 
 def check_cpu():
      return { _("CPU") : psutil.cpu_percent(interval=3) }
@@ -59,6 +60,13 @@ def uptime():
     uptime = (str(datetime.now() - datetime.fromtimestamp(psutil.BOOT_TIME)).split('.')[0])
     return { _("Uptime") : uptime }
 
+def public():
+    try:
+        ip = str(urlopen('http://ip.yunohost.org').read())
+    except:
+        raise YunoHostError(1, "No connection" )
+    return { _("Public IP"): ip }
+
 def processcount():
     processcount = {'total': 0, 'running': 0, 'sleeping': 0}
     process_all = [proc for proc in psutil.process_iter()]
@@ -90,27 +98,46 @@ def processcount():
     return { _("Total") : str(processcount['total']), _("Running") :  str(processcount['running']),  _("Sleeping") :  str(processcount['sleeping']) }
 
 def process_enable(args):
-    print 'process_enable'
+    output = subprocess.Popen(['update-rc.d', args, 'defaults'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+    if output.wait() == 0:
+        resultat = process_start(args)
+        return resultat
+    else:
+        raise YunoHostError(1, _('Enable ' + agrs + ' failure'))
 
 def process_disable(args):
-    print 'process disable'
+    output = subprocess.Popen(['update-rc.d', args, 'remove'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+    if output.wait() == 0:
+        resultat = process_stop(args)
+        return resultat
+    else:
+        raise YunoHostError(1, _('Disable ' + agrs + ' failure'))
 
 def process_start(args):
     output = subprocess.Popen(['service', args, 'start'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
     if output.wait() == 0:
-        return { _('Start') + " "  + args : "OK" }
+        return { args.title() + " "  + _('Start') : "OK" }
     else:
-        raise YunoHostError(1, _('Start failure'))
+        raise YunoHostError(1, _('Start ' + args + ' failure'))
 
 def process_stop(args):
     output = subprocess.Popen(['service', args, 'stop'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
     if output.wait() == 0:
-        return { _('Stop') + " "  + args : "OK" }
+        return { args.title() + " "  + _('Stop') : "OK" }
     else:
-        raise YunoHostError(1, _('Start failure'))
+        raise YunoHostError(1, _('Stop ' + args + ' failure'))
 
 def process_check(args):
-    print 'process_check'
+    ip = public()['Public IP']
+    output = os.system('/usr/lib/nagios/plugins/check_tcp -H localhost -p' + args  + ' > /dev/null')
+    if output == 0:
+        output = os.system('/usr/lib/nagios/plugins/check_tcp -H ' + ip + ' -p' + args  + ' > /dev/null')
+        if output == 0:
+            return { _("Port") + " " + args : _("is open") }
+        else:
+            raise YunoHostError(1, "Port " + args + " is closed in your box" )
+    else:
+        raise YunoHostError(1, args + " is closed" )
 
 
 def monitor_info(args):
@@ -129,19 +156,26 @@ def monitor_info(args):
     elif args['uptime']:
        resultat = uptime()
        return resultat
+    elif args['public']:
+       resultat = public()
+       return resultat
 
 def monitor_process(args):
     if args['enable']:
-        process_enable(args['enable'])
+        resultat = process_enable(args['enable'])
+        return resultat
     elif args['disable']:
-        process_disable(args['disable'])
+        resultat = process_disable(args['disable'])
+        return resultat
     elif args['start']:
         resultat = process_start(args['start'])
         return resultat
     elif args['stop']:
-        process_stop(args['stop'])
+        resultat = process_stop(args['stop'])
+        return resultat
     elif args['check']:
-        process_check(args['check'])
+        resultat = process_check(args['check'])
+        return resultat
     elif args['info']:
         resultat = processcount()
         return resultat