OpenWrt_Luci_Lua/1_1.Mi_Lua/luci/controller/api/xqnetdetect.lua
2015-06-13 22:22:49 +08:00

293 lines
9.2 KiB
Lua

module("luci.controller.api.xqnetdetect", package.seeall)
function index()
local page = node("api","xqnetdetect")
page.target = firstchild()
page.title = ("")
page.order = 350
page.sysauth = "admin"
page.sysauth_authenticator = "jsonauth"
page.index = true
entry({"api", "xqnetdetect"}, firstchild(), _(""), 350)
entry({"api", "xqnetdetect", "wan_status"}, call("getWanStatus"), _(""), 351, 0x01)
entry({"api", "xqnetdetect", "sys_info"}, call("getSysInfo"), (""), 352, 0x01)
entry({"api", "xqnetdetect", "ping_test"}, call("pingTest"), (""), 353, 0x01)
entry({"api", "xqnetdetect", "detect"}, call("systemDiagnostics"), (""), 354, 0x01)
entry({"api", "xqnetdetect", "sys_status"}, call("systemStatus"), (""), 355, 0x01)
entry({"api", "xqnetdetect", "netspeed"}, call("netspeed"), (""), 356)
entry({"api", "xqnetdetect", "uploadspeed"}, call("uploadSpeed"), (""), 357)
end
local LuciHttp = require("luci.http")
local XQFunction = require("xiaoqiang.common.XQFunction")
local XQErrorUtil = require("xiaoqiang.util.XQErrorUtil")
function getWanStatus()
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local result = {}
local wanType = XQLanWanUtil.getAutoWanType()
local wanInfo = XQLanWanUtil.getLanWanInfo("wan")
local wanMonitor = XQLanWanUtil.getWanMonitorStat()
result["code"] = 0
result["wanLink"] = wanType == 99 and 0 or 1
result["wanType"] = wanType
result["wanInfo"] = wanInfo
result["wanMonitor"] = wanMonitor
LuciHttp.write_json(result)
end
function getSysInfo()
local LuciSys = require("luci.sys")
local result = {}
local cpu = {}
local mem = {}
local system, model, memtotal, memcached, membuffers, memfree, bogomips = LuciSys.sysinfo()
cpu["info"] = system
mem["total"] = memtotal
mem["free"] = memfree
result["code"] = 0
result["cpuInfo"] = cpu
result["memInfo"] = mem
LuciHttp.write_json(result)
end
function pingTest()
local LuciSys = require("luci.sys")
local pingUrl = LuciHttp.formvalue("url")
local ping = LuciSys.net.pingtest(pingUrl)
local result = {}
result["code"] = 0
result["result"] = ping == 0 and 1 or 0
LuciHttp.write_json(result)
end
--[[
simple : 0/1/2 (正常模式,时间长上传log/简单模式,时间短,不上传log/简单模式,时间短,上传log)
]]--
function systemDiagnostics()
local XQLog = require("xiaoqiang.XQLog")
local XQSysUtil = require("xiaoqiang.util.XQSysUtil")
local XQSecureUtil = require("xiaoqiang.util.XQSecureUtil")
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local XQDeviceUtil = require("xiaoqiang.util.XQDeviceUtil")
local lan = XQDeviceUtil.getWanLanNetworkStatistics("lan")
local wan = XQDeviceUtil.getWanLanNetworkStatistics("wan")
local speed = {}
speed["lan"] = tonumber(lan.downspeed)
speed["wan"] = tonumber(wan.downspeed)
local simple = tonumber(LuciHttp.formvalue("simple") or 0)
local target = LuciHttp.formvalue("target")
local result = {}
local code = 0
local status = 0
local count = 0
local cpuTemperature = XQSysUtil.getCpuTemperature()
local network = XQSysUtil.getNetworkDetectInfo(simple,target)
XQSysUtil.setDetectionTimestamp()
local wifiInfo = XQWifiUtil.getAllWifiInfo()
local same = false
local strong = true
local wifi = {}
for i=1, #wifiInfo do
if XQSecureUtil.checkPlaintextPwd("admin", wifiInfo[i].password) then
same = true
end
if XQSecureUtil.checkStrong(wifiInfo[i].password) < 2 then
strong = false
end
end
wifi["same"] = same and 1 or 0
wifi["strong"] = strong and 1 or 0
local disk = {}
local diskinfo = XQFunction.thrift_tunnel_to_datacenter([[{"api":26}]])
if diskinfo and diskinfo.code == 0 then
local capacity = tonumber(diskinfo.capacity)
local free = tonumber(diskinfo.free)
disk["Used"] = string.format("%.3fG", (capacity - free)/1073741824)
disk["Available"] = string.format("%.3fG", free/1073741824)
end
if network then
local cputemp = {}
cputemp["temperature"] = cpuTemperature
if cpuTemperature > 70 then
count = count + 1
status = 1
cputemp["status"] = 0
else
cputemp["status"] = 1
end
local cpuavg = {}
cpuavg["loadavg"] = network.cpu
if tonumber(network.cpu) > 90 then
count = count + 1
status = 1
cpuavg["status"] = 0
else
cpuavg["status"] = 1
end
local memoryuse = {}
memoryuse["use"] = network.memory
if tonumber(network.memory) > 90 then
count = count + 1
status = 1
memoryuse["status"] = 0
else
memoryuse["status"] = 1
end
local link = {}
if network.wanLink ~= 1 then
count = count + 1
status = 2
link["status"] = 0
else
link["status"] = 1
end
local wan = {}
wan["type"] = network.wanType
if tonumber(network.wanLink) ~= 1 then
count = count + 1
status = 2
wan["status"] = 0
else
wan["status"] = 1
end
local gateway = {}
gateway["lost"] = network.gw
if tonumber(network.gw) > 80 then
count = count + 1
status = 1
gateway["status"] = 0
else
gateway["status"] = 1
end
local dnsstatus = {}
if tonumber(network.dns) ~= 1 then
count = count + 1
status = 2
dnsstatus["status"] = 0
else
dnsstatus["status"] = 1
end
local ping = {}
ping["lost"] = network.pingLost
if tonumber(network.pingLost) > 80 then
count = count + 1
status = 2
ping["status"] = 0
else
ping["status"] = 1
end
result = network
result["count"] = count
result["status"] = status
result["cpuavg"] = cpuavg
result["memoryuse"] = memoryuse
result["cputemp"] = cputemp
result["link"] = link
result["wan"] = wan
result["gateway"] = gateway
result["dnsstatus"] = dnsstatus
result["ping"] = ping
result["cpuTemperature"] = cpuTemperature
result["wifi"] = wifi
result["speed"] = speed
result["disk"] = disk
if count > 0 then
XQLog.check(0, XQLog.KEY_DETECT_ERROR, 1)
end
else
code = 1567
end
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
else
local XQPushHelper = require("xiaoqiang.XQPushHelper")
local LuciJson = require("json")
local payload = {
["type"] = 6,
["data"] = {
["lan"] = speed.lan,
["wan"] = speed.wan
}
}
XQPushHelper.push_request(LuciJson.encode(payload))
end
result["code"] = code
LuciHttp.write_json(result)
end
function systemStatus()
local XQSysUtil = require("xiaoqiang.util.XQSysUtil")
local count = 0
local result = {}
local status = XQSysUtil.checkSystemStatus()
result["code"] = 0
result["status"] = 0
if (status.cpu and status.cpu > 90) then
count = count + 1
result["status"] = 1
end
if (status.mem and status.mem > 90) then
count = count + 1
result["status"] = 1
end
if (status.tmp and status.tmp > 70) then
count = count + 1
result["status"] = 1
end
if not status.wan or not status.link then
count = count + 1
result["status"] = 2
end
result["count"] = count
LuciHttp.write_json(result)
end
function netspeed()
local XQPreference = require("xiaoqiang.XQPreference")
local XQNSTUtil = require("xiaoqiang.module.XQNetworkSpeedTest")
local code = 0
local result = {}
local history = LuciHttp.formvalue("history")
if history then
result["bandwidth"] = tonumber(XQPreference.get("BANDWIDTH", 0, "xiaoqiang"))
result["download"] = tonumber(string.format("%.2f", 128 * result.bandwidth))
else
local download = XQNSTUtil.downloadSpeedTest()
if download then
result["download"] = download
result["bandwidth"] = tonumber(string.format("%.2f", 8 * download/1024))
XQPreference.set("BANDWIDTH", tostring(result.bandwidth), "xiaoqiang")
else
code = 1588
end
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
end
result["code"] = code
LuciHttp.write_json(result)
end
function uploadSpeed()
local XQNSTUtil = require("xiaoqiang.module.XQNetworkSpeedTest")
local code = 0
local result = {}
local upload = XQNSTUtil.uploadSpeedTest()
if upload then
result["upload"] = upload
result["bandwidth"] = tonumber(string.format("%.2f", 8 * upload/1024))
else
code = 1588
end
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
result["code"] = code
LuciHttp.write_json(result)
end