Initial commit (Vesion 0.1)
[tablet-suite] / src / .svn / text-base / pcsdeviceutils.py.svn-base
diff --git a/src/.svn/text-base/pcsdeviceutils.py.svn-base b/src/.svn/text-base/pcsdeviceutils.py.svn-base
new file mode 100644 (file)
index 0000000..efe8da0
--- /dev/null
@@ -0,0 +1,155 @@
+# low_backup module
+# Authors: Nicholas Alexander && Otacilio Lacerda
+
+import commands
+import os
+
+BATTERY = os.environ['BATTERY_PATH'] + 'battery.py'
+EXECUTE = "./"
+USER_HOST = "root"
+
+def queryProductInformation(deviceIp):
+    """ Update device name by getting device product name and os version
+    informations.
+
+    Use osso-product-info command to get the device and device OS short
+    names and set each to it correspondent attribute.
+
+    """
+
+    info = commands.getoutput("ssh -l %s %s osso-product-info" %
+                                        (USER_HOST, deviceIp))
+
+    deviceName = _extractOssoInfo(info, "shortName")
+    deviceOs = _extractOssoInfo(info, "shortOS")
+    ossoVersion = _extractOssoInfo(info, "ossoVersion")
+    if deviceName != -1 and deviceOs != -1:
+        deviceName = deviceName.strip("'")
+        deviceOs = deviceOs.strip("'")
+    else:
+        deviceName = "NO INFORMATION"
+        deviceOs = "NO INFORMATION"
+
+    return (deviceName, deviceOs, ossoVersion)
+
+def queryDeviceStorage(deviceIp):
+    """Returns a list of tuples, each tuple representing a memory status.
+
+    Tuples are in this format: (total, used)
+
+    Returns:
+        mem_infos -- List with all tuples holding memory info
+
+    """
+    info = commands.getoutput("ssh -l root %s df" %
+                              deviceIp).splitlines()
+    mem_infos = [-1, -1, -1]
+    for line in info:
+        if line.find("/dev/mtdblock4") != -1:
+            if line[-1] == "/":
+                total_used = _get_memory(line, "/dev/mtdblock4")
+                mem_infos.pop(0)
+                mem_infos.insert(0, total_used)
+        
+        elif line.find("/media/mmc1") != -1:
+            total_used = _get_memory(line, "/dev/mmcblk0p1")
+            mem_infos.pop(1)
+            mem_infos.insert(1, total_used)
+        
+        elif line.find("/media/mmc2") != -1:
+            total_used = _get_memory(line, "/dev/mmcblk1p1")
+            mem_infos.pop(2)
+            mem_infos.insert(2, total_used)
+    return mem_infos
+
+def queryDeviceBattery(deviceIp):
+    """Return device current battery status in a string.
+
+    This method runs a python script in the device that returns the battery
+    status, this status is represented by one string with the percentage of
+    battery current charge or the number -1 case battery is charging.
+
+    Returns:
+    text -- Text with the battery status
+
+    """
+
+    # Calls script that returns device battery status    
+    os.system("scp %s %s@%s:/tmp" % (BATTERY, USER_HOST, deviceIp))
+    battery_status = commands.getoutput("ssh -l %s %s /usr/bin/python \
+                                        /tmp/battery.py" % (USER_HOST, 
+                                                            deviceIp))
+    return battery_status
+
+def _get_memory(line, path):
+    """Retrieve and return total and used memory information from the given 
+    line using the memory path to retrieve the right information.
+
+    This function is to be used with a line of the return of a df command.
+
+    Arguments:
+    line -- The line where the memory information is
+    path -- The path in the begining of the line
+
+    Returns:
+    total -- Total memory
+    used -- Amount of used memory
+
+    """
+    number_of_infos = 0
+    i = len(path) + 1
+    while number_of_infos < 2:
+        char = line[i]
+        if char != " ":
+            start = i
+            end = line.find(" ", start + 1)
+            if number_of_infos == 0:
+                total = line[start: end]
+            elif number_of_infos == 1:
+                used = line[start: end]
+            i = end
+            number_of_infos += 1
+        i += 1
+    return total, used
+
+def _extractOssoInfo(osso_string, info_type="name"):
+    """Read the osso-product-info command return string and extract the
+    needed info depeding on info_type argument.
+
+    Arguments:
+    osso_string -- The string returned by osso-product-info command
+    info_type -- the kind of information to b extracted, can be:
+        name - returns device full name (default)
+        OS - returns device OS full name
+        shortName - returns device short name
+        shortOS - returns device short OS name
+
+    Returns:
+    info -- String with the needed information
+    -1 -- Case the information couldn't be found in the given string
+
+    """
+    detailed_type = ""
+    if info_type == "shortName":
+        detailed_type = "OSSO_PRODUCT_NAME"
+    elif info_type == "shortOS":
+        detailed_type = "OSSO_PRODUCT_RELEASE_NAME"
+    elif info_type == "name":
+        detailed_type = "OSSO_PRODUCT_FULL_NAME"
+    elif info_type == "OS":
+        detailed_type = "OSSO_PRODUCT_RELEASE_FULL_NAME"
+    elif info_type == "ossoVersion":
+        detailed_type = "OSSO_VERSION"
+    else:
+        detailed_type = "OSSO_PRODUCT_FULL_NAME"
+
+    types_list = osso_string.splitlines()
+    info = -1
+    for type_line in types_list:
+        if type_line.startswith(detailed_type):
+            # The second argument is the information itself since informations
+            # are displayed like: OSSO_PRODUCT_RELEASE_NAME='OS 2008'
+            info = type_line.split("=")[1]
+
+    return info