From 0b790748172c9dad3c0d062454ca1d7a254d7f76 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Fri, 22 Feb 2013 04:55:53 +0400 Subject: [PATCH] Added version on dataEngines. Old version no longer recommended --- source/contents/code/main.py | 178 +++--- source/contents/code/main_bckp.py | 299 ++++++++++ source/contents/ui/configwindow.ui | 17 +- source_old/contents/code/config.py | 16 + source_old/contents/code/configwindow.py | 15 + source_old/contents/code/main.py | 244 ++++++++ source_old/contents/code/util.py | 36 ++ source_old/contents/ui/configwindow.ui | 710 +++++++++++++++++++++++ source_old/metadata.desktop | 17 + 9 files changed, 1440 insertions(+), 92 deletions(-) create mode 100755 source/contents/code/main_bckp.py create mode 100644 source_old/contents/code/config.py create mode 100644 source_old/contents/code/configwindow.py create mode 100644 source_old/contents/code/main.py create mode 100644 source_old/contents/code/util.py create mode 100644 source_old/contents/ui/configwindow.ui create mode 100644 source_old/metadata.desktop diff --git a/source/contents/code/main.py b/source/contents/code/main.py index 1274256..9b4deca 100755 --- a/source/contents/code/main.py +++ b/source/contents/code/main.py @@ -31,16 +31,34 @@ class pyTextWidget(plasmascript.Applet): self.layout.addItem(self.label) self.applet.setLayout(self.layout) + self.theme = Plasma.Svg(self) + self.theme.setImagePath("widgets/background") + self.setBackgroundHints(Plasma.Applet.DefaultBackground) + #initial configuration self.settings = Config(self) - self.format = str(self.settings.get('format', '[cpu: $cpu%][temp: $temp°C][mem: $mem%][swap: $swap%][ip: $ip][net: $netKB/s][bat: $bat%]')) + self.format = str(self.settings.get('format', '[cpu: $cpu%][temp: $temp°C][mem: $mem%][swap: $swap%][net: $netKB/s][bat: $bat%]')) self.interval = int(self.settings.get('interval', '2000')) self.font_family = str(self.settings.get('font_family', 'Terminus')) self.font_size = int(self.settings.get('font_size', 12)) - self.font_color = str(self.settings.get('font_color', 'black')) + self.font_color = str(self.settings.get('font_color', '#000000')) self.font_style = str(self.settings.get('font_style', 'normal')) self.num_dev = int(self.settings.get('num_dev', 0)) + self.setupNetdev() + self.setupTemp() + self.connectToEngine() + + self.cpuText = " 0.0" + self.up_speed = " 0" + self.down_speed = " 0" + self.mem_used = 0.0 + self.mem_free = 1.0 + self.mem_uf = 0.0 + self.swap_free = 1.0 + self.swap_used = 0.0 + self.tempText = " 0.0" + self.resize(250,10) # start timer @@ -55,7 +73,7 @@ class pyTextWidget(plasmascript.Applet): self.interval = int(self.configpage.ui.spinBox_interval.value()) self.font_family = str(self.configpage.ui.fontComboBox.currentFont().family()) self.font_size = int(self.configpage.ui.spinBox_fontSize.value()) - self.font_color = str(self.configpage.ui.lineEdit_color.text()) + self.font_color = str(self.configpage.ui.kcolorcombo.color().name()) self.font_style = str(self.configpage.ui.lineEdit_style.text()) self.num_dev = int(self.configpage.ui.comboBox_numNet.currentIndex()) @@ -77,11 +95,11 @@ class pyTextWidget(plasmascript.Applet): self.configpage = ConfigWindow(self, self.settings) font = QFont(str(self.settings.get('font_family', 'Terminus')), int(self.settings.get('font_size', 12)), int(int(self.settings.get('font_weight', 50)))) - self.configpage.ui.lineEdit_format.setText(str(self.settings.get('format', '[cpu: $cpu%][temp: $temp°C][mem: $mem%][swap: $swap%][ip: $ip][net: $netKB/s][bat: $bat%]'))) + self.configpage.ui.lineEdit_format.setText(str(self.settings.get('format', '[cpu: $cpu%][temp: $temp°C][mem: $mem%][swap: $swap%][net: $netKB/s][bat: $bat%]'))) self.configpage.ui.spinBox_interval.setValue(int(self.settings.get('interval', '2000'))) self.configpage.ui.fontComboBox.setCurrentFont(font) self.configpage.ui.spinBox_fontSize.setValue(int(self.settings.get('font_size', 12))) - self.configpage.ui.lineEdit_color.setText(str(self.settings.get('font_color', 'black'))) + self.configpage.ui.kcolorcombo.setColor(QColor(str(self.settings.get('font_color', '#000000')))) self.configpage.ui.lineEdit_style.setText(str(self.settings.get('font_style', 'normal'))) self.configpage.ui.comboBox_numNet.setCurrentIndex(int(self.settings.get('num_dev', 0))) @@ -96,22 +114,43 @@ class pyTextWidget(plasmascript.Applet): output = self.format if (output.split("$cpu")[0] != output): - output = output.split("$cpu")[0] + self.cpuText() + output.split("$cpu")[1] + output = output.split("$cpu")[0] + self.cpuText + output.split("$cpu")[1] if (output.split("$temp")[0] != output): - output = output.split("$temp")[0] + self.tempText() + output.split("$temp")[1] + output = output.split("$temp")[0] + self.tempText + output.split("$temp")[1] if (output.split("$mem")[0] != output): output = output.split("$mem")[0] + self.memText() + output.split("$mem")[1] if (output.split("$swap")[0] != output): output = output.split("$swap")[0] + self.swapText() + output.split("$swap")[1] - if (output.split("$ip")[0] != output): - output = output.split("$ip")[0] + self.ipText() + output.split("$ip")[1] if (output.split("$net")[0] != output): output = output.split("$net")[0] + self.netText() + output.split("$net")[1] + print output if (output.split("$bat")[0] != output): output = output.split("$bat")[0] + self.batText() + output.split("$bat")[1] return output + def setupNetdev(self): + if (self.num_dev == 0): + for line in commands.getoutput("ifconfig -a").split("\n"): + if (line != ''): + if ((line[0] != ' ') and (line[0:3] != "lo:")): + self.netdev = line.split()[0][:-1] + else: + interfaces = [] + for line in commands.getoutput("ifconfig -a").split("\n"): + if (line != ''): + if ((line[0] != ' ') and (line[0:3] != "lo:")): + interfaces.append(line.split()[0][:-1]) + + command_line = "if ! (ifconfig "+ interfaces[1] + " | grep 'inet ' > /dev/null); then " + command_line = command_line + "if ! (ifconfig "+ interfaces[0] + " | grep 'inet ' > /dev/null); then echo lo; " + command_line = command_line + "else echo "+ interfaces[0] + "; fi; else echo "+ interfaces[1] + "; fi" + self.netdev = commands.getoutput(command_line) + + def setupTemp(self): + commandOut = commands.getoutput("sensors | grep Physical -B2") + self.tempdev = "lmsensors/"+commandOut.split("\n")[0]+"/"+'_'.join(commandOut.split("\n")[2].split(":")[0].split()) + def showConfigurationInterface(self): """function to show configuration window""" plasmascript.Applet.showConfigurationInterface(self) @@ -139,10 +178,8 @@ class pyTextWidget(plasmascript.Applet): def updateLabel(self): """function to update label""" - #string = self.cpuText() + self.tempText() - #string = string + self.memText() + self.swapText() - #string = string + self.ipText() + self.netText() + self.batText() string = self.formating_line() + #string = self.cpuText text = "" text = text + "

