lib/imperituroard/projects/iot.rb in imperituroard-1.0.3 vs lib/imperituroard/projects/iot.rb in imperituroard-1.0.4

- old
+ new

@@ -152,28 +152,25 @@ model_data[:body]["ManufacturerID"], model_data[:body]["ManufacturerNAME"], model_data[:body]["model"] ) if resss[:code]=="200" - if resss[:body].key?("error_code") && resss[:body]["error_code"] != 200 not_processed_list.append({:imei => aaa["imei"], :error => resss}) else s1 = aaa s1[:huadata] = resss s1[:created] = DateTime.now + s1[:type] = s1["device_type"] added_on_iot_platf.append(s1) end - else not_processed_list.append({:imei => aaa["imei"], :error => resss}) end rescue not_processed_list.append({:imei => aaa["imei"], :error => "Unknown error with insertion imei on IOT platform"}) end - - #########end iot platform logic####### else resss_err = {:code => 400, :result => "IOT platform credentials not found"} not_processed_list.append({:imei => aaa["imei"], :error => resss_err}) @@ -185,20 +182,16 @@ mongo_client.imei_insert_list(added_on_iot_platf) resp_out = {:code => 200, :result => "Data processed", :body => {:imei_processed => added_on_iot_platf, :error_list => not_processed_list}} else resp_out = {:code => 202, :result => "Empty list. Nothing for insertion", :body => {:imei_processed => added_on_iot_platf, :error_list => not_processed_list}} end - - else resp_out = {:code => 202, :result => "Nothing for insertion", :body => {:imei_processed => added_on_iot_platf, :error_list => not_processed_list}} - end rescue resp_out = {:code => 505, :result => "Error with database communication"} end - else resp_out = {:code => 509, :result => "Input data invalid"} end end rescue @@ -684,13 +677,11 @@ end resp_out = {:code => 200, :result => "Request completed successfully", :body => {:imei_processed => processed, :error_list => not_processed}} else resp_out = {:code => 509, :result => "Input data invalid"} end - end - rescue resp_out = {:code => 507, :result => "Unknown SDK error"} end thr6.join mongo_client.audit_logger("device_remove", remote_ip, input_json, resp_out, real_ip) @@ -969,139 +960,162 @@ processed_list = [] inp_login = soapgw_params["autorization"]["login"] inp_dev_list = soapgw_params["datalist"] - inp_dev_list.each do |curr_dev| - begin - if curr_dev["imei"] != [] && curr_dev["imei"] != nil && curr_dev["imei"] != "" - list_checked = mongo_client.check_imei_exists([curr_dev["imei"].to_i]) - if list_checked[:code] == 200 && list_checked[:body][:exists] != [] && list_checked[:body][:not_exists] == [] + thr13set = Thread.new do + inp_dev_list.each do |curr_dev| + begin + if curr_dev["imei"] != [] && curr_dev["imei"] != nil && curr_dev["imei"] != "" + list_checked = mongo_client.check_imei_exists([curr_dev["imei"].to_i]) + if list_checked[:code] == 200 && list_checked[:body][:exists] != [] && list_checked[:body][:not_exists] == [] - #step1 checking permission for writing for imei list - prof_name1 = mongo_client.get_profile_name_from_imei(curr_dev["imei"].to_i) - if prof_name1[:code] == 200 + #step1 checking permission for writing for imei list + prof_name1 = mongo_client.get_profile_name_from_imei(curr_dev["imei"].to_i) + p prof_name1 + p "prof_name1" + if prof_name1[:code] == 200 - if curr_dev["new_profile"] != "nil" && curr_dev["new_profile"] != "null" && curr_dev["new_profile"] != "empty" - prof_new_id = mongo_client.get_profile_universal(curr_dev["new_profile"])["profile_id"] - else - prof_new_id = prof_name1[:body]["profile_id"] - end + if curr_dev["new_profile"] != "nil" && curr_dev["new_profile"] != "null" && curr_dev["new_profile"] != "empty" && curr_dev["new_profile"] != "nill" + prof_new_id = mongo_client.get_profile_universal(curr_dev["new_profile"])["profile_id"] + else + prof_new_id = prof_name1[:body]["profile_id"] + end + if curr_dev["new_type"] != "nil" && curr_dev["new_type"] != "null" && curr_dev["new_type"] != "empty" && curr_dev["new_type"] != "nill" + type_new_pr = curr_dev["new_type"] + else + type_new_pr = prof_name1[:imei_info][:body][0]["device_type"] + end - if curr_dev["new_type"] != "nil" && curr_dev["new_type"] != "null" && curr_dev["new_type"] != "empty" - type_new_pr = curr_dev["new_type"] - else - type_new_pr = prof_name1[:imei_info][:body][0]["device_type"] - end + p type_new_pr + p prof_new_id + p "st111111" + get_login_info = mongo_client.check_login_prof_perm_id_one(inp_login, prof_name1[:body]["profile_id"]) + p get_login_info + p "get_login_info" + if get_login_info[:code] == 200 + get_login_info_new = mongo_client.check_login_prof_perm_id_one(inp_login, prof_new_id) + p get_login_info_new + p "get_login_info_new" + if get_login_info_new[:code] == 200 + cur_comp1 = mongo_client.compare_profiles(prof_name1[:body]["profile_id"], prof_new_id) + p cur_comp1 + p "cur_comp1" + cur_comp2 = mongo_client.compare_device_types(prof_name1[:imei_info][:body][0]["type"], type_new_pr) - get_login_info = mongo_client.check_login_prof_perm_id_one(inp_login, prof_name1[:body]["profile_id"]) - if get_login_info[:code] == 200 - get_login_info_new = mongo_client.check_login_prof_perm_id_one(inp_login, prof_new_id) - if get_login_info_new[:code] == 200 - cur_comp1 = mongo_client.compare_profiles(prof_name1[:body]["profile_id"], prof_new_id) - cur_comp2 = mongo_client.compare_device_types(prof_name1[:imei_info][:body][0]["device_type"], type_new_pr) - if cur_comp1[:is_the_same] && cur_comp2[:is_the_same] - #the same. Nothing to do - processed_list.append(curr_dev) - ######## - else - credentials_old = mongo_client.get_iot_oceanconn_credent_2(prof_name1[:body]["profile"]) - credentials_new = mongo_client.get_iot_oceanconn_credent_2(prof_new_id) - ######### - if credentials_old[:code] == 200 && credentials_new[:code] == 200 - imei_data = mongo_client.get_imei_info_from_db([curr_dev["imei"].to_i]) - if imei_data[:body] != [] - ans = {} - if imei_data[:body][0]["huadata"]["body"]["deviceId"] != nil - model_data = mongo_client.get_device_type_info_universal(type_new_pr) - #####all checks completed. then process data##### - ans_old = hua_aceanconnect_connector.remove_one_device_from_iot(credentials_old[:body][:app_id], credentials_old[:body][:secret], imei_data[:body][0]["huadata"]["body"]["deviceId"]) + p cur_comp2 + p "cur_comp2" - if ans_old[:code].to_i == 200 || ans_old[:code].to_i == 202 || ans_old[:code].to_i == 204 - begin - resss = hua_aceanconnect_connector.add_new_device_on_huawei(credentials_new[:body][:app_id], - credentials_new[:body][:secret], - curr_dev["imei"].to_i, - curr_dev["imei"].to_s, - prof_name1[:body]["description"], - model_data[:body]["device_type"], - curr_dev["new_profile"], - model_data[:body]["ManufacturerID"], - model_data[:body]["ManufacturerNAME"], - model_data[:body]["model"] - ) - if resss[:code]=="200" - if resss[:body].key?("error_code") && resss[:body]["error_code"] != 200 - not_processed_list.append({:imei => curr_dev["imei"], :error => resss}) - else - new_id_iot = resss[:body] - new_profile_id = prof_new_id - now_date = DateTime.now - #finished success. update database - attribute = {profile: new_profile_id, device_type: model_data[:body]["model"], huadata: {body: new_id_iot}, updated: now_date} - answ_mongo = mongo_client.modify_attr_mongo_universal(curr_dev["imei"].to_i, attribute) - if answ_mongo[:code] != 200 - not_processed_list.append({:imei => curr_dev["imei"], :error => "Critical error. Mongo not updated", :mongo_err => answ_mongo}) + if cur_comp1[:is_the_same] && cur_comp2[:is_the_same] + #the same. Nothing to do + processed_list.append(curr_dev) + ######## + else + credentials_old = mongo_client.get_iot_oceanconn_credent_2(prof_name1[:body]["profile"]) + credentials_new = mongo_client.get_iot_oceanconn_credent_2(prof_new_id) + p credentials_new + p "credentials_new" + ######### + if credentials_old[:code] == 200 && credentials_new[:code] == 200 + imei_data = mongo_client.get_imei_info_from_db([curr_dev["imei"].to_i]) + p imei_data + p "imei_data" + if imei_data[:body] != [] + ans = {} + if imei_data[:body][0]["huadata"]["body"]["deviceId"] != nil + model_data = mongo_client.get_device_type_info_universal(type_new_pr) + p model_data + p "model_data" + #####all checks completed. then process data##### + ans_old = hua_aceanconnect_connector.remove_one_device_from_iot(credentials_old[:body][:app_id], credentials_old[:body][:secret], imei_data[:body][0]["huadata"]["body"]["deviceId"]) + + + if ans_old[:code].to_i == 200 || ans_old[:code].to_i == 202 || ans_old[:code].to_i == 204 + begin + resss = hua_aceanconnect_connector.add_new_device_on_huawei(credentials_new[:body][:app_id], + credentials_new[:body][:secret], + curr_dev["imei"].to_i, + curr_dev["imei"].to_s, + prof_name1[:body]["description"], + model_data[:body]["device_type"], + curr_dev["new_profile"], + model_data[:body]["ManufacturerID"], + model_data[:body]["ManufacturerNAME"], + model_data[:body]["model"] + ) + if resss[:code] == "200" + if resss[:body].key?("error_code") && resss[:body]["error_code"] != 200 + not_processed_list.append({:imei => curr_dev["imei"], :error => resss}) else - processed_list.append(curr_dev) + new_id_iot = resss[:body] + new_profile_id = prof_new_id + now_date = DateTime.now + #finished success. update database + attribute = {profile: new_profile_id, type: model_data[:body]["model"], huadata: {body: new_id_iot}, updated: now_date} + answ_mongo = mongo_client.modify_attr_mongo_universal(curr_dev["imei"].to_i, attribute) + if answ_mongo[:code] != 200 + not_processed_list.append({:imei => curr_dev["imei"], :error => "Critical error. Mongo not updated", :mongo_err => answ_mongo}) + else + processed_list.append(curr_dev) + end end - #added_on_iot_platf.append(s1) + else + not_processed_list.append({:imei => curr_dev["imei"], :error => resss}) end - else - not_processed_list.append({:imei => curr_dev["imei"], :error => resss}) + rescue + not_processed_list.append({:imei => curr_dev["imei"], :error => "Unknown error with insertion imei on IOT platform"}) end - rescue - not_processed_list.append({:imei => curr_dev["imei"], :error => "Unknown error with insertion imei on IOT platform"}) end + else + not_processed_list.append({:imei => curr_dev["imei"], :error => "Not processed by iot platform. deviceId not found in mongoDB"}) end else - not_processed_list.append({:imei => curr_dev["imei"], :error => "Not processed by iot platform. deviceId not found in mongoDB"}) + not_processed_list.append({:imei => curr_dev["imei"], :error => "Failed to get info from database"}) end else - not_processed_list.append({:imei => curr_dev["imei"], :error => "Failed to get info from database"}) + not_processed_list.append({:imei => curr_dev["imei"], :error => "Failed to get credentials from database"}) end - else - not_processed_list.append({:imei => curr_dev["imei"], :error => "Failed to get credentials from database"}) end + else + not_processed_list.append({:imei => curr_dev["imei"], :error => "New profile modification not permitted"}) end else - not_processed_list.append({:imei => curr_dev["imei"], :error => "New profile modification not permitted"}) + not_processed_list.append({:imei => curr_dev["imei"], :error => "Old profile modification not permitted"}) end else - not_processed_list.append({:imei => curr_dev["imei"], :error => "Old profile modification not permitted"}) + not_processed_list.append({:imei => curr_dev["imei"], :error => "Unknown current profile"}) end else - not_processed_list.append({:imei => curr_dev["imei"], :error => "Unknown current profile"}) + not_processed_list.append({:imei => curr_dev["imei"], :error => "Device not exists"}) end else - not_processed_list.append({:imei => curr_dev["imei"], :error => "Device not exists"}) + not_processed_list.append({:imei => curr_dev["imei"], :error => "IMEI can't be nil"}) end - else - not_processed_list.append({:imei => curr_dev["imei"], :error => "IMEI can't be nil"}) + rescue + not_processed_list.append({:imei => curr_dev["imei"], :error => "Unknown SDK error"}) end - rescue - not_processed_list.append({:imei => curr_dev["imei"], :error => "Unknown SDK error"}) + end - end + err_li = [] + if not_processed_list.length > 0 + not_processed_list.each do |err_l| + err_li.append({:failedimei => err_l[:imei]}) + end + end - err_li = [] - if not_processed_list.length > 0 - not_processed_list.each do |err_l| - err_li.append({:failedimei => err_l[:imei]}) + if processed_list.length > 0 + answ_to_soapgw = {:code => 200, :result => "Success", :body => {:processednum => processed_list.length, :failednum => not_processed_list.length, :deviceserr => err_li}} + else + answ_to_soapgw = {:code => 202, :result => "Nothing done", :body => {:processednum => 0, :failednum => not_processed_list.length, :deviceserr => err_li}} end end + thr13set.join - if processed_list.length > 0 - soap_answ = {:code=>200, :result=>"Success", :body=>{:processednum => processed_list.length, :failednum => not_processed_list.length, :deviceserr => err_li}} - else - soap_answ = {:code=>202, :result=>"Nothing done", :body=>{:processednum => 0, :failednum => not_processed_list.length, :deviceserr => err_li}} - end - - output_answ = {:code => 200, :result => "Success", :body => {:to_soap_gw => soap_answ, :not_processed_list => not_processed_list, :processed_list => processed_list}} + output_answ = {:code => 200, :result => "Success", :body => {:to_soap_gw => answ_to_soapgw, :not_processed_list => not_processed_list, :processed_list => processed_list}} mongo_client.audit_logger("set_data_replace_2", remote_ip, input_params, output_answ, real_ip) output_answ end