lolitado 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c6f12af33a4803ac99c0ccd8e16ea78739c9b98a46ad4f9ff05b32c5bc5247f8
4
- data.tar.gz: bbe3525397830d523c92be5a1cd7dd6813f6a30243dfb2286e936d2634a0f576
3
+ metadata.gz: a3fd234304855f6114d300e141b4a73a32853571a76ff75b0ca9a27098fa8d75
4
+ data.tar.gz: a0e6606f7325ee49ab9a023b2960cb3cc2942e3590a093813789a3d9c16ee9dc
5
5
  SHA512:
6
- metadata.gz: 37fa088b2b3fde544b5cdc5949bc9c6858ae41b9f32755982dd82417b4ceb560d248b43ec0684b72ce85995ab9fdfc5901743509b7b4c57adced2befbb7b44a2
7
- data.tar.gz: e33804c5551ec6df52eb9caacdf9d612026fecbf97be56317fc58998c47bd31cbb851161899e8c0486fc1ce788b6347311d01cf9814d773630872d5982967de7
6
+ metadata.gz: a14021644154f53d50844fb227bc96f65c0e9f9cb2cdce35de9b247b2305596bed93e08a823d467faceb6754b1fb584c03689085513c8d58a90eb8d24a341e9f
7
+ data.tar.gz: 44059dd091f273aef49f4053e3dd0b2190e86f6b365d6485a57f45e73bfc934c34a736e753193c4ff51afe56441e831fc483cfdc9fcbeea324cf9a1d3ce32b13
data/lib/accessors.rb ADDED
@@ -0,0 +1,22 @@
1
+ #
2
+ # Contains the class level methods that are inserted into your api class
3
+ #
4
+ module Accessors
5
+
6
+ # just for example "how to create method in accesors"
7
+ def row name, identifier
8
+ define_method("delete_#{name}") do |value|
9
+ db[identifier[:table].to_sym].filter(value).delete
10
+ end
11
+ end
12
+
13
+ def column name, identifier
14
+ define_method("avg_#{name}") do |value|
15
+ db[identifier[:table].to_sym].filter(value).avg(identifier.values.last.to_sym)
16
+ end
17
+ define_method("query_#{name}") do |value|
18
+ db[identifier[:table].to_sym].filter(value).all
19
+ end
20
+ end
21
+
22
+ end
data/lib/db.rb ADDED
@@ -0,0 +1,57 @@
1
+ require './accessors'
2
+
3
+ class DBFactory
4
+ extend Accessors
5
+
6
+ attr_accessor :db
7
+
8
+ def initialize db
9
+ @db = db
10
+ end
11
+
12
+ def query_duration sql, type = true, waiting_time = 10
13
+ start = Time.now
14
+ if type
15
+ result = query(sql, waiting_time)
16
+ else
17
+ result = query_empty(sql, waiting_time)
18
+ end
19
+ finish = Time.now
20
+ msecs = (finish - start) * 1000.0
21
+ hash = {'result' => result, 'duration' => msecs}
22
+ return hash
23
+ end
24
+
25
+ def query sql, waiting_time = 10
26
+ result = db[sql].all
27
+ if result.length == 0
28
+ if waiting_time != 0
29
+ sleep 1
30
+ result = query(sql, waiting_time - 1)
31
+ end
32
+ end
33
+ return result
34
+ end
35
+
36
+ def multiple_query sql
37
+ splited_sql = sql.split(';')
38
+ splited_sql.each do |each_sql|
39
+ query_empty(each_sql)
40
+ end
41
+ end
42
+
43
+ def query_empty sql, waiting_time = 10
44
+ result = db[sql].all
45
+ if result.length != 0
46
+ if waiting_time != 0
47
+ sleep 1
48
+ result = query(sql, waiting_time - 1)
49
+ end
50
+ end
51
+ return result
52
+ end
53
+
54
+ def insert sql
55
+ db[sql]
56
+ end
57
+ end
data/lib/pool.rb ADDED
@@ -0,0 +1,109 @@
1
+ require 'mysql2'
2
+ require 'sequel'
3
+ require 'net/ssh/gateway'
4
+
5
+ class Pool
6
+
7
+ attr_accessor :db_pool, :ssh_pool, :file_path
8
+
9
+ def initialize file_path
10
+ @db_pool = {}
11
+ @ssh_pool = {}
12
+ @file_path = file_path
13
+ end
14
+
15
+ def use(params ={})
16
+ ssh_name = params.fetch(:ssh, false)
17
+ db_name = params.fetch(:db, false)
18
+ if db_pool[db_name].nil? && db_name
19
+ ssh_key = fetch_ssh_config db_name
20
+ unless ssh_key.nil?
21
+ ssh = create_or_use_ssh ssh_key
22
+ port = forward_port ssh, ssh_key
23
+ db = connect_database db_name, port
24
+ db_pool[db_name] = db
25
+ else
26
+ db = connect_database_directly db_name
27
+ db_pool[db_name] = db
28
+ end
29
+ elsif ssh_name
30
+ create_or_use_ssh ssh_name
31
+ else
32
+ db_pool[db_name]
33
+ end
34
+ end
35
+
36
+ def create_or_use_ssh name
37
+ if ssh_pool[name].nil?
38
+ ssh = connect_remote_server name
39
+ ssh_pool[name] = ssh
40
+ else
41
+ ssh_pool[name]
42
+ end
43
+ end
44
+
45
+ def connect_database name, port=false
46
+ database_file = YAML.load_file(file_path)
47
+ db_conf = database_file[name]
48
+ db_conf = db_conf.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
49
+ db_conf = db_conf.merge(:port => port) if port
50
+ db = get_ready_for_database db_conf
51
+ end
52
+
53
+ def get_ready_for_database conf
54
+ begin
55
+ Sequel.connect(conf)
56
+ rescue
57
+ fail "database configuration \n #{conf} \n is not correct, please double check"
58
+ end
59
+ end
60
+
61
+ def connect_remote_server name
62
+ database_file = YAML.load_file(file_path)
63
+ ssh_conf = database_file[name]
64
+ ssh_conf = ssh_conf.delete_if { |key,value| key == 'database'}
65
+ ssh = get_ready_for_ssh ssh_conf
66
+ return ssh
67
+ end
68
+
69
+ def get_ready_for_ssh conf
70
+ host = conf.delete('host')
71
+ user = conf.delete('user')
72
+ options = conf.delete_if {|key,value| key == 'host' && 'user'}
73
+ options = options.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
74
+ begin
75
+ Net::SSH::Gateway.new(host, user, options)
76
+ rescue
77
+ fail "ssh configuration \n #{conf} \n is not correct, please double check"
78
+ end
79
+ end
80
+
81
+ def forward_port ssh, name
82
+ database_file = YAML.load_file(file_path)
83
+ ssh_conf = database_file[name]
84
+ new_conf = ssh_conf.delete('database')
85
+ host = new_conf.delete('host')
86
+ remote_port = new_conf.delete('remote_port')
87
+ local_port = new_conf.delete('local_port')
88
+ begin
89
+ ssh.open(host, remote_port, local_port)
90
+ rescue Errno::EADDRINUSE
91
+ return local_port
92
+ rescue
93
+ fail "fail to forward remote port #{remote_port} to local_port #{local_port}"
94
+ end
95
+ end
96
+
97
+ def fetch_ssh_config db_name
98
+ database_file = YAML.load_file(file_path)
99
+ db_conf = database_file[db_name]
100
+ ssh_key = db_conf.delete('ssh')
101
+ end
102
+
103
+ def connect_database_directly db_name
104
+ database_file = YAML.load_file(file_path)
105
+ db_conf = database_file[db_name]
106
+ db_conf = db_conf.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
107
+ db = Sequel.connect(db_conf)
108
+ end
109
+ end
data/lib/request.rb ADDED
@@ -0,0 +1,46 @@
1
+ require 'httparty'
2
+
3
+ class Request
4
+ include HTTParty
5
+
6
+ attr_accessor :new_headers
7
+ # debug_output $stdout
8
+
9
+ def new_response response, msecs
10
+ new_response = {}
11
+ new_response.merge({:response => response, :message => response.parsed_response, :status => response.code, :duration => msecs})
12
+ end
13
+
14
+ def request base_uri, method, endpoint, body = false
15
+ url = base_uri + endpoint
16
+ case method
17
+ when "get"
18
+ start = Time.now
19
+ response = self.class.get(url, :body => body, :headers => new_headers, :verify => false)
20
+ finish = Time.now
21
+ when "post"
22
+ start = Time.now
23
+ response = self.class.post(url, :body => body, :headers => new_headers, :verify => false)
24
+ finish = Time.now
25
+ when "put"
26
+ start = Time.now
27
+ response = self.class.put(url, :body => body, :headers => new_headers, :verify => false)
28
+ finish = Time.now
29
+ when "delete"
30
+ start = Time.now
31
+ response = self.class.delete(url, :headers => new_headers, :verify => false)
32
+ finish = Time.now
33
+ else
34
+ puts "#{method} is invalid method."
35
+ exit
36
+ end
37
+ msecs = (finish - start) * 1000.0
38
+ return new_response(response, msecs)
39
+ end
40
+
41
+ def add_headers value
42
+ @new_headers ||= {}
43
+ @new_headers = @new_headers.merge(value.to_hash)
44
+ return @new_headers
45
+ end
46
+ end
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module Lolitado
2
+ VERSION = "0.0.3"
3
+ end
data/lib/yaml.rb ADDED
@@ -0,0 +1,31 @@
1
+ require 'psych'
2
+
3
+ module Cleric
4
+ module YAML
5
+
6
+ CONFIGURE_PATH = File.expand_path("../data/stage.yml",__FILE__)
7
+
8
+ def self.fetch_corresponding_conf_by name
9
+ all_hash_values = load_yml(CONFIGURE_PATH)
10
+ conf_value = fetch_value_by all_hash_values, name
11
+ return conf_value
12
+ end
13
+
14
+ def self.load_yml path
15
+ Psych.load_file(path)
16
+ end
17
+
18
+ def self.fetch_value_by hash, key
19
+ if hash == false
20
+ fail "no configuration in #{ENV['PLATFORM']}.yml"
21
+ else
22
+ if hash[key].nil?
23
+ fail "can not find corresponding configure value for #{key}"
24
+ else
25
+ hash[key]
26
+ end
27
+ end
28
+ end
29
+
30
+ end
31
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lolitado
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dolores Zhang
@@ -73,7 +73,13 @@ executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
+ - lib/accessors.rb
77
+ - lib/db.rb
76
78
  - lib/lolitado.rb
79
+ - lib/pool.rb
80
+ - lib/request.rb
81
+ - lib/version.rb
82
+ - lib/yaml.rb
77
83
  homepage: http://github.com/doloreszhang/lolitado
78
84
  licenses:
79
85
  - MIT