"+string
@@ -157,96 +194,67 @@ class pyTextWidget(plasmascript.Applet):
         
         return output
     
-    def cpuText(self):
-        """function to set cpu text"""
-        with open ("/proc/stat", 'r') as stat:
-            for line in stat:
-                if (line[0:4] == "cpu "):
-                    cpu_1 = line.split()[1:5]
-        time.sleep(0.2)
-        with open ("/proc/stat", 'r') as stat:
-            for line in stat:
-                if (line[0:4] == "cpu "):
-                    cpu_2 = line.split()[1:5]
-        duser = float(cpu_2[0]) - float(cpu_1[0])
-        dnice = float(cpu_2[1]) - float(cpu_1[1])
-        dsys = float(cpu_2[2]) - float(cpu_1[2])
-        didle = float(cpu_2[3]) - float(cpu_1[3])
-        full = duser + dnice + dsys + didle
-        cpu = (full-didle) / full * 100
-        output = "%5s" % (str(round(cpu, 1)))
-        
-        return output
-    
-    def ipText(self):
-        """function to set ip text"""
-        command_line = "wget http://checkip.dyndns.org/ -q -O - | awk '{print $6}' | sed 's/<.*>//g'"
-        ip = commands.getoutput(command_line)[:-1].split('.')
-        output = "%3s.%3s.%3s.%3s" % (str(ip[0]), str(ip[1]), str(ip[2]), str(ip[3]))
-        
-        return output
-    
     def memText(self):
         """function to set mem text"""
-        line = commands.getoutput("free | grep Mem:")
-        used = float(line.split()[2]) - float(line.split()[4]) - float(line.split()[5]) - float(line.split()[6])
-        full = float(line.split()[1])
-        mem = 100 * used / full
+        full = self.mem_uf + self.mem_free
+        mem = 100 * self.mem_used / full
         output = "%5s" % (str(round(mem, 1)))
                 
         return output
     
     def netText(self):
         """function to set netspeed text"""
-        if (self.num_dev == 0):
-            for line in commands.getoutput("ifconfig -a").split("\n"):
-                if (line != ''):
-                    if ((line[0] != ' ') and (line[0:3] != "lo:")):
-                        netdev = line.split()[0][:-1]
-        else:
-            interfaces = []
-            for line in commands.getoutput("ifconfig -a").split("\n"):
-                if (line != ''):
-                    if ((line[0] != ' ') and (line[0:3] != "lo:")):
-                        interfaces.append(line.split()[0][:-1])
-                    
-            command_line = "if ! (ifconfig "+ interfaces[1] + " | grep 'inet ' > /dev/null); then "
-            command_line = command_line + "if ! (ifconfig "+ interfaces[0] + " | grep 'inet ' > /dev/null); then echo lo; "
-            command_line = command_line + "else echo "+ interfaces[0] + "; fi; else echo "+ interfaces[1] + "; fi"
-            netdev = commands.getoutput(command_line)
-        
-        command_line = "RXB=$(cat /sys/class/net/" + netdev
-        command_line = command_line + "/statistics/rx_bytes) && TXB=$(cat /sys/class/net/" + netdev
-        command_line = command_line + "/statistics/tx_bytes) && sleep 0.2 && RXBN=$(cat /sys/class/net/" + netdev
-        command_line = command_line + "/statistics/rx_bytes) && TXBN=$(cat /sys/class/net/" + netdev
-        command_line = command_line + "/statistics/tx_bytes) && RXDIF=$(echo $((RXBN - RXB)) ) && TXDIF=$(echo $((TXBN - TXB)) ) "
-        command_line = command_line + "&& echo -en $((10*RXDIF/1024/2)) && echo -n ' / ' && echo -en $((10*TXDIF/1024/2)) && echo ' KB/s'"
-        speed = commands.getoutput(command_line)
-        
-        downSpeed = speed.split()[0]
-        upSpeed = speed.split()[2]
-        output = "%4s/%4s" % (downSpeed, upSpeed)
+        output = self.down_speed + "/" + self.up_speed
         
         return output
     
     def swapText(self):
         """function to set swap text"""
