lib/imperituroard/projects/iot/mongoconnector.rb in imperituroard-0.1.9 vs lib/imperituroard/projects/iot/mongoconnector.rb in imperituroard-0.2.0

- old
+ new

@@ -1,37 +1,217 @@ require 'mongo' +require 'json' +require 'rubygems' +require 'nokogiri' +require 'rails' + #class for communication with mongo database for iot API class MongoIot - attr_accessor :mongoip, :mongoport, :client, :database + attr_accessor :mongo_ip, :mongo_port, :client, :mongo_database - def initialize(mongoip, mongoport, iotip, database) - @database = database - @mongoip = mongoip - @mongoport = mongoport - @iotip = iotip - client_host = [mongoip + ":" + mongoport] - @client = Mongo::Client.new(client_host, :database => database) + def initialize(mongo_ip, mongo_port, mongo_database) + @mongo_database = mongo_database + @mongo_ip = mongo_ip + @mongo_port = mongo_port + client_host = [mongo_ip + ":" + mongo_port] + @client = Mongo::Client.new(client_host, :database => mongo_database) end - def audit_logger(proc_name) + def audit_logger(proc_name, src_ip, input_json, output_json) begin collection = client[:audit] doc = { proc_name: proc_name, - hobbies: [ 'hiking', 'tennis', 'fly fishing' ], - siblings: { - brothers: 0, - sisters: 1 - } + sender: {src_ip: src_ip}, + input_params: input_json, + output_params: output_json } result = collection.insert_one(doc) p result rescue continue end end + + def get_profiles_by_login(login) + begin + login_profiles = [] + req2 = [] + result_ps = [] + collection = client[:users] + collection2 = client[:device_profiles] + collection.find({:login => login}).each { |row| + login_profiles = row["permit_profiles"] + } + for i in login_profiles + req2.append({:profile_id => i}) + end + collection2.find({:$or => req2}, {:_id => 0}).each { |row| + result_ps.append(row) + } + result_ps + rescue + [] + end + end + + def get_imei_info_from_db(imeilist) + begin + req2 = [] + result_ps = [] + collection = client[:device_imei] + for i in imeilist + req2.append({:imei => i}) + end + p req2 + collection.find({:$or => req2}, {:_id => 0}).each { |row| + result_ps.append(row) + } + result_ps + rescue + [] + end + end + + def get_profile_id_by_name(profile_name) + begin + result_ps = [] + collection = client[:device_profiles] + collection.find({"profile" => profile_name}).each { |row| + result_ps.append(row) + } + result_ps[0] + rescue + [] + end + end + + def get_profile_name_by_id(profile_id) + begin + result_ps = [] + collection = client[:device_profiles] + collection.find({"profile_id" => profile_id}).each { |row| + result_ps.append(row) + } + result_ps[0] + rescue + [] + end + end + + def check_login_profile_permiss(login, profile) + p "profile" + p profile + get_login_info = get_profiles_by_login(login) + p "get_login_info" + p get_login_info + dst_profile = get_profile_id_by_name(profile) + p "dst_profile" + p dst_profile + access=1 + if get_login_info!=[] + if dst_profile!=[] + for j in get_login_info + p j + if j["profile_id"]==dst_profile["profile_id"] + access=0 + end + if access==0 + return {:code => 200, :result => "Permission granted"} + else + return {:code => 400,:result => "Access denied. This incident will be reported."} + end + end + else return {:code => 501,:result => "Profile not found"} + end + else {:code => 500,:result => "Login not found"} + end + end + + def check_imei_exists(imei_list) + res = [] + imei_list = get_imei_info_from_db(imei_list) + for k in imei_list + res.append(k["imei"]) + end + res + end + + + def imei_insert_list(imei_list) + begin + collection = client[:device_imei] + p imei_list + for l in imei_list + doc = { + imei: l, + imsi: "", + msisdn: "", + description: "test imei", + note: "second description", + profile: 0, + type: 0, + address: "unknown" + } + result = collection.insert_one(l) + p result + end + rescue + continue + end + end + + def get_profile_name_from_imei(imei) + info = get_imei_info_from_db([imei]) + p "123" + p info + id = info[0]["profile"] + get_profile_name_by_id(id) + end + + + def device_remove_single_mongo(imei) + + collection = client[:device_imei] + doc = { + "imei" => imei + } + result = collection.delete_many(doc) + p result + end + + def device_modify_attr_mongo(imei,address) + begin + collection = client[:device_imei] + doc = { + "imei" => imei + } + sett = {'$set' => { address: address}} + result = collection.update_one(doc, sett) + p result + rescue + continue + end + end + + def device_modify_any_attr_mongo(imei,attr_list) + begin + collection = client[:device_imei] + doc = { + "imei" => imei + } + sett = {'$set' => attr_list} + result = collection.update_one(doc, sett) + p result + rescue + continue + end + end + + + def ttt p "111111" begin puts(client.cluster.inspect) \ No newline at end of file