nutella_framework 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|