nutella_framework 0.4.2 → 0.4.3
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/Gemfile +1 -1
- data/VERSION +1 -1
- data/example_framework_components/example_framework_bot/example_framework_bot.rb +25 -0
- data/example_framework_components/example_framework_bot/startup +6 -0
- data/framework_components/{example_framework_interface → example_framework_web_interface}/dandelion-flowers-card.jpg +0 -0
- data/framework_components/{example_framework_interface → example_framework_web_interface}/index.html +4 -4
- data/framework_components/logging_bot/logging_bot.rb +42 -0
- data/framework_components/logging_bot/startup +5 -0
- data/framework_components/logging_bot/utils.rb +8 -0
- data/framework_components/runs_list_bot/app_runs_list_bot.rb +14 -29
- data/framework_components/runs_list_bot/startup +1 -4
- data/nutella_framework.gemspec +14 -8
- data/nutella_lib/framework_core.rb +3 -14
- data/nutella_lib/framework_log.rb +49 -0
- data/nutella_lib/{framework_persistence.rb → framework_persist.rb} +0 -0
- metadata +14 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 42a3d1f40115ef7fd3fb351ce9ae42589b26b5cf
|
4
|
+
data.tar.gz: dfe33a197e9196709b3e61654a50c81320c95548
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa57378efdaf2c2cceef0f72bb7440026fde992795e3bad03d58c8a7e162b6b78b3ce5e527ccdd5620f54ed52550c2dc5a3babb11ed89cb93400e655e9f0395d
|
7
|
+
data.tar.gz: 5ac1bbc05b8207ea94707b70105e55fea8ea08dffd7b41697cfea6510c53dde3a1896a817a1002fe4aad7e4f20f514fb2cafda180ceb596437db6178187c2340
|
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.3
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative '../../lib/config/runlist'
|
2
|
+
require_relative '../../lib/config/config'
|
3
|
+
require_relative '../../nutella_lib/framework_core'
|
4
|
+
|
5
|
+
# Framework bots can access all the parameters they need directly
|
6
|
+
# from the configuration file and the runlist,
|
7
|
+
# to which they have full access to.
|
8
|
+
|
9
|
+
# Access the config file like so:
|
10
|
+
# Nutella.config['broker']
|
11
|
+
|
12
|
+
# Access the runs list like so:
|
13
|
+
# Nutella.runlist.all_runs
|
14
|
+
|
15
|
+
|
16
|
+
# Initialize this bot as framework component
|
17
|
+
nutella.f.init(Nutella.config['broker'], 'example_framework_bot')
|
18
|
+
|
19
|
+
|
20
|
+
# Your code goes here! Go crazy!
|
21
|
+
|
22
|
+
|
23
|
+
# Does your bot die? If all your bot is doing is waiting for message on the network
|
24
|
+
# and responding to them, the main thread will terminate unless you call...
|
25
|
+
# nutella.f.net.listen
|
File without changes
|
data/framework_components/{example_framework_interface → example_framework_web_interface}/index.html
RENAMED
@@ -8,11 +8,11 @@
|
|
8
8
|
</head>
|
9
9
|
<body>
|
10
10
|
<h1>Example framework interface</h1>
|
11
|
-
<p>This is an example of a framework interface.
|
12
|
-
|
13
|
-
</p>
|
14
|
-
<p>And just to make sure we are loading not just the index, here is a picture of dandelions</p>
|
11
|
+
<p>This is an example of a framework interface. Use this template to write your own framework interface.</p>
|
12
|
+
<p>And just to make sure we are not just loading the index.html file, here is a picture of dandelions</p>
|
15
13
|
<img src="dandelion-flowers-card.jpg" width="500">
|
16
14
|
|
15
|
+
WE NEED TO COMPLETE THIS TEMPLATE BUT IN ORDER FOR THAT TO HAPPEN, I NEED JAVASCRIPT APIs!!!
|
16
|
+
|
17
17
|
</body>
|
18
18
|
</html>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Logger bot
|
2
|
+
# ----------
|
3
|
+
#
|
4
|
+
# This bot is in charge of recording all the messages that are sent by
|
5
|
+
# all components in all runs. It records all info sent to channels:
|
6
|
+
# - `/nutella/logging`
|
7
|
+
# - `/nutella/apps/<app_id>/logging`
|
8
|
+
# - `/nutella/apps/<app_id>/runs/<run_id>/logging`
|
9
|
+
# All logs are appended to a MongoDB collection called `logs`, inside the
|
10
|
+
# `nutella` database.
|
11
|
+
#
|
12
|
+
# -----------------------------------------------------------------------------
|
13
|
+
|
14
|
+
require_relative '../../lib/config/runlist'
|
15
|
+
require_relative '../../lib/config/config'
|
16
|
+
require_relative '../../nutella_lib/framework_core'
|
17
|
+
|
18
|
+
require_relative 'utils'
|
19
|
+
|
20
|
+
# Initialize this bot as framework component
|
21
|
+
nutella.f.init(Nutella.config['broker'], 'example_framework_bot')
|
22
|
+
|
23
|
+
# Get a mongo persisted collection
|
24
|
+
db = nutella.f.persist.get_mongo_collection_store 'logs'
|
25
|
+
|
26
|
+
|
27
|
+
# Listen for run-level log messages
|
28
|
+
nutella.f.net.subscribe_to_all_runs('logging', lambda do |payload, app_id, run_id, from|
|
29
|
+
db.push assemble_log(payload, from)
|
30
|
+
end)
|
31
|
+
# Listen for app-level log messages
|
32
|
+
nutella.f.net.subscribe_to_all_apps('logging', lambda do |payload, app_id, from|
|
33
|
+
db.push assemble_log(payload, from)
|
34
|
+
end)
|
35
|
+
# Listen for framework-level log messages
|
36
|
+
nutella.f.net.subscribe('logging', lambda do |payload, from|
|
37
|
+
db.push assemble_log(payload, from)
|
38
|
+
end)
|
39
|
+
|
40
|
+
|
41
|
+
# Listen and process messages as they come
|
42
|
+
nutella.f.net.listen
|
@@ -1,50 +1,35 @@
|
|
1
|
+
require_relative '../../lib/config/runlist'
|
2
|
+
require_relative '../../lib/config/config'
|
1
3
|
require_relative '../../nutella_lib/framework_core'
|
2
4
|
|
3
|
-
#
|
4
|
-
|
5
|
-
|
6
|
-
runlist_h.keys
|
7
|
-
end
|
8
|
-
|
9
|
-
def runs_for_app( runlist_file, app_id )
|
10
|
-
runlist_h = JSON.parse(IO.read(runlist_file))
|
11
|
-
# If there is no app with this id, then return false and do nothing
|
12
|
-
return [] if runlist_h[app_id].nil?
|
13
|
-
runs = runlist_h[app_id]['runs']
|
14
|
-
runs.nil? ? [] : runs
|
15
|
-
end
|
5
|
+
# Framework bots can access all the parameters they need directly
|
6
|
+
# from the configuration file and the runlist,
|
7
|
+
# to which they have full access to.
|
16
8
|
|
9
|
+
# Access the config file like so:
|
10
|
+
# Nutella.config['broker']
|
17
11
|
|
18
|
-
#
|
19
|
-
|
20
|
-
runlist_file = ARGV[1]
|
12
|
+
# Access the runs list like so:
|
13
|
+
# Nutella.runlist.all_runs
|
21
14
|
|
22
|
-
# Try to parse both config file and runlist and terminate if we can't
|
23
|
-
begin
|
24
|
-
config_h = JSON.parse(IO.read(config_file))
|
25
|
-
runlist_h = JSON.parse(IO.read(runlist_file))
|
26
|
-
rescue
|
27
|
-
# something went wrong
|
28
|
-
abort 'Impossible to parse configuration and/or runlist files!'
|
29
|
-
end
|
30
15
|
|
31
16
|
# Initialize this bot as framework component
|
32
|
-
nutella.f.init(
|
17
|
+
nutella.f.init(Nutella.config['broker'], 'app_runs_list_bot')
|
33
18
|
|
34
19
|
|
35
20
|
# Listen for runs_list requests (done by app components when they connect)
|
36
21
|
nutella.f.net.handle_requests_on_all_apps('app_runs_list', lambda do |req, app_id, from|
|
37
|
-
runs_for_app
|
22
|
+
Nutella.runlist.runs_for_app app_id
|
38
23
|
end)
|
39
24
|
|
40
25
|
|
41
26
|
# Whenever the runs list is updated, fire an updated runlist to all the apps
|
42
|
-
p =
|
27
|
+
p = Nutella.runlist.all_runs
|
43
28
|
while sleep .5
|
44
|
-
n =
|
29
|
+
n = Nutella.runlist.all_runs
|
45
30
|
if p!=n
|
46
31
|
all_apps.each do |app_id, _|
|
47
|
-
nutella.f.net.publish_to_app(app_id, 'app_runs_list', runs_for_app(app_id
|
32
|
+
nutella.f.net.publish_to_app(app_id, 'app_runs_list', Nutella.runlist.runs_for_app(app_id))
|
48
33
|
end
|
49
34
|
p = n
|
50
35
|
end
|
data/nutella_framework.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: nutella_framework 0.4.
|
5
|
+
# stub: nutella_framework 0.4.3 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "nutella_framework"
|
9
|
-
s.version = "0.4.
|
9
|
+
s.version = "0.4.3"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
@@ -30,8 +30,13 @@ Gem::Specification.new do |s|
|
|
30
30
|
"bin/nutella",
|
31
31
|
"data/index.html",
|
32
32
|
"data/startup",
|
33
|
-
"
|
34
|
-
"
|
33
|
+
"example_framework_components/example_framework_bot/example_framework_bot.rb",
|
34
|
+
"example_framework_components/example_framework_bot/startup",
|
35
|
+
"framework_components/example_framework_web_interface/dandelion-flowers-card.jpg",
|
36
|
+
"framework_components/example_framework_web_interface/index.html",
|
37
|
+
"framework_components/logging_bot/logging_bot.rb",
|
38
|
+
"framework_components/logging_bot/startup",
|
39
|
+
"framework_components/logging_bot/utils.rb",
|
35
40
|
"framework_components/main_interface/main_interface_bot.rb",
|
36
41
|
"framework_components/main_interface/public/index.html",
|
37
42
|
"framework_components/main_interface/startup",
|
@@ -67,8 +72,9 @@ Gem::Specification.new do |s|
|
|
67
72
|
"lib/tmux/tmux.rb",
|
68
73
|
"nutella_framework.gemspec",
|
69
74
|
"nutella_lib/framework_core.rb",
|
75
|
+
"nutella_lib/framework_log.rb",
|
70
76
|
"nutella_lib/framework_net.rb",
|
71
|
-
"nutella_lib/
|
77
|
+
"nutella_lib/framework_persist.rb",
|
72
78
|
"test/commands/test_cmd_cli_params_parsing.rb",
|
73
79
|
"test/commands/test_command_template.rb",
|
74
80
|
"test/config/test_current_app_utils.rb",
|
@@ -94,7 +100,7 @@ Gem::Specification.new do |s|
|
|
94
100
|
s.add_runtime_dependency(%q<thin>, [">= 1.6.3", "~> 1.6.3"])
|
95
101
|
s.add_runtime_dependency(%q<nokogiri>, [">= 1.6.3", "~> 1.6.3"])
|
96
102
|
s.add_runtime_dependency(%q<slop>, [">= 4.0.0", "~> 4.0.0"])
|
97
|
-
s.add_runtime_dependency(%q<nutella_lib>, [">= 0.4.
|
103
|
+
s.add_runtime_dependency(%q<nutella_lib>, [">= 0.4.5", "~> 0.4.5"])
|
98
104
|
s.add_development_dependency(%q<shoulda>, [">= 3", "~> 3"])
|
99
105
|
s.add_development_dependency(%q<yard>, [">= 0.8.7", "~> 0.8"])
|
100
106
|
s.add_development_dependency(%q<rdoc>, [">= 4.0", "~> 4.0"])
|
@@ -109,7 +115,7 @@ Gem::Specification.new do |s|
|
|
109
115
|
s.add_dependency(%q<thin>, [">= 1.6.3", "~> 1.6.3"])
|
110
116
|
s.add_dependency(%q<nokogiri>, [">= 1.6.3", "~> 1.6.3"])
|
111
117
|
s.add_dependency(%q<slop>, [">= 4.0.0", "~> 4.0.0"])
|
112
|
-
s.add_dependency(%q<nutella_lib>, [">= 0.4.
|
118
|
+
s.add_dependency(%q<nutella_lib>, [">= 0.4.5", "~> 0.4.5"])
|
113
119
|
s.add_dependency(%q<shoulda>, [">= 3", "~> 3"])
|
114
120
|
s.add_dependency(%q<yard>, [">= 0.8.7", "~> 0.8"])
|
115
121
|
s.add_dependency(%q<rdoc>, [">= 4.0", "~> 4.0"])
|
@@ -125,7 +131,7 @@ Gem::Specification.new do |s|
|
|
125
131
|
s.add_dependency(%q<thin>, [">= 1.6.3", "~> 1.6.3"])
|
126
132
|
s.add_dependency(%q<nokogiri>, [">= 1.6.3", "~> 1.6.3"])
|
127
133
|
s.add_dependency(%q<slop>, [">= 4.0.0", "~> 4.0.0"])
|
128
|
-
s.add_dependency(%q<nutella_lib>, [">= 0.4.
|
134
|
+
s.add_dependency(%q<nutella_lib>, [">= 0.4.5", "~> 0.4.5"])
|
129
135
|
s.add_dependency(%q<shoulda>, [">= 3", "~> 3"])
|
130
136
|
s.add_dependency(%q<yard>, [">= 0.8.7", "~> 0.8"])
|
131
137
|
s.add_dependency(%q<rdoc>, [">= 4.0", "~> 4.0"])
|
@@ -3,6 +3,8 @@ require 'config/runlist'
|
|
3
3
|
|
4
4
|
# APIs sub-modules
|
5
5
|
require_relative 'framework_net'
|
6
|
+
require_relative 'framework_log'
|
7
|
+
require_relative 'framework_persist'
|
6
8
|
|
7
9
|
|
8
10
|
module Nutella
|
@@ -13,7 +15,6 @@ module Nutella
|
|
13
15
|
end
|
14
16
|
|
15
17
|
|
16
|
-
|
17
18
|
# Framework-level APIs sub-module
|
18
19
|
module Framework
|
19
20
|
|
@@ -25,6 +26,7 @@ module Nutella
|
|
25
26
|
Nutella.run_id = nil
|
26
27
|
Nutella.component_id = component_id
|
27
28
|
Nutella.resource_id = nil
|
29
|
+
Nutella.mongo_host = broker_hostname
|
28
30
|
Nutella.mqtt = SimpleMQTTClient.new broker_hostname
|
29
31
|
end
|
30
32
|
|
@@ -36,19 +38,6 @@ module Nutella
|
|
36
38
|
|
37
39
|
# Utility functions
|
38
40
|
|
39
|
-
|
40
|
-
# Parse command line arguments for framework level components
|
41
|
-
#
|
42
|
-
# @param [Array] args command line arguments array
|
43
|
-
# @return [String] broker
|
44
|
-
def self.parse_args(args)
|
45
|
-
if args.length < 1
|
46
|
-
STDERR.puts 'Couldn\'t read broker address from the command line, impossible to initialize component!'
|
47
|
-
return
|
48
|
-
end
|
49
|
-
return args[0]
|
50
|
-
end
|
51
|
-
|
52
41
|
# Extracts the component name from the folder where the code for this component is located
|
53
42
|
#
|
54
43
|
# @return [String] the component name
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'ansi'
|
2
|
+
|
3
|
+
module Nutella
|
4
|
+
|
5
|
+
module Framework
|
6
|
+
|
7
|
+
module Log
|
8
|
+
|
9
|
+
def self.debug(message, code=nil)
|
10
|
+
puts( ANSI.cyan + message + ANSI.reset )
|
11
|
+
Nutella.f.net.publish( 'logging', log_to_json(message, code, __method__) )
|
12
|
+
code
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.info(message, code=nil)
|
16
|
+
puts( message )
|
17
|
+
Nutella.f.net.publish( 'logging', log_to_json(message, code, __method__) )
|
18
|
+
code
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.success(message, code=nil)
|
22
|
+
puts( ANSI.green + message + ANSI.reset )
|
23
|
+
Nutella.f.net.publish( 'logging', log_to_json(message, code, __method__) )
|
24
|
+
code
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.warn(message, code=nil)
|
28
|
+
puts( ANSI.yellow + message + ANSI.reset )
|
29
|
+
Nutella.f.net.publish( 'logging', log_to_json(message, code, __method__) )
|
30
|
+
code
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.error(message, code=nil)
|
34
|
+
puts( ANSI.red + message + ANSI.reset )
|
35
|
+
Nutella.f.net.publish( 'logging', log_to_json(message, code, __method__) )
|
36
|
+
code
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def self.log_to_json( message, code, level)
|
42
|
+
code.nil? ? {level: level, message: message} : {level: level, message: message, code: code}
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nutella_framework
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alessandro Gnoli
|
@@ -156,20 +156,20 @@ dependencies:
|
|
156
156
|
requirements:
|
157
157
|
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version: 0.4.
|
159
|
+
version: 0.4.5
|
160
160
|
- - "~>"
|
161
161
|
- !ruby/object:Gem::Version
|
162
|
-
version: 0.4.
|
162
|
+
version: 0.4.5
|
163
163
|
type: :runtime
|
164
164
|
prerelease: false
|
165
165
|
version_requirements: !ruby/object:Gem::Requirement
|
166
166
|
requirements:
|
167
167
|
- - ">="
|
168
168
|
- !ruby/object:Gem::Version
|
169
|
-
version: 0.4.
|
169
|
+
version: 0.4.5
|
170
170
|
- - "~>"
|
171
171
|
- !ruby/object:Gem::Version
|
172
|
-
version: 0.4.
|
172
|
+
version: 0.4.5
|
173
173
|
- !ruby/object:Gem::Dependency
|
174
174
|
name: shoulda
|
175
175
|
requirement: !ruby/object:Gem::Requirement
|
@@ -309,8 +309,13 @@ files:
|
|
309
309
|
- bin/nutella
|
310
310
|
- data/index.html
|
311
311
|
- data/startup
|
312
|
-
-
|
313
|
-
-
|
312
|
+
- example_framework_components/example_framework_bot/example_framework_bot.rb
|
313
|
+
- example_framework_components/example_framework_bot/startup
|
314
|
+
- framework_components/example_framework_web_interface/dandelion-flowers-card.jpg
|
315
|
+
- framework_components/example_framework_web_interface/index.html
|
316
|
+
- framework_components/logging_bot/logging_bot.rb
|
317
|
+
- framework_components/logging_bot/startup
|
318
|
+
- framework_components/logging_bot/utils.rb
|
314
319
|
- framework_components/main_interface/main_interface_bot.rb
|
315
320
|
- framework_components/main_interface/public/index.html
|
316
321
|
- framework_components/main_interface/startup
|
@@ -346,8 +351,9 @@ files:
|
|
346
351
|
- lib/tmux/tmux.rb
|
347
352
|
- nutella_framework.gemspec
|
348
353
|
- nutella_lib/framework_core.rb
|
354
|
+
- nutella_lib/framework_log.rb
|
349
355
|
- nutella_lib/framework_net.rb
|
350
|
-
- nutella_lib/
|
356
|
+
- nutella_lib/framework_persist.rb
|
351
357
|
- test/commands/test_cmd_cli_params_parsing.rb
|
352
358
|
- test/commands/test_command_template.rb
|
353
359
|
- test/config/test_current_app_utils.rb
|