qm 1.1.12 → 1.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +5 -4
- data/lib/defs-mongo.rb +39 -11
- data/lib/qm.rb +19 -7
- data/lib/service.rb +8 -3
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16cc41b763071acd523aeadbf511b2054b452bce
|
4
|
+
data.tar.gz: d5b066cb5971393d93e19bb4a42e5de03b4646a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b87e6b7b61d278ab706c7f158309855c5e113bad1c30e2b4665235cdb1ac5a5622d0d98764eede6f632b56e0c503efec85f963a19eeb6e8b987d8579d9c022bb
|
7
|
+
data.tar.gz: 488d67da2bdb009e35926b921e59cd621db873ade71d3727af2a9914eb6796a8ac57236fdc2050890c47b9b7dc7d518f51f7650c6f6d2e41dea57501727f2619
|
data/README.md
CHANGED
@@ -2,9 +2,10 @@
|
|
2
2
|
|
3
3
|
The `qm` gem for [Ruby](http://www.ruby-lang.org/) implements both the API
|
4
4
|
server and web server components of [QMachine](https://www.qmachine.org) (QM).
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
It uses [MongoDB](http://www.mongodb.org/) for persistent storage, and it can
|
6
|
+
optionally log traffic data into a different MongoDB collection instead of
|
7
|
+
logging to stdout. The repository still contains working definitions for using
|
8
|
+
[SQLite](https://www.sqlite.org/) as persistent storage, however.
|
8
9
|
|
9
10
|
Install
|
10
11
|
-------
|
@@ -15,6 +16,6 @@ To install the latest release, run
|
|
15
16
|
|
16
17
|
===
|
17
18
|
|
18
|
-
[](http://badge.fury.io/rb/qm) [](https://gemnasium.com/qmachine/qm-ruby)
|
19
20
|
|
20
21
|
<!-- vim:set syntax=markdown: -->
|
data/lib/defs-mongo.rb
CHANGED
@@ -2,9 +2,8 @@
|
|
2
2
|
|
3
3
|
#- defs-mongo.rb ~~
|
4
4
|
# ~~ (c) SRW, 16 Jul 2014
|
5
|
-
# ~~ last updated
|
5
|
+
# ~~ last updated 28 Jul 2014
|
6
6
|
|
7
|
-
require 'bson'
|
8
7
|
require 'json'
|
9
8
|
require 'mongo'
|
10
9
|
require 'sinatra/base'
|
@@ -14,7 +13,7 @@ module Sinatra
|
|
14
13
|
|
15
14
|
module MongoConnect
|
16
15
|
|
17
|
-
def
|
16
|
+
def mongo_api_connect()
|
18
17
|
# This function needs documentation.
|
19
18
|
db = URI.parse(settings.persistent_storage[:mongo])
|
20
19
|
db_name = db.path.gsub(/^\//, '')
|
@@ -22,24 +21,36 @@ module Sinatra
|
|
22
21
|
unless db.user.nil? or db.password.nil?
|
23
22
|
conn.authenticate(db.user, db.password)
|
24
23
|
end
|
25
|
-
set
|
26
|
-
settings.
|
24
|
+
set api_db: conn
|
25
|
+
settings.api_db['avars'].ensure_index('box_status', {
|
27
26
|
background: true,
|
28
27
|
sparse: true
|
29
28
|
})
|
30
|
-
settings.
|
29
|
+
settings.api_db['avars'].ensure_index('exp_date', {
|
31
30
|
expireAfterSeconds: settings.avar_ttl
|
32
31
|
})
|
33
32
|
return
|
34
33
|
end
|
35
34
|
|
35
|
+
def mongo_log_connect()
|
36
|
+
# This function needs documentation.
|
37
|
+
db = URI.parse(settings.trafficlog_storage[:mongo])
|
38
|
+
db_name = db.path.gsub(/^\//, '')
|
39
|
+
conn = Mongo::Connection.new(db.host, db.port).db(db_name)
|
40
|
+
unless db.user.nil? or db.password.nil?
|
41
|
+
conn.authenticate(db.user, db.password)
|
42
|
+
end
|
43
|
+
set log_db: conn, logging: false
|
44
|
+
return
|
45
|
+
end
|
46
|
+
|
36
47
|
end
|
37
48
|
|
38
|
-
module
|
49
|
+
module MongoAPIDefs
|
39
50
|
|
40
51
|
def get_avar(params)
|
41
52
|
# This helper function needs documentation.
|
42
|
-
bk, db = "#{params[0]}&#{params[1]}", settings.
|
53
|
+
bk, db = "#{params[0]}&#{params[1]}", settings.api_db
|
43
54
|
x = db['avars'].find_one({_id: bk})
|
44
55
|
y = (x.nil?) ? '{}' : x['body']
|
45
56
|
return y
|
@@ -47,7 +58,7 @@ module Sinatra
|
|
47
58
|
|
48
59
|
def get_list(params)
|
49
60
|
# This helper function needs documentation.
|
50
|
-
bs, db, x = "#{params[0]}&#{params[1]}", settings.
|
61
|
+
bs, db, x = "#{params[0]}&#{params[1]}", settings.api_db, []
|
51
62
|
db['avars'].find({box_status: bs}).each do |doc|
|
52
63
|
# This block needs documentation.
|
53
64
|
x.push(doc['key'])
|
@@ -58,7 +69,7 @@ module Sinatra
|
|
58
69
|
|
59
70
|
def set_avar(params)
|
60
71
|
# This helper function needs documentation.
|
61
|
-
db = settings.
|
72
|
+
db = settings.api_db
|
62
73
|
doc = {
|
63
74
|
_id: "#{params[0]}&#{params[1]}",
|
64
75
|
body: params[2],
|
@@ -76,7 +87,24 @@ module Sinatra
|
|
76
87
|
|
77
88
|
end
|
78
89
|
|
79
|
-
|
90
|
+
module MongoLogDefs
|
91
|
+
|
92
|
+
def log_to_db()
|
93
|
+
# This method needs documentation.
|
94
|
+
settings.log_db['traffic'].insert({
|
95
|
+
host: request.host,
|
96
|
+
ip: request.ip,
|
97
|
+
method: request.request_method,
|
98
|
+
timestamp: Time.now,
|
99
|
+
#status: response.status,
|
100
|
+
url: request.fullpath
|
101
|
+
})
|
102
|
+
return
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
helpers MongoAPIDefs, MongoLogDefs
|
80
108
|
register MongoConnect
|
81
109
|
|
82
110
|
end
|
data/lib/qm.rb
CHANGED
@@ -2,20 +2,20 @@
|
|
2
2
|
|
3
3
|
#- qm.rb ~~
|
4
4
|
# ~~ (c) SRW, 12 Apr 2013
|
5
|
-
# ~~ last updated
|
5
|
+
# ~~ last updated 31 Jul 2014
|
6
6
|
|
7
7
|
module QM
|
8
8
|
|
9
9
|
def self::launch_client(options = {})
|
10
10
|
# This function needs documentation.
|
11
|
-
|
12
|
-
return
|
11
|
+
require 'client'
|
12
|
+
return QMachineClient.new(options)
|
13
13
|
end
|
14
14
|
|
15
15
|
def self::launch_service(options = {})
|
16
16
|
# This function creates, configures, and launches a fresh Sinatra app
|
17
17
|
# that inherits from the original "teaching version".
|
18
|
-
require 'service
|
18
|
+
require 'service'
|
19
19
|
require 'defs-mongo'
|
20
20
|
#require 'defs-sqlite'
|
21
21
|
app = Sinatra.new(QMachineService) do
|
@@ -34,14 +34,26 @@ module QM
|
|
34
34
|
end
|
35
35
|
options = convert.call(options)
|
36
36
|
set options
|
37
|
-
|
37
|
+
|
38
|
+
# I'm not sure if the next three lines are necessary or not ...
|
39
|
+
set bind: settings.hostname,
|
40
|
+
run: false,
|
41
|
+
static: settings.enable_web_server
|
42
|
+
|
38
43
|
if (settings.persistent_storage.has_key?(:mongo)) then
|
39
|
-
helpers Sinatra::
|
40
|
-
|
44
|
+
helpers Sinatra::MongoAPIDefs
|
45
|
+
mongo_api_connect
|
41
46
|
#elsif (settings.persistent_storage.has_key?(:sqlite)) then
|
42
47
|
# helpers Sinatra::SQLiteDefs
|
43
48
|
# sqlite_connect
|
44
49
|
end
|
50
|
+
if (settings.trafficlog_storage.has_key?(:mongo)) then
|
51
|
+
helpers Sinatra::MongoLogDefs
|
52
|
+
mongo_log_connect
|
53
|
+
after do
|
54
|
+
log_to_db
|
55
|
+
end
|
56
|
+
end
|
45
57
|
end
|
46
58
|
end
|
47
59
|
return app.run!
|
data/lib/service.rb
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
# of a 'box', 'key', or 'status' value.
|
17
17
|
#
|
18
18
|
# ~~ (c) SRW, 24 Apr 2013
|
19
|
-
# ~~ last updated
|
19
|
+
# ~~ last updated 31 Jul 2014
|
20
20
|
|
21
21
|
require 'sinatra'
|
22
22
|
require 'sinatra/cross_origin'
|
@@ -34,14 +34,19 @@ class QMachineService < Sinatra::Base
|
|
34
34
|
enable_CORS: false,
|
35
35
|
enable_web_server: false,
|
36
36
|
hostname: '0.0.0.0',
|
37
|
+
logging: true,
|
37
38
|
persistent_storage: {},
|
38
39
|
port: 8177,
|
39
|
-
public_folder: 'public'
|
40
|
+
public_folder: 'public',
|
41
|
+
trafficlog_storage: {}
|
40
42
|
|
41
43
|
# Sinatra mappings and options needed by QMachine.
|
42
44
|
|
43
45
|
mime_type webapp: 'application/x-web-app-manifest+json'
|
44
|
-
|
46
|
+
|
47
|
+
set bind: settings.hostname, # Actually, I am not sure if
|
48
|
+
run: false, # these lines are actually
|
49
|
+
static: settings.enable_web_server # necessary anymore ...
|
45
50
|
|
46
51
|
# See also: http://www.sinatrarb.com/configuration.html
|
47
52
|
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Wilkinson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: bson_ext
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - '='
|
@@ -25,33 +25,33 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.10.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
33
|
+
version: 1.8.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.
|
40
|
+
version: 1.8.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: httparty
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.13.1
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.13.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: mongo
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,19 +95,19 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 0.3.2
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: therubyracer
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - '='
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 0.12.1
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - '='
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 0.12.1
|
111
111
|
description: This is a port of the QMachine web service.
|
112
112
|
email: sean@mathbiol.org
|
113
113
|
executables: []
|
@@ -142,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
142
|
version: '0'
|
143
143
|
requirements: []
|
144
144
|
rubyforge_project:
|
145
|
-
rubygems_version: 2.
|
145
|
+
rubygems_version: 2.2.2
|
146
146
|
signing_key:
|
147
147
|
specification_version: 4
|
148
148
|
summary: A platform for World Wide Computing
|