-        line = commands.getoutput("free | grep Swap:")
-        used = float(line.split()[2])
-        full = float(line.split()[1])
-        mem = 100 * used / full
+        full = self.swap_used + self.swap_free
+        mem = 100 * self.swap_used / full
         output = "%5s" % (str(round(mem, 1)))
-        
+                
         return output
     
-    def tempText(self):
-        """function to set temp text"""
-        commandOut = commands.getoutput("sensors | grep Physical")
-        temp = commandOut[17:21]
-        output = "%4s" % (temp)
+    def connectToEngine(self):
+        """function to initializate engine"""
+        self.systemmonitor = self.dataEngine("systemmonitor")
+        self.systemmonitor.connectSource("cpu/system/TotalLoad", self, 200)
+        self.systemmonitor.connectSource("network/interfaces/"+self.netdev+"/transmitter/data", self, 200)
+        self.systemmonitor.connectSource("network/interfaces/"+self.netdev+"/receiver/data", self, 200)
+        self.systemmonitor.connectSource(self.tempdev, self, 200)
+        self.systemmonitor.connectSource("mem/physical/free", self, 200)
+        self.systemmonitor.connectSource("mem/physical/used", self, 200)
+        self.systemmonitor.connectSource("mem/physical/application", self, 200)
+        self.systemmonitor.connectSource("mem/swap/free", self, 200)
+        self.systemmonitor.connectSource("mem/swap/used", self, 200)
+    
+    @pyqtSignature("dataUpdated(const QString &, const Plasma::DataEngine::Data &)")
+    def dataUpdated(self, sourceName, data):
+        """function to refresh data"""
+        if (sourceName == "cpu/system/TotalLoad"):
+            value = str(round(float(data[QString(u'value')]), 1))
+            self.cpuText = "%5s" % (value)
+        elif (sourceName == "network/interfaces/"+self.netdev+"/transmitter/data"):
+            value = str(data[QString(u'value')]).split('.')[0]
+            self.up_speed = "%4s" % (value)
+        elif (sourceName == "network/interfaces/"+self.netdev+"/reciever/data"):
+            value = str(data[QString(u'value')]).split('.')[0]
+            self.down_speed = "%4s" % (value)
+        elif (sourceName == self.tempdev):
+            value = str(round(float(data[QString(u'value')]), 1))
+            self.tempText = "%s4" % (value)
+        elif (sourceName == "mem/physical/free"):
+            self.mem_free = float(data[QString(u'value')])
+        elif (sourceName == "mem/physical/used"):
+            self.mem_uf = float(data[QString(u'value')])
+        elif (sourceName == "mem/physical/application"):
+            self.mem_used = float(data[QString(u'value')])
+        elif (sourceName == "mem/swap/free"):
+            self.swap_free = float(data[QString(u'value')])
+        elif (sourceName == "mem/swap/used"):
+            self.swap_used = float(data[QString(u'value')])
         
-        return output
-
 
 
 def CreateApplet(parent):
