lib/imperituroard.rb in imperituroard-0.2.1 vs lib/imperituroard.rb in imperituroard-0.2.2

- old
+ new

@@ -4,14 +4,17 @@ require "imperituroard/version" require "imperituroard/phpipamdb" require "imperituroard/phpipamcps" require "imperituroard/projects/iot/mongoconnector" require "imperituroard/projects/iot/hua_oceanconnect_adapter" +require "imperituroard/projects/iot/add_functions" require 'json' +require 'ipaddr' module Imperituroard - class Error < StandardError; end + class Error < StandardError; + end def initialize() end def hhh(jjj) @@ -24,13 +27,24 @@ def test(ggg) p ggg end end +class MyJSON + def self.valid?(value) + result = JSON.parse(value) + + result.is_a?(Hash) || result.is_a?(Array) + rescue JSON::ParserError, TypeError + false + end +end + class Pipam attr_accessor :username, :password, :ip, :database_class, :cps_class + def initialize(db_username, db_password, db_ip, cps_wsdl, cps_endpoint, cps_namespace) @username = db_username @password = db_password @ip = db_ip @database_class = Pdb.new("phpipam", db_username, db_password, db_ip, "3306") @@ -64,129 +78,181 @@ end else "failed" end end + include Phpipam end class Iot - attr_accessor :mongoip, :mongoport, :iotip, :iottoken, :mongo_database, :iotplatform_ip, :iotplatform_port, :cert_path, :key_path, :mongo_client + attr_accessor :mongoip, + :mongoport, + :iotip, + :iottoken, + :mongo_database, + :iotplatform_ip, + :iotplatform_port, + :cert_path, + :key_path, + :mongo_client, + :add_functions_connector - def initialize(mongoip, mongoport, iotip, mongo_database, iotplatform_ip, iotplatform_port, cert_path, key_path) + def initialize(mongoip, mongoport, iotip, mongo_database, + iotplatform_ip, iotplatform_port, cert_path, key_path, telegram_api_url, telegram_chat_id) @mongoip = mongoip @mongoport = mongoport @iotip = iotip @mongo_database = mongo_database @iotplatform_ip = iotplatform_ip @iotplatform_port = iotplatform_port @cert_path = cert_path @key_path = key_path @mongo_client = MongoIot.new(mongoip, mongoport, mongo_database) + @add_functions_connector = AdditionalFunc.new(telegram_api_url, telegram_chat_id) end #error list #:code => 507, :result => "Unknown SDK error" + #{:code => 200, :result => "Request completed successfully", :body => result_ps} - #1. Add device to profile + #!1. Add device to profile (only for new device) #login - login for client identification #profile - profile for device #imei_list - device identificator - #imei_list = { - # imei: imei, - # imsi: imsi, - # msisdn: msisdn, - # description: description, - # note: note, - # profile: profile, - # type: type, - # address: address - #} + #imei_list = [{"imei" => 131234123412341233, "description" => "dfdsf", "note"=>"second description", "profile"=>0}, + #{"imei" => 56213126347645784, "description" => "dfdsf", "note"=>"second description", "profile"=>0}] #massive commands - #+ - def add_device_to_profile(login, imei_list) - input_json = {:login => login, :imei_list =>imei_list} - + #++ + def add_device_to_profile(login, imei_list, remote_ip) + input_json = {:login => login, :imei_list => imei_list} + resp_out = {} begin - imei = [] - list1 = {} - for_insert = [] - for t in imei_list - imei.append(t["imei"]) - list1[t["imei"]] = t - end - get_login_info = mongo_client.check_login_profile_permiss(login, "profile")[:code] - if get_login_info==200 - list_exists = mongo_client.check_imei_exists(imei) - for_upload = imei - list_exists - for h in for_upload - for_insert.append(list1[h]) + thr1 = Thread.new do + + imei = [] + list1 = {} + for_insert = [] + not_processed_list = [] + processed_list = [] + + for ii in imei_list + list1[ii["imei"]] = ii + imei.append(ii["imei"]) end + list_checked = mongo_client.check_imei_exists(imei) + for ss in list_checked[:body][:exists] + not_processed_list.append({:imei=>ss, :error => "Device exists in database"}) + end + + for jj in list_checked[:body][:not_exists] + begin + get_login_info = mongo_client.check_login_prof_perm_id_one(login, list1[jj]["profile"])[:code] + if get_login_info==200 + for_insert.append(list1[jj]) + else + not_processed_list.append({:imei=>list1[jj], :error => "Permission denied for this profile"}) + end + rescue + not_processed_list.append({:imei=>list1[jj], :error => "Unknown error"}) + end + end + + begin + if for_insert!=[] mongo_client.imei_insert_list(for_insert) - else get_login_info - end + resp_out = {:code => 200, :result => "Data processed", :body => {:imei_processed => for_insert, :error_list => not_processed_list}} + else + resp_out = {:code => 202, :result => "Nothing for insertion", :body => {:imei_processed => for_insert, :error_list => not_processed_list}} + + end + rescue + resp_out = {:code => 505, :result => "Error with database communication"} + end + end rescue - return {:code => 507, :result => "Unknown SDK error"} + resp_out = {:code => 507, :result => "Unknown SDK error"} end - mongo_client.audit_logger("add_device_to_profile", "127.0.0.1", input_json, "resp") + thr1.join + mongo_client.audit_logger("add_device_to_profile", remote_ip, input_json, resp_out) + resp_out end - #2 Find device (only mongo datebase. IOT platform not need) + #!2 Find device (only mongo datebase. IOT platform not need) + # procedure for data selection from mongo database. + # for this function IOT platform not need # login # imei # imei_list =[41234,23452345,132412] - #+ - def device_find(login, imei_list) - input_json = {:login => login, :imei_list =>imei_list} - + #++ + def device_find(login, imei_list, remote_ip) + input_json = {:login => login, :imei_list => imei_list} ime_list_approved = [] ime_list_notapproved = [] - + resp = {} begin - for t in imei_list - prof_name1 = mongo_client.get_profile_name_from_imei(t) - p "prof_name1" - p prof_name1 - if prof_name1!=nil - permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1["profile"])[:code] - if permiss1==200 - ime_list_approved.append(t) + thr2 = Thread.new do + for t in imei_list + prof_name1 = mongo_client.get_profile_name_from_imei(t) + if prof_name1[:code]==200 + begin + permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1[:body]["profile"])[:code] + if permiss1==200 + ime_list_approved.append(t) + else + ime_list_notapproved.append({:imei => t, :error => permiss1}) + end + rescue + ime_list_notapproved.append({:imei => t, :error => {:code => 405, :result => "Unknown error when check_login_profile_permiss imei #{t.to_s}"}}) + end + else + ime_list_notapproved.append({:imei => t, :error => prof_name1}) end end + begin + if ime_list_approved != [] + data = mongo_client.get_imei_info_from_db(ime_list_approved) + + resp = {:code => 200, :result => "Request completed successfully", :data => {:approved_list => data, :unapproved_list => ime_list_notapproved}} + + else + resp = {:code => 404, :result => "Invalidate data", :data => {:approved_list => [], :unapproved_list => ime_list_notapproved}} + end + rescue + resp = {:code => 504, :result => "Unsuccessfully data transfer"} + end end - data = mongo_client.get_imei_info_from_db(ime_list_approved) - {:code => 507, :result => "Unknown SDK error", :data => data} rescue - {:code => 507, :result => "Unknown SDK error"} + resp = {:code => 507, :result => "Unknown SDK error"} end - - mongo_client.audit_logger("add_device_to_profile", "127.0.0.1", input_json, "resp") - + thr2.join + mongo_client.audit_logger("device_find", remote_ip, input_json, resp) + resp end #3 device modify, change imei #login #imei_old #imei_new #massive commands #im_list = [{:imei_old=>7967843245667, :imei_new=>7967843245665}] #+ def imei_replace(login, im_list) - input_json = {:login => login, :imei_list =>im_list} + input_json = {:login => login, :imei_list => im_list} begin - for a in im_list - p a - prof_name1 = mongo_client.get_profile_name_from_imei(a[:imei_old]) - p prof_name1 - permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1["profile"])[:code] - if permiss1==200 - mongo_client.device_modify_any_attr_mongo(a[:imei_old],{:imei=>a[:imei_new]}) + for a in im_list + p a + prof_name1 = mongo_client.get_profile_name_from_imei(a[:imei_old]) + p prof_name1 + permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1["profile"])[:code] + if permiss1==200 + mongo_client.device_modify_any_attr_mongo(a[:imei_old], {:imei => a[:imei_new]}) + end end - end rescue {:code => 507, :result => "Unknown SDK error"} end mongo_client.audit_logger("add_device_to_profile", "127.0.0.1", input_json, "resp") @@ -201,20 +267,20 @@ #imei=11341341234 #login="test" #+ def device_remove(login, imei) - input_json = {:login => login, :imei_list =>imei} + input_json = {:login => login, :imei_list => imei} resp = {} begin - prof_name = mongo_client.get_profile_name_from_imei(imei) - permiss = mongo_client.check_login_profile_permiss(login, prof_name["profile"])[:code] - if permiss==200 - resp = mongo_client.device_remove_single_mongo(imei) - end + prof_name = mongo_client.get_profile_name_from_imei(imei) + permiss = mongo_client.check_login_profile_permiss(login, prof_name["profile"])[:code] + if permiss==200 + resp = mongo_client.device_remove_single_mongo(imei) + end rescue {:code => 507, :result => "Unknown SDK error"} end mongo_client.audit_logger("device_remove", "127.0.0.1", input_json, "resp") resp @@ -226,23 +292,28 @@ #imei = newdevice_list #address = newdevice_list #newdevice_list=[{:imei=>7967843245665, :address=>"Golubeva51"}] #+ def device_add_address(login, newdevice_list) + add_functions_connector.telegram_message(newdevice_list.to_s) + p newdevice_list + p "gas" + p MyJSON.valid?(newdevice_list[0].to_s) + p "sdfsdfgs" input_json = {:login => login, :devices => newdevice_list} begin - resp = {} - for p in newdevice_list - prof_name = mongo_client.get_profile_name_from_imei(p[:imei]) + resp = {} + for p in newdevice_list + prof_name = mongo_client.get_profile_name_from_imei(p[:imei]) - p "prof_name" - p prof_name - permiss = mongo_client.check_login_profile_permiss(login, prof_name["profile"])[:code] - if permiss==200 - resp = mongo_client.device_modify_attr_mongo(p[:imei],p[:address]) + p "prof_name" + p prof_name + permiss = mongo_client.check_login_profile_permiss(login, prof_name["profile"])[:code] + if permiss==200 + resp = mongo_client.device_modify_attr_mongo(p[:imei], p[:address]) + end end - end return resp rescue {:code => 507, :result => "Unknown SDK error"} end mongo_client.audit_logger("device_remove", "127.0.0.1", input_json, "resp") @@ -254,61 +325,60 @@ #imsi #msisdn #newdevice_list=[{:imei=>7967843245665, :attributes=>{:address=>"Golubeva51", :profile=>"wqeqcqeqwev", :msisdn=>375298766719, :imsi=>25702858586756875}}] #+ def add_service(login, device_list) + + input_json = {:login => login, :devices => device_list} begin - for g in device_list - prof_name1 = mongo_client.get_profile_name_from_imei(g[:imei]) - p prof_name1 - permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1["profile"])[:code] - p permiss1 - permiss2 = mongo_client.check_login_profile_permiss(login, g[:attributes][:profile])[:code] - if permiss1==200 && permiss2==200 + for g in device_list + prof_name1 = mongo_client.get_profile_name_from_imei(g[:imei]) + p prof_name1 + permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1["profile"])[:code] + p permiss1 + permiss2 = mongo_client.check_login_profile_permiss(login, g[:attributes][:profile])[:code] + if permiss1==200 && permiss2==200 - attr = g[:attributes] - #mod_attr = {} + attr = g[:attributes] + #mod_attr = {} - if attr.key?(:profile) - if attr[:profile].is_a? Integer - p "Ok" - else - p new = mongo_client.get_profile_id_by_name(attr[:profile]) - attr[:profile] = new["profile_id"] + if attr.key?(:profile) + if attr[:profile].is_a? Integer + p "Ok" + else + p new = mongo_client.get_profile_id_by_name(attr[:profile]) + attr[:profile] = new["profile_id"] + end end - end - p attr + p attr - mongo_client.device_modify_any_attr_mongo(g[:imei],attr) + mongo_client.device_modify_any_attr_mongo(g[:imei], attr) + end end - end rescue {:code => 507, :result => "Unknown SDK error"} end mongo_client.audit_logger("device_remove", "127.0.0.1", input_json, "resp") end - - def test() - ddd = MongoIot.new(mongoip, mongoport, mongo_database) + ddd = MongoIot.new(mongoip, mongoport, mongo_database) #ddd.get_profiles_by_login("test") ff = [131234123412341233, 131234123127341233] #ddd.get_imsi_info_from_db(ff) p ddd.get_profile_id_by_name("1341241") end - def testhua() cert_file = cert_path key_file = key_path ddd1 = HuaIot.new(iotplatform_ip, iotplatform_port, "", "", cert_file, key_file) #p ddd1.dev_register_verif_code_mode("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa", "7521234165452") @@ -325,12 +395,13 @@ def testhua2() tt = "{\"deviceId\":\"fad0a417-b6a3-4b0b-abfc-fa2b0af9691a\",\"verifyCode\":\"6cb6dcca\",\"timeout\":180,\"psk\":\"1d16b55d577bc1f2e5e75d416ce6b8a2\"}" #tt = tt.gsub("\\","") #p tt - ff = tt.to_s + ff = tt.to_s p ff gg = JSON.parse(ff) p gg end end +