1 #include "systemmanager.h"
2 #include "terminal.h"
3 #include<QMutex>
4 #include <QFile>
5 #include <QRegularExpression>
6 #include <QRegularExpressionMatch>
7
8 SystemManager * SystemManager::m_instance=NULL;
SystemManager()9 SystemManager::SystemManager()
10 {
11 }
12
instance()13 SystemManager *SystemManager::instance()
14 {
15 if(m_instance == NULL)
16 {
17 static QMutex mutex;
18 mutex.lock();
19 if(m_instance == NULL)
20 {
21 m_instance = new SystemManager;
22 }
23 mutex.unlock();
24 }
25
26 return m_instance;
27 }
28
detoryInstance()29 void SystemManager::detoryInstance()
30 {
31 if(m_instance != NULL)
32 {
33 delete m_instance;
34 }
35 }
36
getDNS()37 QStringList SystemManager::getDNS()
38 {
39 QString result = Terminal::execCmd("cat /etc/resolv.conf");
40 return getIPs(result);
41 }
42
setDNS(const QString & dns)43 void SystemManager::setDNS(const QString &dns)
44 {
45 Terminal::execCmd(QString("echo 'nameserver %1' > /etc/resolv.conf").arg(dns));
46 }
47
setNetwork(const QString & cardName,const QString & ip,const QString & mask)48 void SystemManager::setNetwork(const QString &cardName, const QString &ip, const QString &mask)
49 {
50 Terminal::execCmd(QString("ifconfig %1 %2 netmasek %3 up").arg(cardName).arg(ip).arg(mask));
51 }
52
getNetwork(const QString & cardName,QString & ip,QString & mask)53 void SystemManager::getNetwork(const QString &cardName, QString &ip, QString &mask)
54 {
55 QString result = Terminal::execCmd(QString("ifconfig %1").arg(cardName));
56 QStringList list = getIPs(result);
57 if(list.size() >2)
58 {
59 ip = list[0];
60 mask = list[2];
61 }
62 }
63
getKernalInfo(QString & version)64 void SystemManager::getKernalInfo(QString &version)
65 {
66 version = Terminal::execCmd("uname -a");
67 }
68
getStoargeInfo(QString & info)69 void SystemManager::getStoargeInfo(QString &info)
70 {
71 info = Terminal::execCmd("df -h");
72 }
73
getCpuInfo(QString & info)74 void SystemManager::getCpuInfo(QString &info)
75 {
76 QString result = Terminal::execCmd("top -b -n 1 | grep %");
77 QStringList list;
78 if(platformInfo().contains("t507"))
79 {
80 list = getMatch(result, "\\d+%");
81 }else{
82 list = getMatch(result, "\\d+.\\d+");
83 }
84
85 if(list.size() >1 )
86 {
87 info = list[0];
88 }
89
90
91 }
92
getMemInfo(QString & memTotal,QString & memFree,QString & memAvailable)93 void SystemManager::getMemInfo(QString &memTotal, QString &memFree, QString &memAvailable)
94 {
95 //MemTotal: 3191916 kB
96 //MemFree: 470732 kB
97 //MemAvailable: 455120 kB
98 //Buffers: 15200 kB
99 //Cached: 368716 kB
100 //SwapCached: 31984 kB
101 QString result = Terminal::execCmd("cat /proc/meminfo");
102 QStringList list = getMatch(result, "\\d+");
103 if(list.size()>=3)
104 {
105 memTotal=list[0];
106 memFree=list[1];
107 memAvailable=list[2];
108 }
109 }
110
getMatch(const QString & s,const QString & pattern)111 QStringList SystemManager::getMatch(const QString &s, const QString &pattern)
112 {
113 QStringList list;
114 QRegularExpression re(pattern);
115 int offset = 0;
116 QRegularExpressionMatch match = re.match(s, offset);
117 while (match.hasMatch()) {
118 list <<match.captured();
119 offset = match.capturedEnd();
120 match = re.match(s, offset);
121 }
122 return list;
123 }
124
getIPs(const QString & data)125 QStringList SystemManager::getIPs(const QString &data)
126 {
127 return getMatch(data, "((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)");
128 }
129
setGateway(const QString & gateway)130 void SystemManager::setGateway(const QString &gateway)
131 {
132 Terminal::execCmd(QString("route add default gw %1").arg(gateway));
133 }
134
getGateway()135 QString SystemManager::getGateway()
136 {
137 QString gateway;
138 QString result = Terminal::execCmd(QString("ip route"));
139
140 QStringList list =getIPs(result);
141 if(list.size() >=1)
142 {
143 gateway = list[0];
144 }
145 return gateway;
146 }
147
setPlatformInfo(const QString name)148 void SystemManager::setPlatformInfo(const QString name)
149 {
150 m_platformName = name.toLower();
151 }
152
platformInfo()153 QString SystemManager::platformInfo()
154 {
155 return m_platformName;
156 }
157
158