diff --git a/source/contents/code/main_bckp.py b/source/contents/code/main_bckp.py
new file mode 100755
index 0000000..a27d4c4
--- /dev/null
+++ b/source/contents/code/main_bckp.py
@@ -0,0 +1,299 @@
+# -*- coding: utf-8 -*-
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+from PyKDE4.kdecore import *
+from PyKDE4.kdeui import *
+from PyKDE4.kio import *
+from PyKDE4.plasma import Plasma
+from PyKDE4 import plasmascript
+from PyQt4 import QtCore
+from configwindow import *
+from config import *
+from util import *
+import commands, os, time
+
+
+
+class pyTextWidget(plasmascript.Applet):
+    def __init__(self,parent, args=None):
+        """widget definition"""
+        plasmascript.Applet.__init__(self,parent)
+
+    def init(self):
+        """function to initializate widget"""
+        self._name = str(self.package().metadata().pluginName())
+        self.layout = QGraphicsLinearLayout(Qt.Horizontal, self.applet)
+        self.setHasConfigurationInterface(True)
+        
+        self.label = Plasma.Label(self.applet)
+        self.label.setText("N\A")
+        self.layout.addItem(self.label)
+        self.applet.setLayout(self.layout)
+        
+        self.theme = Plasma.Svg(self)
+        self.theme.setImagePath("widgets/background")
+        self.setBackgroundHints(Plasma.Applet.DefaultBackground)
+        
+        #initial configuration
+        self.settings = Config(self)
+        self.format = str(self.settings.get('format', '[cpu: $cpu%][temp: $temp°C][mem: $mem%][swap: $swap%][ip: $ip][net: $netKB/s][bat: $bat%]'))
+        self.interval = int(self.settings.get('interval', '2000'))
+        self.font_family = str(self.settings.get('font_family', 'Terminus'))
+        self.font_size = int(self.settings.get('font_size', 12))
+        self.font_color = str(self.settings.get('font_color', '#000000'))
+        self.font_style = str(self.settings.get('font_style', 'normal'))
+        self.num_dev = int(self.settings.get('num_dev', 0))
+        
+        if (self.num_dev == 0):
+            for line in commands.getoutput("ifconfig -a").split("\n"):
+                if (line != ''):
+                    if ((line[0] != ' ') and (line[0:3] != "lo:")):
+                        self.netdev = line.split()[0][:-1]
+        else:
+            interfaces = []
+            for line in commands.getoutput("ifconfig -a").split("\n"):
+                if (line != ''):
+                    if ((line[0] != ' ') and (line[0:3] != "lo:")):
+                        interfaces.append(line.split()[0][:-1])
+                    
+            command_line = "if ! (ifconfig "+ interfaces[1] + " | grep 'inet ' > /dev/null); then "
+            command_line = command_line + "if ! (ifconfig "+ interfaces[0] + " | grep 'inet ' > /dev/null); then echo lo; "
+            command_line = command_line + "else echo "+ interfaces[0] + "; fi; else echo "+ interfaces[1] + "; fi"
+            self.netdev = commands.getoutput(command_line)
+        self.cpuText = "  0.0"
+        self.up_speed = "   0"
+        self.down_speed = "   0"
+        self.connectToEngine()
+        
+        self.resize(250,10)
+        
+        # start timer
+        self.timer = QtCore.QTimer()
+        self.timer.setInterval(self.interval)
+        self.startPolling()
+     
+    def configAccepted(self):
+        """function to accept settings"""
+        # update local variables
+        self.format = str(self.configpage.ui.lineEdit_format.text())
+        self.interval = int(self.configpage.ui.spinBox_interval.value())
+        self.font_family = str(self.configpage.ui.fontComboBox.currentFont().family())
+        self.font_size = int(self.configpage.ui.spinBox_fontSize.value())
+        self.font_color = str(self.configpage.ui.kcolorcombo.color().name())
+        self.font_style = str(self.configpage.ui.lineEdit_style.text())
+        self.num_dev = int(self.configpage.ui.comboBox_numNet.currentIndex())
+        
+        # save config to settings
+        self.settings.set('format', self.format)
+        self.settings.set('interval', self.interval)
+        self.settings.set('font_family', self.font_family)
+        self.settings.set('font_size', self.font_size)
+        self.settings.set('font_color', self.font_color)
+        self.settings.set('font_style', self.font_style)
+        self.settings.set('num_dev', self.num_dev)
+        
+        # update timer
+        self.timer.setInterval(self.interval)
+        self.startPolling()
+    
+    def createConfigurationInterface(self, parent):
+        """function to setup configuration window"""
+        self.configpage = ConfigWindow(self, self.settings)
+        
+        font = QFont(str(self.settings.get('font_family', 'Terminus')), int(self.settings.get('font_size', 12)), int(int(self.settings.get('font_weight', 50))))
+        self.configpage.ui.lineEdit_format.setText(str(self.settings.get('format', '[cpu: $cpu%][temp: $temp°C][mem: $mem%][swap: $swap%][ip: $ip][net: $netKB/s][bat: $bat%]')))
+        self.configpage.ui.spinBox_interval.setValue(int(self.settings.get('interval', '2000')))
+        self.configpage.ui.fontComboBox.setCurrentFont(font)
+        self.configpage.ui.spinBox_fontSize.setValue(int(self.settings.get('font_size', 12)))
+        self.configpage.ui.kcolorcombo.setColor(QColor(str(self.settings.get('font_color', '#000000'))))
+        self.configpage.ui.lineEdit_style.setText(str(self.settings.get('font_style', 'normal')))
+        self.configpage.ui.comboBox_numNet.setCurrentIndex(int(self.settings.get('num_dev', 0)))
+        
+        # add config page
+        page = parent.addPage(self.configpage, i18n(self.name()))
+        page.setIcon(KIcon(self.icon()))
+        
+        parent.okClicked.connect(self.configAccepted)
+    
+    def formating_line(self):
+        """function to set format line"""
+        output = self.format
+
+        if (output.split("$cpu")[0] != output):
+            output = output.split("$cpu")[0] + self.cpuText + output.split("$cpu")[1]
+        if (output.split("$temp")[0] != output):
+            output = output.split("$temp")[0] + self.tempText() + output.split("$temp")[1]
+        if (output.split("$mem")[0] != output):
+            output = output.split("$mem")[0] + self.memText() + output.split("$mem")[1]
+        if (output.split("$swap")[0] != output):
+            output = output.split("$swap")[0] + self.swapText() + output.split("$swap")[1]
+        if (output.split("$ip")[0] != output):
+            output = output.split("$ip")[0] + self.ipText() + output.split("$ip")[1]
+        if (output.split("$net")[0] != output):
+            output = output.split("$net")[0] + self.netText() + output.split("$net")[1]
+        if (output.split("$bat")[0] != output):
+            output = output.split("$bat")[0] + self.batText() + output.split("$bat")[1]
+        
+        return output
+    
+    def showConfigurationInterface(self):
+        """function to show configuration window"""
+        plasmascript.Applet.showConfigurationInterface(self)
+    
+    def showTooltip(self, text):
+        """function to create and set tooltip"""
+        tooltip = Plasma.ToolTipContent()
+        tooltip.setImage(KIcon(self.icon()))
+        tooltip.setSubText(text)
+        tooltip.setAutohide(False)
+        Plasma.ToolTipManager.self().setContent(self.applet, tooltip)
+        Plasma.ToolTipManager.self().registerWidget(self.applet)
+      
+    def startPolling(self):
+        try:
+            self.timer.start()
+            QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.updateLabel)
+            
+            self.updateLabel()
+            self.showTooltip('')
+        except Exception as (strerror):
+            self.showTooltip(str(strerror))
+            self.label.setText('ERROR')
+            return
+   
+    def updateLabel(self):
+        """function to update label"""
+        string = self.formating_line()
+        text = ""
+        text = text + "

