#!/usr/bin/lua5.1 local cjson=require("cjson") local frp_online_gateways_objs={} local all_gateways_objs={} local online_gateways_objs={} local all_devs_objs={} local all_dtues_objs={} local all_data={} local online_gateways_objs_cnt=0 local frp_online_gateways_objs_cnt=0 local all_gateways_objs_cnt=0 local all_devs_objs_cnt=0 local all_dtues_objs_cnt=0 function update_dev_list(base_url,user,passwd) --1. login and get token local text_result=io.popen(string.format("curl -s -c cookies.txt -H'Accept: application/json, text/plain, */*' -H'Content-Type: application/json;charset=UTF-8' -H'Referer: %s' -H'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -d '{\"username\":\"%s\",\"password\":\"%s\"}' '%s/iot/system/user/login'", base_url, user, passwd, base_url)):read("*a") --print(text_result) local obj=cjson.decode(text_result) if not obj or obj.code ~= 200 then print("login failed") return -1 end local Authorization=string.format("Authorization: %s%s", obj.data.tokenHead, obj.data.token) local Cookie=string.format("Cookie: loginToken=%s%s", obj.data.tokenHead, obj.data.token) --2. get user list text_result=io.popen(string.format("curl -s -H'Accept: application/json, text/plain, */*' -H'Referer: %s' -H'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H'%s' -H'%s' '%s/iot/system/tenant/findPageList?page=1&size=100'", base_url, Authorization, Cookie, base_url)):read("*a") --print(text_result) obj=cjson.decode(text_result) if not obj or not obj.result or obj.result.status ~= 200 then print("get user list failed") return -2 end local all_tenants=obj.data all_data.all_tenants=all_tenants all_data.all_tenants_count=obj.pagination.totalCount for i,v in ipairs(all_tenants) do --print(v.name, v.tenantId) --3. get each user's token text_result=io.popen(string.format("curl -s -X POST -H'Accept: application/json, text/plain, */*' -H'Referer: %s' -H'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H'%s' -H'%s' '%s/iot/system/tenant/switch/%s'", base_url, Authorization, Cookie, base_url, v.tenantId)):read("*a") --print(text_result) obj=cjson.decode(text_result) if not obj or obj.code ~= 200 then print(string.format("get %s user's token failed", v.tenantId)) return -3 end Authorization=string.format("Authorization: %s%s", obj.data.tokenHead, obj.data.token) Cookie=string.format("Cookie: loginToken=%s%s", obj.data.tokenHead, obj.data.token) --4. get each user's gateway list text_result=io.popen(string.format("curl -s -H'Accept: application/json, text/plain, */*' -H'Referer: %s' -H'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H'%s' -H'%s' '%s/iot/gateway/findPageList?gateWayType=15&page=1&size=1000000'", base_url, Authorization, Cookie, base_url)):read("*a") --print(text_result) obj=cjson.decode(text_result) if not obj or not obj.result or obj.result.status ~= 200 then print(string.format("get %s user's gateway list failed", v.tenantId)) return -4 end local all_gateways=obj.data v.all_gateways=all_gateways v.all_gateways_count=obj.pagination.totalCount --5. get each user's dev list text_result=io.popen(string.format("curl -s -H'Accept: application/json, text/plain, */*' -H'Referer: %s' -H'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H'%s' -H'%s' '%s/iot/device/findPageList?page=1&size=1000000&isDev=1'", base_url, Authorization, Cookie, base_url)):read("*a") --print(text_result) obj=cjson.decode(text_result) if not obj or not obj.result or obj.result.status ~= 200 then print(string.format("get %s user's dev list failed", v.tenantId)) return -5 end local all_devs=obj.data v.all_devs=all_devs v.all_devs_count=obj.pagination.totalCount --6. get each user's dtu list text_result=io.popen(string.format("curl -s -H'Accept: application/json, text/plain, */*' -H'Referer: %s' -H'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H'%s' -H'%s' '%s/iot/device/findPageList?page=1&size=1000000&isDtu=1'", base_url, Authorization, Cookie, base_url)):read("*a") --print(text_result) obj=cjson.decode(text_result) if not obj or not obj.result or obj.result.status ~= 200 then print(string.format("get %s user's dtu list failed", v.tenantId)) return -6 end local all_dtues=obj.data v.all_dtues=all_dtues v.all_dtues_count=obj.pagination.totalCount end return 0 end function update_port_list() local text_result=io.popen('curl -s -u "dywl:dywlfrp123" "http://frps.lnxall.com:7500/api/proxy/tcp"'):read("*a") local obj=cjson.decode(text_result) for i,v in ipairs(obj.proxies) do if v.status == "online" then table.insert(frp_online_gateways_objs,{name=v.name,remote_ip="192.168.170.23",remote_port=v.conf.remote_port,user="root",passwd="dyiot123"}) end end end function ssh_toport_exec(special_gateway_objs,cmd) for i,v in ipairs(frp_online_gateways_objs) do for i1,v1 in ipairs(special_gateway_objs) do if v.name == "ssh_" .. v1 then print(string.format("--------- %s --------", v.name)) local text_result=io.popen(string.format('./auto_ssh.exp %s %s %s %s "%s"', v.remote_ip,v.remote_port,v.user,v.passwd, cmd)):read("*a") print(text_result) print(string.format("========= %s ========", v.name)) print("\n") end end if #special_gateway_objs == 0 then print(string.format("--------- %s --------", v.name)) local text_result=io.popen(string.format('./auto_ssh.exp %s %s %s %s "%s"', v.remote_ip,v.remote_port,v.user,v.passwd, cmd)):read("*a") print(text_result) print(string.format("========= %s ========", v.name)) print("\n") end end end function main() print("",os.time()) print("========================================================") update_port_list() frp_online_gateways_objs_cnt=#frp_online_gateways_objs print("all frp online gateways:", frp_online_gateways_objs_cnt) for k,v in pairs(frp_online_gateways_objs) do print("+++") for k1,v1 in pairs(v) do print(k1,":", v1) end print("---") end print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") print("") print("========================================================") local base_url="http://iot.lnxall.com" local user="admin" local passwd="dywliot123456" if update_dev_list(base_url, user, passwd) == 0 then print("all_tenants_count:",all_data.all_tenants_count) for k,v in pairs(all_data.all_tenants) do print("+++") print("tenant name:",v.name) print("tenant id:",v.tenantId) print("all gateways:", v.all_gateways_count) print("all devs:", v.all_devs_count) print("all dtues:", v.all_dtues_count) print("---") for k1,v1 in pairs(v.all_gateways) do v1.tenantId=v.tenantId v1.tenantName=v.name table.insert(all_gateways_objs, v1) end for k1,v1 in pairs(v.all_devs) do v1.tenantId=v.tenantId v1.tenantName=v.name table.insert(all_devs_objs, v1) end for k1,v1 in pairs(v.all_dtues) do v1.tenantId=v.tenantId v1.tenantName=v.name table.insert(all_dtues_objs, v1) end end end print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") print("") print("========================================================") local base_url="http://183.129.159.168:12121" local user="admin" local passwd="123456" if update_dev_list(base_url, user, passwd) == 0 then print("all_tenants_count:",all_data.all_tenants_count) for k,v in pairs(all_data.all_tenants) do print("+++") print("tenant name:",v.name) print("tenant id:",v.tenantId) print("all gateways:", v.all_gateways_count) print("all devs:", v.all_devs_count) print("all dtues:", v.all_dtues_count) for k1,v1 in pairs(v.all_gateways) do v1.tenantId=v.tenantId v1.tenantName=v.name table.insert(all_gateways_objs, v1) end for k1,v1 in pairs(v.all_devs) do v1.tenantId=v.tenantId v1.tenantName=v.name table.insert(all_devs_objs, v1) end for k1,v1 in pairs(v.all_dtues) do v1.tenantId=v.tenantId v1.tenantName=v.name table.insert(all_dtues_objs, v1) end print("---") end end print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") print("") print("========================================================") local base_url="http://183.129.159.168:12121" local user="admin" local passwd="123456" if update_dev_list(base_url, user, passwd) == 0 then print("all_tenants_count:",all_data.all_tenants_count) for k,v in pairs(all_data.all_tenants) do print("+++") print("tenant name:",v.name) print("tenant id:",v.tenantId) print("all gateways:", v.all_gateways_count) print("all devs:", v.all_devs_count) print("all dtues:", v.all_dtues_count) for k1,v1 in pairs(v.all_gateways) do v1.tenantId=v.tenantId v1.tenantName=v.name table.insert(all_gateways_objs, v1) end for k1,v1 in pairs(v.all_devs) do v1.tenantId=v.tenantId v1.tenantName=v.name table.insert(all_devs_objs, v1) end for k1,v1 in pairs(v.all_dtues) do v1.tenantId=v.tenantId v1.tenantName=v.name table.insert(all_dtues_objs, v1) end print("---") end end print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") print("") print("========================================================") local base_url="http://39.100.115.127" local user="admin" local passwd="jjiot2019" if update_dev_list(base_url, user, passwd) == 0 then print("all_tenants_count:",all_data.all_tenants_count) for k,v in pairs(all_data.all_tenants) do print("+++") print("tenant name:",v.name) print("tenant id:",v.tenantId) print("all gateways:", v.all_gateways_count) print("all devs:", v.all_devs_count) print("all dtues:", v.all_dtues_count) print("---") for k1,v1 in pairs(v.all_gateways) do v1.tenantId=v.tenantId v1.tenantName=v.name table.insert(all_gateways_objs, v1) end for k1,v1 in pairs(v.all_devs) do v1.tenantId=v.tenantId v1.tenantName=v.name table.insert(all_devs_objs, v1) end for k1,v1 in pairs(v.all_dtues) do v1.tenantId=v.tenantId v1.tenantName=v.name table.insert(all_dtues_objs, v1) end end end print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") print("") print("========================================================") all_gateways_objs_cnt=#all_gateways_objs print("all gateways objs count:", all_gateways_objs_cnt) for k,v in pairs(all_gateways_objs) do print("+++") for k1,v1 in pairs(v) do if k1 == "name" or k1 == "description" or k1 == "channelNumber" or k1 == "status" or k1 == "tenantId" or k1 == "tenantName" then print(k1, ":", v1) if k1 == "status" and v1 == 1 then table.insert(online_gateways_objs, v) end end end print("---") end print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") print("") print("========================================================") online_gateways_objs_cnt = #online_gateways_objs print("all online gateways objs count:", online_gateways_objs_cnt) for k,v in pairs(online_gateways_objs) do print("+++") for k1,v1 in pairs(v) do if k1 == "name" or k1 == "channelNumber" or k1 == "status" or k1 == "description" or k1 == "tenantId" or k1 == "tenantName" then print(k1, ":", v1) end end print("---") local is_match=0 print("+++") for k2,v2 in pairs(frp_online_gateways_objs) do if v2.name == ("ssh_" .. v.channelNumber) then is_match=1 break end end print("---") if is_match ~= 1 then print("online in web, but not online in frp:", v.name, v.description, v.channelNumber, v.tenantName, v.tenantId) end end for k,v in pairs(frp_online_gateways_objs) do for k1,v1 in pairs(all_gateways_objs) do if v.name == ("ssh_" .. v1.channelNumber) then v.tenantName = v1.tenantName v.tenantId = v1.tenantId v.description = v1.description end end end for k,v in pairs(frp_online_gateways_objs) do local is_match=0 for k1,v1 in pairs(online_gateways_objs) do if v.name == ("ssh_" .. v1.channelNumber) then is_match=1 end end if is_match ~= 1 then print("!!!frp online, but not online in web:", v.name, v.description, v.remote_port, v.tenantName, v.tenantId) end end print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") print("") print("========================================================") print("!!!more than 4H no data, dev list:") all_devs_objs_cnt=#all_devs_objs for k,v in pairs(all_devs_objs) do if v.status == 1 and v.lastConnectTime > 0 and (os.time() - v.lastConnectTime/1000) > 14400 then print("+++") print("name:",v.name) print("description:",v.description) print("channelNumber:",v.channelNumber) print("tenantId:",v.tenantId) print("tenantName:",v.tenantName) print("lastConnectTime:",v.lastConnectTime) print("DeltaTime:",os.time()-v.lastConnectTime/1000) print("---") end end print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") print("") print("========================================================") print("!!!more than 4H no data, dtu list:") all_dtues_objs_cnt=#all_dtues_objs for k,v in pairs(all_dtues_objs) do if v.status == 1 and v.lastConnectTime > 0 and (os.time() - v.lastConnectTime/1000) > 14400 then print("+++") print("name:",v.name) print("description:",v.description) print("channelNumber:",v.channelNumber) print("tenantId:",v.tenantId) print("tenantName:",v.tenantName) print("lastConnectTime:",v.lastConnectTime) print("DeltaTime:",os.time()-v.lastConnectTime/1000) print("---") end end local cmd = "cat /etc/issue;cat /tmp/miss_count;ps | grep supervisor*;ls -la /app/*.core.tar.gz 2>/dev/null;ls -la /tmp/*.core 2>/dev/null;route -n | sed -n '/^0.0.0.0/p';" --local cmd = "opkg update;opkg remove --force-depends gw_lora_v2;opkg install gw_lora_v2;rm -rf /app/lora_gw.db;/etc/init.d/app restart" --cmd="rm -rf /app/*.core.tar.gz;rm -rf /tmp/*.core" --local cmd="uci set system.system.log_remote=0;uci commit system;/etc/init.d/log restart" --local cmd="opkg update;opkg --force-depends gw_lora_v2;opkg install gw_lora_v2;/etc/init.d/app restart" --local cmd="opkg update;opkg remove --force-depends whsnbg;opkg install whsnbg;/etc/init.d/whsnbg restart;" --local cmd="rm -rf /app/*.core.tar.gz;rm -rf /tmp/*.core;scp -P20100 llwang@frps.lnxall.com:~/supervisor* .;mv super*.sh /lib/dyiot/bin/;mv super* /etc/init.d/.;/etc/init.d/supervisor_4g enable;/etc/init.d/supervisor restart;/etc/init.d/supervisor_4g restart;scp -P20100 llwang@frps.lnxall.com:~/distfeeds.conf .;mv distfeeds.conf /etc/opkg/;opkg update;opkg remove --force-depends gw_lora_v2;opkg install gw_lora_v2;/etc/init.d/app restart;" local special_gateways_objs={} for k,v in pairs(online_gateways_objs) do --if v.tenantId == "63287620" and v.softVer ~= "1.454.930.0" then if v.tenantId == "63287620" then table.insert(special_gateways_objs,tostring(v.channelNumber)) end end print("special_gateways:", #special_gateways_objs) special_gateways_objs={} ssh_toport_exec(special_gateways_objs,cmd) end main()