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.

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