You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

612 lines
16 KiB

12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
  1. # The MIT License (MIT)
  2. #
  3. # Copyright (c) 2014 Florian Neagu - michaelneagu@gmail.com - https://github.com/k3oni/
  4. #
  5. # Permission is hereby granted, free of charge, to any person obtaining a copy
  6. # of this software and associated documentation files (the "Software"), to deal
  7. # in the Software without restriction, including without limitation the rights
  8. # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9. # copies of the Software, and to permit persons to whom the Software is
  10. # furnished to do so, subject to the following conditions:
  11. #
  12. # The above copyright notice and this permission notice shall be included in all
  13. # copies or substantial portions of the Software.
  14. #
  15. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16. # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17. # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18. # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19. # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20. # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  21. # SOFTWARE.
  22. import json
  23. from django.http import HttpResponse
  24. from main.views import *
  25. from pydash.settings import TIME_JS_REFRESH, TIME_JS_REFRESH_LONG, TIME_JS_REFRESH_NET
  26. time_refresh = TIME_JS_REFRESH
  27. time_refresh_long = TIME_JS_REFRESH_LONG
  28. time_refresh_net = TIME_JS_REFRESH_NET
  29. @login_required(login_url='/login/')
  30. def getnetstat(request):
  31. """
  32. Return netstat output
  33. """
  34. try:
  35. net_stat = get_netstat()
  36. except Exception:
  37. net_stat = None
  38. data = json.dumps(net_stat)
  39. response = HttpResponse()
  40. response['Content-Type'] = "text/javascript"
  41. response.write(data)
  42. return response
  43. @login_required(login_url='/login/')
  44. def platform(request, name):
  45. """
  46. Return the hostname
  47. """
  48. getplatform = get_platform()
  49. hostname = getplatform['hostname']
  50. osname = getplatform['osname']
  51. kernel = getplatform['kernel']
  52. data = {}
  53. if name == 'hostname':
  54. try:
  55. data = hostname
  56. except Exception:
  57. data = None
  58. if name == 'osname':
  59. try:
  60. data = osname
  61. except Exception:
  62. data = None
  63. if name == 'kernel':
  64. try:
  65. data = kernel
  66. except Exception:
  67. data = None
  68. data = json.dumps(data)
  69. response = HttpResponse()
  70. response['Content-Type'] = "text/javascript"
  71. response.write(data)
  72. return response
  73. @login_required(login_url='/login/')
  74. def getcpus(request, name):
  75. """
  76. Return the CPU number and type/model
  77. """
  78. cpus = get_cpus()
  79. cputype = cpus['type']
  80. cpucount = cpus['cpus']
  81. data = {}
  82. if name == 'type':
  83. try:
  84. data = cputype
  85. except Exception:
  86. data = None
  87. if name == 'count':
  88. try:
  89. data = cpucount
  90. except Exception:
  91. data = None
  92. data = json.dumps(data)
  93. response = HttpResponse()
  94. response['Content-Type'] = "text/javascript"
  95. response.write(data)
  96. return response
  97. @login_required(login_url='/login/')
  98. def uptime(request):
  99. """
  100. Return uptime
  101. """
  102. try:
  103. up_time = get_uptime()
  104. except Exception:
  105. up_time = None
  106. data = json.dumps(up_time)
  107. response = HttpResponse()
  108. response['Content-Type'] = "text/javascript"
  109. response.write(data)
  110. return response
  111. @login_required(login_url='/login/')
  112. def getdisk(request):
  113. """
  114. Return the disk usage
  115. """
  116. try:
  117. diskusage = get_disk()
  118. except Exception:
  119. diskusage = None
  120. data = json.dumps(diskusage)
  121. response = HttpResponse()
  122. response['Content-Type'] = "text/javascript"
  123. response.write(data)
  124. return response
  125. @login_required(login_url='/login/')
  126. def getips(request):
  127. """
  128. Return the IPs and interfaces
  129. """
  130. try:
  131. get_ips = get_ipaddress()
  132. except Exception:
  133. get_ips = None
  134. data = json.dumps(get_ips['itfip'])
  135. response = HttpResponse()
  136. response['Content-Type'] = "text/javascript"
  137. response.write(data)
  138. return response
  139. @login_required(login_url='/login/')
  140. def getusers(request):
  141. """
  142. Return online users
  143. """
  144. try:
  145. online_users = get_users()
  146. except Exception:
  147. online_users = None
  148. data = json.dumps(online_users)
  149. response = HttpResponse()
  150. response['Content-Type'] = "text/javascript"
  151. response.write(data)
  152. return response
  153. @login_required(login_url='/login/')
  154. def getproc(request):
  155. """
  156. Return the running processes
  157. """
  158. try:
  159. processes = get_cpu_usage()
  160. processes = processes['all']
  161. except Exception:
  162. processes = None
  163. data = json.dumps(processes)
  164. response = HttpResponse()
  165. response['Content-Type'] = "text/javascript"
  166. response.write(data)
  167. return response
  168. @login_required(login_url='/login/')
  169. def cpuusage(request):
  170. """
  171. Return CPU Usage in %
  172. """
  173. try:
  174. cpu_usage = get_cpu_usage()
  175. except Exception:
  176. cpu_usage = 0
  177. cpu = [
  178. {
  179. "value": cpu_usage['free'],
  180. "color": "#0AD11B"
  181. },
  182. {
  183. "value": cpu_usage['used'],
  184. "color": "#F7464A"
  185. }
  186. ]
  187. data = json.dumps(cpu)
  188. response = HttpResponse()
  189. response['Content-Type'] = "text/javascript"
  190. response.write(data)
  191. return response
  192. @login_required(login_url='/login/')
  193. def memusage(request):
  194. """
  195. Return Memory Usage in % and numeric
  196. """
  197. datasets_free = []
  198. datasets_used = []
  199. try:
  200. mem_usage = get_mem()
  201. except Exception:
  202. mem_usage = 0
  203. try:
  204. cookies = request._cookies['memory_usage']
  205. except Exception:
  206. cookies = None
  207. if not cookies:
  208. datasets_free.append(0)
  209. datasets_used.append(0)
  210. else:
  211. datasets = json.loads(cookies)
  212. datasets_free = datasets[0]
  213. datasets_used = datasets[1]
  214. if len(datasets_free) > 10:
  215. while datasets_free:
  216. del datasets_free[0]
  217. if len(datasets_free) == 10:
  218. break
  219. if len(datasets_used) > 10:
  220. while datasets_used:
  221. del datasets_used[0]
  222. if len(datasets_used) == 10:
  223. break
  224. if len(datasets_free) <= 9:
  225. datasets_free.append(int(mem_usage['free']))
  226. if len(datasets_free) == 10:
  227. datasets_free.append(int(mem_usage['free']))
  228. del datasets_free[0]
  229. if len(datasets_used) <= 9:
  230. datasets_used.append(int(mem_usage['usage']))
  231. if len(datasets_used) == 10:
  232. datasets_used.append(int(mem_usage['usage']))
  233. del datasets_used[0]
  234. # Some fix division by 0 Chart.js
  235. if len(datasets_free) == 10:
  236. if sum(datasets_free) == 0:
  237. datasets_free[9] += 0.1
  238. if sum(datasets_free) / 10 == datasets_free[0]:
  239. datasets_free[9] += 0.1
  240. memory = {
  241. 'labels': [""] * 10,
  242. 'datasets': [
  243. {
  244. "fillColor": "rgba(249,134,33,0.5)",
  245. "strokeColor": "rgba(249,134,33,1)",
  246. "pointColor": "rgba(249,134,33,1)",
  247. "pointStrokeColor": "#fff",
  248. "data": datasets_used
  249. },
  250. {
  251. "fillColor": "rgba(43,214,66,0.5)",
  252. "strokeColor": "rgba(43,214,66,1)",
  253. "pointColor": "rgba(43,214,66,1)",
  254. "pointStrokeColor": "#fff",
  255. "data": datasets_free
  256. }
  257. ]
  258. }
  259. cookie_memory = [datasets_free, datasets_used]
  260. data = json.dumps(memory)
  261. response = HttpResponse()
  262. response['Content-Type'] = "text/javascript"
  263. response.cookies['memory_usage'] = cookie_memory
  264. response.write(data)
  265. return response
  266. @login_required(login_url='/login/')
  267. def loadaverage(request):
  268. """
  269. Return Load Average numeric
  270. """
  271. datasets = []
  272. try:
  273. load_average = get_load()
  274. except Exception:
  275. load_average = 0
  276. try:
  277. cookies = request._cookies['load_average']
  278. except Exception:
  279. cookies = None
  280. if not cookies:
  281. datasets.append(0)
  282. else:
  283. datasets = json.loads(cookies)
  284. if len(datasets) > 10:
  285. while datasets:
  286. del datasets[0]
  287. if len(datasets) == 10:
  288. break
  289. if len(datasets) <= 9:
  290. datasets.append(float(load_average))
  291. if len(datasets) == 10:
  292. datasets.append(float(load_average))
  293. del datasets[0]
  294. # Some fix division by 0 Chart.js
  295. if len(datasets) == 10:
  296. if sum(datasets) == 0:
  297. datasets[9] += 0.1
  298. if sum(datasets) / 10 == datasets[0]:
  299. datasets[9] += 0.1
  300. load = {
  301. 'labels': [""] * 10,
  302. 'datasets': [
  303. {
  304. "fillColor": "rgba(151,187,205,0.5)",
  305. "strokeColor": "rgba(151,187,205,1)",
  306. "pointColor": "rgba(151,187,205,1)",
  307. "pointStrokeColor": "#fff",
  308. "data": datasets
  309. }
  310. ]
  311. }
  312. data = json.dumps(load)
  313. response = HttpResponse()
  314. response['Content-Type'] = "text/javascript"
  315. response.cookies['load_average'] = datasets
  316. response.write(data)
  317. return response
  318. @login_required(login_url='/login/')
  319. def gettraffic(request):
  320. """
  321. Return the traffic for the interface
  322. """
  323. datasets_in = []
  324. datasets_in_i = []
  325. datasets_out = []
  326. datasets_out_o = []
  327. label = "KBps"
  328. try:
  329. intf = get_ipaddress()
  330. intf = intf['interface'][0]
  331. traffic = get_traffic(intf)
  332. except Exception:
  333. traffic = 0
  334. try:
  335. cookies = request._cookies['traffic']
  336. except Exception:
  337. cookies = None
  338. if not cookies:
  339. datasets_in.append(0)
  340. datasets_in_i.append(0)
  341. datasets_out.append(0)
  342. datasets_out_o.append(0)
  343. else:
  344. datasets = json.loads(cookies)
  345. datasets_in = datasets[0]
  346. datasets_out = datasets[1]
  347. datasets_in_i = datasets[2]
  348. datasets_out_o = datasets[3]
  349. if len(datasets_in) > 10:
  350. while datasets_in:
  351. del datasets_in[0]
  352. if len(datasets_in) == 10:
  353. break
  354. if len(datasets_in_i) > 2:
  355. while datasets_in_i:
  356. del datasets_in_i[0]
  357. if len(datasets_in_i) == 2:
  358. break
  359. if len(datasets_out) > 10:
  360. while datasets_out:
  361. del datasets_out[0]
  362. if len(datasets_out) == 10:
  363. break
  364. if len(datasets_out_o) > 2:
  365. while datasets_out_o:
  366. del datasets_out_o[0]
  367. if len(datasets_out_o) == 2:
  368. break
  369. if len(datasets_in_i) <= 1:
  370. datasets_in_i.append(float(traffic['traffic_in']))
  371. if len(datasets_in_i) == 2:
  372. datasets_in_i.append(float(traffic['traffic_in']))
  373. del datasets_in_i[0]
  374. if len(datasets_out_o) <= 1:
  375. datasets_out_o.append(float(traffic['traffic_out']))
  376. if len(datasets_out_o) == 2:
  377. datasets_out_o.append(float(traffic['traffic_out']))
  378. del datasets_out_o[0]
  379. dataset_in = (float(((datasets_in_i[1] - datasets_in_i[0]) / 1024) / (time_refresh_net / 1000)))
  380. dataset_out = (float(((datasets_out_o[1] - datasets_out_o[0]) / 1024) / (time_refresh_net / 1000)))
  381. if dataset_in > 1024 or dataset_out > 1024:
  382. dataset_in = (float(dataset_in / 1024))
  383. dataset_out = (float(dataset_out / 1024))
  384. label = "MBps"
  385. if len(datasets_in) <= 9:
  386. datasets_in.append(dataset_in)
  387. if len(datasets_in) == 10:
  388. datasets_in.append(dataset_in)
  389. del datasets_in[0]
  390. if len(datasets_out) <= 9:
  391. datasets_out.append(dataset_out)
  392. if len(datasets_out) == 10:
  393. datasets_out.append(dataset_out)
  394. del datasets_out[0]
  395. # Some fix division by 0 Chart.js
  396. if len(datasets_in) == 10:
  397. if sum(datasets_in) == 0:
  398. datasets_in[9] += 0.1
  399. if sum(datasets_in) / 10 == datasets_in[0]:
  400. datasets_in[9] += 0.1
  401. traff = {
  402. 'labels': [label] * 10,
  403. 'datasets': [
  404. {
  405. "fillColor": "rgba(105,210,231,0.5)",
  406. "strokeColor": "rgba(105,210,231,1)",
  407. "pointColor": "rgba(105,210,231,1)",
  408. "pointStrokeColor": "#fff",
  409. "data": datasets_in
  410. },
  411. {
  412. "fillColor": "rgba(227,48,81,0.5)",
  413. "strokeColor": "rgba(227,48,81,1)",
  414. "pointColor": "rgba(227,48,81,1)",
  415. "pointStrokeColor": "#fff",
  416. "data": datasets_out
  417. }
  418. ]
  419. }
  420. cookie_traffic = [datasets_in, datasets_out, datasets_in_i, datasets_out_o]
  421. data = json.dumps(traff)
  422. response = HttpResponse()
  423. response['Content-Type'] = "text/javascript"
  424. response.cookies['traffic'] = cookie_traffic
  425. response.write(data)
  426. return response
  427. @login_required(login_url='/login/')
  428. def getdiskio(request):
  429. """
  430. Return the reads and writes for the drive
  431. """
  432. datasets_in = []
  433. datasets_in_i = []
  434. datasets_out = []
  435. datasets_out_o = []
  436. try:
  437. diskrw = get_disk_rw()
  438. diskrw = diskrw[0]
  439. except Exception:
  440. diskrw = 0
  441. try:
  442. cookies = request._cookies['diskrw']
  443. except Exception:
  444. cookies = None
  445. if not cookies:
  446. datasets_in.append(0)
  447. datasets_in_i.append(0)
  448. datasets_out.append(0)
  449. datasets_out_o.append(0)
  450. else:
  451. datasets = json.loads(cookies)
  452. datasets_in = datasets[0]
  453. datasets_out = datasets[1]
  454. datasets_in_i = datasets[2]
  455. datasets_out_o = datasets[3]
  456. if len(datasets_in) > 10:
  457. while datasets_in:
  458. del datasets_in[0]
  459. if len(datasets_in) == 10:
  460. break
  461. if len(datasets_in_i) > 2:
  462. while datasets_in_i:
  463. del datasets_in_i[0]
  464. if len(datasets_in_i) == 2:
  465. break
  466. if len(datasets_out) > 10:
  467. while datasets_out:
  468. del datasets_out[0]
  469. if len(datasets_out) == 10:
  470. break
  471. if len(datasets_out_o) > 2:
  472. while datasets_out_o:
  473. del datasets_out_o[0]
  474. if len(datasets_out_o) == 2:
  475. break
  476. if len(datasets_in_i) <= 1:
  477. datasets_in_i.append(int(diskrw[1]))
  478. if len(datasets_in_i) == 2:
  479. datasets_in_i.append(int(diskrw[1]))
  480. del datasets_in_i[0]
  481. if len(datasets_out_o) <= 1:
  482. datasets_out_o.append(int(diskrw[2]))
  483. if len(datasets_out_o) == 2:
  484. datasets_out_o.append(int(diskrw[2]))
  485. del datasets_out_o[0]
  486. dataset_in = (int((datasets_in_i[1] - datasets_in_i[0]) / (time_refresh_net / 1000)))
  487. dataset_out = (int((datasets_out_o[1] - datasets_out_o[0]) / (time_refresh_net / 1000)))
  488. if len(datasets_in) <= 9:
  489. datasets_in.append(dataset_in)
  490. if len(datasets_in) == 10:
  491. datasets_in.append(dataset_in)
  492. del datasets_in[0]
  493. if len(datasets_out) <= 9:
  494. datasets_out.append(dataset_out)
  495. if len(datasets_out) == 10:
  496. datasets_out.append(dataset_out)
  497. del datasets_out[0]
  498. # Some fix division by 0 Chart.js
  499. if len(datasets_in) == 10:
  500. if sum(datasets_in) == 0:
  501. datasets_in[9] += 0.1
  502. if sum(datasets_in) / 10 == datasets_in[0]:
  503. datasets_in[9] += 0.1
  504. disk_rw = {
  505. 'labels': [""] * 10,
  506. 'datasets': [
  507. {
  508. "fillColor": "rgba(245,134,15,0.5)",
  509. "strokeColor": "rgba(245,134,15,1)",
  510. "pointColor": "rgba(245,134,15,1)",
  511. "pointStrokeColor": "#fff",
  512. "data": datasets_in
  513. },
  514. {
  515. "fillColor": "rgba(15,103,245,0.5)",
  516. "strokeColor": "rgba(15,103,245,1)",
  517. "pointColor": "rgba(15,103,245,1)",
  518. "pointStrokeColor": "#fff",
  519. "data": datasets_out
  520. }
  521. ]
  522. }
  523. cookie_diskrw = [datasets_in, datasets_out, datasets_in_i, datasets_out_o]
  524. data = json.dumps(disk_rw)
  525. response = HttpResponse()
  526. response['Content-Type'] = "text/javascript"
  527. response.cookies['diskrw'] = cookie_diskrw
  528. response.write(data)
  529. return response