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