"+string
+        text = text + "

" + self.label.setText(text) + + def batText(self): + """function to set battery text""" + commandOut = commands.getoutput("acpi") + bat = commandOut.split()[3][:-1] + output = "%3s" % (bat) + + return output + + def cpuTextOld(self): + """function to set cpu text""" + with open ("/proc/stat", 'r') as stat: + for line in stat: + if (line[0:4] == "cpu "): + cpu_1 = line.split()[1:5] + time.sleep(0.2) + with open ("/proc/stat", 'r') as stat: + for line in stat: + if (line[0:4] == "cpu "): + cpu_2 = line.split()[1:5] + duser = float(cpu_2[0]) - float(cpu_1[0]) + dnice = float(cpu_2[1]) - float(cpu_1[1]) + dsys = float(cpu_2[2]) - float(cpu_1[2]) + didle = float(cpu_2[3]) - float(cpu_1[3]) + full = duser + dnice + dsys + didle + cpu = (full-didle) / full * 100 + output = "%5s" % (str(round(cpu, 1))) + + return output + + def ipText(self): + """function to set ip text""" + command_line = "wget http://checkip.dyndns.org/ -q -O - | awk '{print $6}' | sed 's/<.*>//g'" + ip = commands.getoutput(command_line)[:-1].split('.') + output = "%3s.%3s.%3s.%3s" % (str(ip[0]), str(ip[1]), str(ip[2]), str(ip[3])) + + return output + + def memText(self): + """function to set mem text""" + line = commands.getoutput("free | grep Mem:") + used = float(line.split()[2]) - float(line.split()[4]) - float(line.split()[5]) - float(line.split()[6]) + full = float(line.split()[1]) + mem = 100 * used / full + output = "%5s" % (str(round(mem, 1))) + + return output + + def netText(self): + """function to set netspeed text""" + output = self.down_speed + "/" + self.up_speed + + return output + + def netTextold(self): + """function to set netspeed text""" + if (self.num_dev == 0): + for line in commands.getoutput("ifconfig -a").split("\n"): + if (line != ''): + if ((line[0] != ' ') and (line[0:3] != "lo:")): + netdev = line.split()[0][:-1] + else: + interfaces = [] + for line in commands.getoutput("ifconfig -a").split("\n"): + if (line != ''): + if ((line[0] != ' ') and (line[0:3] != "lo:")): + interfaces.append(line.split()[0][:-1]) + + command_line = "if ! (ifconfig "+ interfaces[1] + " | grep 'inet ' > /dev/null); then " + command_line = command_line + "if ! (ifconfig "+ interfaces[0] + " | grep 'inet ' > /dev/null); then echo lo; " + command_line = command_line + "else echo "+ interfaces[0] + "; fi; else echo "+ interfaces[1] + "; fi" + netdev = commands.getoutput(command_line) + + command_line = "RXB=$(cat /sys/class/net/" + netdev + command_line = command_line + "/statistics/rx_bytes) && TXB=$(cat /sys/class/net/" + netdev + command_line = command_line + "/statistics/tx_bytes) && sleep 0.2 && RXBN=$(cat /sys/class/net/" + netdev + command_line = command_line + "/statistics/rx_bytes) && TXBN=$(cat /sys/class/net/" + netdev + command_line = command_line + "/statistics/tx_bytes) && RXDIF=$(echo $((RXBN - RXB)) ) && TXDIF=$(echo $((TXBN - TXB)) ) " + command_line = command_line + "&& echo -en $((10*RXDIF/1024/2)) && echo -n ' / ' && echo -en $((10*TXDIF/1024/2)) && echo ' KB/s'" + speed = commands.getoutput(command_line) + + downSpeed = speed.split()[0] + upSpeed = speed.split()[2] + output = "%4s/%4s" % (downSpeed, upSpeed) + + return output + + def swapText(self): + """function to set swap text""" + line = commands.getoutput("free | grep Swap:") + used = float(line.split()[2]) + full = float(line.split()[1]) + mem = 100 * used / full + output = "%5s" % (str(round(mem, 1))) + + return output + + def tempText(self): + """function to set temp text""" + commandOut = commands.getoutput("sensors | grep Physical") + temp = commandOut[17:21] + output = "%4s" % (temp) + + return output + + def connectToEngine(self): + self.systemmonitor = self.dataEngine("systemmonitor") + self.systemmonitor.connectSource("cpu/system/TotalLoad", self, 200) + self.systemmonitor.connectSource("network/interfaces/net0/transmitter/data", self, 200) + self.systemmonitor.connectSource("network/interfaces/net0/receiver/data", self, 200) + + @pyqtSignature("dataUpdated(const QString &, const Plasma::DataEngine::Data &)") + def dataUpdated(self, sourceName, data): + if (sourceName == "cpu/system/TotalLoad") and (data[QString(u'value')]): + value = str(round(float(data[QString(u'value')]), 1)) + self.cpuText = "%5s" % (value) + if (sourceName == "network/interfaces/net0/transmitter/data") and (data[QString(u'value')]): + value = str(round(float(data[QString(u'value')]), 0)) + self.up_speed = "%4s" % (value) + if (sourceName == "network/interfaces/net0/reciever/data") and (data[QString(u'value')]): + value = str(round(float(data[QString(u'value')]), 0)) + self.down_speed = "%4s" % (value) + + + +def CreateApplet(parent): + return pyTextWidget(parent) \ No newline at end of file diff --git a/source/contents/ui/configwindow.ui b/source/contents/ui/configwindow.ui index 0da7395..55f7c42 100644 --- a/source/contents/ui/configwindow.ui +++ b/source/contents/ui/configwindow.ui @@ -297,7 +297,7 @@ - QFontComboBox::MonospacedFonts + QFontComboBox::AllFonts @@ -464,7 +464,7 @@ - + 0 @@ -483,9 +483,6 @@ 25 - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - @@ -689,16 +686,22 @@ - label_font widget verticalSpacer + + + KColorCombo + QComboBox +
kcolorcombo.h
+
+
lineEdit_format spinBox_interval fontComboBox spinBox_fontSize - lineEdit_color + kcolorcombo lineEdit_style comboBox_numNet diff --git a/source_old/contents/code/config.py b/source_old/contents/code/config.py new file mode 100644 index 0000000..3a4a6d3 --- /dev/null +++ b/source_old/contents/code/config.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +from util import * + + + +class Config(): + def __init__(self, applet): + self.applet = applet + self.config = self.applet.globalConfig() + + def get(self, key, default = ''): + return self.config.readEntry(key, default).toString() + + def set(self, key, value): + self.config.writeEntry(key, value) \ No newline at end of file diff --git a/source_old/contents/code/configwindow.py b/source_old/contents/code/configwindow.py new file mode 100644 index 0000000..c26a952 --- /dev/null +++ b/source_old/contents/code/configwindow.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from PyQt4.QtCore import * +from PyQt4.QtGui import * +from PyKDE4.plasma import * +from PyQt4 import uic +from PyKDE4 import plasmascript + + + +class ConfigWindow(QWidget): + def __init__(self, parent, settings): + QWidget.__init__(self) + self.ui = uic.loadUi(parent.package().filePath('ui', 'configwindow.ui'), self) + self.parent = parent \ No newline at end of file diff --git a/source_old/contents/code/main.py b/source_old/contents/code/main.py new file mode 100644 index 0000000..d0bb3af --- /dev/null +++ b/source_old/contents/code/main.py @@ -0,0 +1,244 @@ +# -*- coding: utf-8 -*- + +from PyQt4.QtCore import * +from PyQt4.QtGui import * +from PyKDE4.kdecore import * +from PyKDE4.kdeui import * +from PyKDE4.kio import * +from PyKDE4.plasma import Plasma +from PyKDE4 import plasmascript +from PyQt4 import QtCore +from configwindow import * +from config import * +from util import * +import commands, os, time + + + +class pyTextWidget(plasmascript.Applet): + def __init__(self,parent, args=None): + """widget definition""" + plasmascript.Applet.__init__(self,parent) + + def init(self): + """function to initializate widget""" + self._name = str(self.package().metadata().pluginName()) + self.layout = QGraphicsLinearLayout(Qt.Horizontal, self.applet) + self.setHasConfigurationInterface(True) + + self.label = Plasma.Label(self.applet) + self.label.setText("N\A") + self.layout.addItem(self.label) + self.applet.setLayout(self.layout) + + self.theme = Plasma.Svg(self) + self.theme.setImagePath("widgets/background") + self.setBackgroundHints(Plasma.Applet.DefaultBackground) + + #initial configuration + self.settings = Config(self) + self.format = str(self.settings.get('format', '[cpu: $cpu%][temp: $temp°C][mem: $mem%][swap: $swap%][net: $netKB/s][bat: $bat%]')) + self.interval = int(self.settings.get('interval', '2000')) + self.font_family = str(self.settings.get('font_family', 'Terminus')) + self.font_size = int(self.settings.get('font_size', 12)) + self.font_color = str(self.settings.get('font_color', '#000000')) + self.font_style = str(self.settings.get('font_style', 'normal')) + self.num_dev = int(self.settings.get('num_dev', 0)) + + self.resize(250,10) + + # start timer + self.timer = QtCore.QTimer() + self.timer.setInterval(self.interval) + self.startPolling() + + def configAccepted(self): + """function to accept settings""" + # update local variables + self.format = str(self.configpage.ui.lineEdit_format.text()) + self.interval = int(self.configpage.ui.spinBox_interval.value()) + self.font_family = str(self.configpage.ui.fontComboBox.currentFont().family()) + self.font_size = int(self.configpage.ui.spinBox_fontSize.value()) + self.font_color = str(self.configpage.ui.kcolorcombo.color().name()) + self.font_style = str(self.configpage.ui.lineEdit_style.text()) + self.num_dev = int(self.configpage.ui.comboBox_numNet.currentIndex()) + + # save config to settings + self.settings.set('format', self.format) + self.settings.set('interval', self.interval) + self.settings.set('font_family', self.font_family) + self.settings.set('font_size', self.font_size) + self.settings.set('font_color', self.font_color) + self.settings.set('font_style', self.font_style) + self.settings.set('num_dev', self.num_dev) + + # update timer + self.timer.setInterval(self.interval) + self.startPolling() + + def createConfigurationInterface(self, parent): + """function to setup configuration window""" + self.configpage = ConfigWindow(self, self.settings) + + font = QFont(str(self.settings.get('font_family', 'Terminus')), int(self.settings.get('font_size', 12)), int(int(self.settings.get('font_weight', 50)))) + self.configpage.ui.lineEdit_format.setText(str(self.settings.get('format', '[cpu: $cpu%][temp: $temp°C][mem: $mem%][swap: $swap%][net: $netKB/s][bat: $bat%]'))) + self.configpage.ui.spinBox_interval.setValue(int(self.settings.get('interval', '2000'))) + self.configpage.ui.fontComboBox.setCurrentFont(font) + self.configpage.ui.spinBox_fontSize.setValue(int(self.settings.get('font_size', 12))) + self.configpage.ui.kcolorcombo.setColor(QColor(str(self.settings.get('font_color', '#000000')))) + self.configpage.ui.lineEdit_style.setText(str(self.settings.get('font_style', 'normal'))) + self.configpage.ui.comboBox_numNet.setCurrentIndex(int(self.settings.get('num_dev', 0))) + + # add config page + page = parent.addPage(self.configpage, i18n(self.name())) + page.setIcon(KIcon(self.icon())) + + parent.okClicked.connect(self.configAccepted) + + def formating_line(self): + """function to set format line""" + output = self.format + + if (output.split("$cpu")[0] != output): + output = output.split("$cpu")[0] + self.cpuText() + output.split("$cpu")[1] + if (output.split("$temp")[0] != output): + output = output.split("$temp")[0] + self.tempText() + output.split("$temp")[1] + if (output.split("$mem")[0] != output): + output = output.split("$mem")[0] + self.memText() + output.split("$mem")[1] + if (output.split("$swap")[0] != output): + output = output.split("$swap")[0] + self.swapText() + output.split("$swap")[1] + if (output.split("$net")[0] != output): + output = output.split("$net")[0] + self.netText() + output.split("$net")[1] + if (output.split("$bat")[0] != output): + output = output.split("$bat")[0] + self.batText() + output.split("$bat")[1] + + return output + + def showConfigurationInterface(self): + """function to show configuration window""" + plasmascript.Applet.showConfigurationInterface(self) + + def showTooltip(self, text): + """function to create and set tooltip""" + tooltip = Plasma.ToolTipContent() + tooltip.setImage(KIcon(self.icon())) + tooltip.setSubText(text) + tooltip.setAutohide(False) + Plasma.ToolTipManager.self().setContent(self.applet, tooltip) + Plasma.ToolTipManager.self().registerWidget(self.applet) + + def startPolling(self): + try: + self.timer.start() + QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.updateLabel) + + self.updateLabel() + self.showTooltip('') + except Exception as (strerror): + self.showTooltip(str(strerror)) + self.label.setText('ERROR') + return + + def updateLabel(self): + """function to update label""" + line = self.formating_line() + text = "" + text = text + "

" + line
+        text = text + "

" + self.label.setText(text) + + def batText(self): + """function to set battery text""" + commandOut = commands.getoutput("acpi") + bat = commandOut.split()[3][:-1] + output = "%3s" % (bat) + + return output + + def cpuText(self): + """function to set cpu text""" + with open ("/proc/stat", 'r') as stat: + for line in stat: + if (line[0:4] == "cpu "): + cpu_1 = line.split()[1:5] + time.sleep(0.1) + with open ("/proc/stat", 'r') as stat: + for line in stat: + if (line[0:4] == "cpu "): + cpu_2 = line.split()[1:5] + duser = float(cpu_2[0]) - float(cpu_1[0]) + dnice = float(cpu_2[1]) - float(cpu_1[1]) + dsys = float(cpu_2[2]) - float(cpu_1[2]) + didle = float(cpu_2[3]) - float(cpu_1[3]) + full = duser + dnice + dsys + didle + cpu = (full-didle) / full * 100 + output = "%5s" % (str(round(cpu, 1))) + + return output + + def memText(self): + """function to set mem text""" + line = commands.getoutput("free | grep Mem:") + used = float(line.split()[2]) - float(line.split()[4]) - float(line.split()[5]) - float(line.split()[6]) + full = float(line.split()[1]) + mem = 100 * used / full + output = "%5s" % (str(round(mem, 1))) + + return output + + def netText(self): + """function to set netspeed text""" + if (self.num_dev == 0): + for line in commands.getoutput("ifconfig -a").split("\n"): + if (line != ''): + if ((line[0] != ' ') and (line[0:3] != "lo:")): + netdev = line.split()[0][:-1] + else: + interfaces = [] + for line in commands.getoutput("ifconfig -a").split("\n"): + if (line != ''): + if ((line[0] != ' ') and (line[0:3] != "lo:")): + interfaces.append(line.split()[0][:-1]) + + command_line = "if ! (ifconfig "+ interfaces[1] + " | grep 'inet ' > /dev/null); then " + command_line = command_line + "if ! (ifconfig "+ interfaces[0] + " | grep 'inet ' > /dev/null); then echo lo; " + command_line = command_line + "else echo "+ interfaces[0] + "; fi; else echo "+ interfaces[1] + "; fi" + netdev = commands.getoutput(command_line) + + command_line = "RXB=$(cat /sys/class/net/" + netdev + command_line = command_line + "/statistics/rx_bytes) && TXB=$(cat /sys/class/net/" + netdev + command_line = command_line + "/statistics/tx_bytes) && sleep 0.1 && RXBN=$(cat /sys/class/net/" + netdev + command_line = command_line + "/statistics/rx_bytes) && TXBN=$(cat /sys/class/net/" + netdev + command_line = command_line + "/statistics/tx_bytes) && RXDIF=$(echo $((RXBN - RXB)) ) && TXDIF=$(echo $((TXBN - TXB)) ) " + command_line = command_line + "&& echo -en $((10*RXDIF/1024/2)) && echo -n ' / ' && echo -en $((10*TXDIF/1024)) && echo ' KB/s'" + speed = commands.getoutput(command_line) + + downSpeed = speed.split()[0] + upSpeed = speed.split()[2] + output = "%4s/%4s" % (downSpeed, upSpeed) + + return output + + def swapText(self): + """function to set swap text""" + line = commands.getoutput("free | grep Swap:") + used = float(line.split()[2]) + full = float(line.split()[1]) + mem = 100 * used / full + output = "%5s" % (str(round(mem, 1))) + + return output + + def tempText(self): + """function to set temp text""" + commandOut = commands.getoutput("sensors | grep Physical") + temp = commandOut[17:21] + output = "%4s" % (temp) + + return output + + + +def CreateApplet(parent): + return pyTextWidget(parent) \ No newline at end of file diff --git a/source_old/contents/code/util.py b/source_old/contents/code/util.py new file mode 100644 index 0000000..32b87db --- /dev/null +++ b/source_old/contents/code/util.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +import os +from shutil import copyfile +from PyKDE4.kdecore import * + + + +class Util(): + def __init__(self, applet): + self.applet = applet + + def createDirectory(self, name): + if not os.path.isdir(name): + try: + os.mkdir(name) + except: + print 'Failed to create directory: ' + name + + def kdeHome(self): + return unicode(KGlobal.dirs().localkdedir()) + + def createNotifyrc(self): + print '[%s] creating notifyrc' % (self.applet._name) + self.createDirectory(self.kdeHome() + 'share/apps/%s' % self.applet._name) + + source = self.applet.package().path() + 'contents/misc/%s.notifyrc' % self.applet._name + destination = self.kdeHome() + 'share/apps/%s/%s.notifyrc' % (self.applet._name, self.applet._name) + copyfile(source, destination) + + def createConfig(self): + self.createDirectory(self.kdeHome() + 'share/apps/%s' % self.applet._name) + + source = self.applet.package().path() + 'contents/misc/%s.ini' % self.applet._name + destination = self.kdeHome() + 'share/apps/%s/%s.ini' % (self.applet._name, self.applet._name) + copyfile(source, destination) \ No newline at end of file diff --git a/source_old/contents/ui/configwindow.ui b/source_old/contents/ui/configwindow.ui new file mode 100644 index 0000000..55f7c42 --- /dev/null +++ b/source_old/contents/ui/configwindow.ui @@ -0,0 +1,710 @@ + + + ConfigWindow + + + + 0 + 0 + 302 + 247 + + + + + 0 + 0 + + + + + 0 + 247 + + + + + 16777215 + 16777215 + + + + Form + + + + + + + 0 + 0 + + + + + 0 + 242 + + + + + 16777215 + 16777215 + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + + 0 + 0 + + + + + 100 + 25 + + + + + 100 + 25 + + + + Output format + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + + 0 + 0 + + + + + 100 + 25 + + + + + 100 + 25 + + + + Time interval + + + + + + + Qt::Horizontal + + + + 40 + 19 + + + + + + + + + 0 + 0 + + + + + 150 + 25 + + + + + 150 + 25 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 10000 + + + 2000 + + + + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + + 0 + 0 + + + + + 45 + 25 + + + + + 45 + 25 + + + + Font + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 150 + 25 + + + + + 150 + 25 + + + + QFontComboBox::AllFonts + + + + Terminus + 12 + true + + + + + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + + 0 + 0 + + + + + 100 + 25 + + + + + 100 + 25 + + + + Font size + + + + + + + Qt::Horizontal + + + + 40 + 19 + + + + + + + + + 0 + 0 + + + + + 150 + 25 + + + + + 150 + 25 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 12 + + + + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + + 0 + 0 + + + + + 100 + 25 + + + + + 100 + 25 + + + + Font color + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 150 + 25 + + + + + 150 + 25 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + + 0 + 0 + + + + + 100 + 25 + + + + + 100 + 25 + + + + Font style + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 150 + 25 + + + + + 150 + 25 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + + 0 + 0 + + + + + 170 + 25 + + + + + 170 + 25 + + + + Number of network devices + + + + + + + Qt::Horizontal + + + + 40 + 19 + + + + + + + + + 0 + 0 + + + + + 100 + 25 + + + + + 100 + 25 + + + + + 1 + + + + + 2 + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + widget + verticalSpacer + + + + KColorCombo + QComboBox +
kcolorcombo.h
+
+
+ + lineEdit_format + spinBox_interval + fontComboBox + spinBox_fontSize + kcolorcombo + lineEdit_style + comboBox_numNet + + + +
diff --git a/source_old/metadata.desktop b/source_old/metadata.desktop new file mode 100644 index 0000000..ca9e6c3 --- /dev/null +++ b/source_old/metadata.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Py Text Monitor +Type=Service +ServiceTypes=Plasma/Applet +Icon=utilities-system-monitor +X-Plasma-API=python +X-Plasma-MainScript=code/main.py +X-KDE-PluginInfo-Author=Evgeniy Alexeev aka arcanis +X-KDE-PluginInfo-Email=esalexeev@gmail.com +X-KDE-PluginInfo-Name=py-text-monitor +X-KDE-PluginInfo-Version=1.0 +X-KDE-PluginInfo-Website=http://kde-look.org/ +X-KDE-PluginInfo-Category=System Information +X-KDE-PluginInfo-Depends= +X-KDE-PluginInfo-License=GPL +X-KDE-PluginInfo-EnabledByDefault=true \ No newline at end of file