Class: Odania::Plugin

Inherits:
Object
  • Object
show all
Defined in:
lib/odania/plugin.rb

Constant Summary collapse

INSTANCE_FILES_PATH =
'/tmp/plugin_instance_name_'

Instance Method Summary collapse

Constructor Details

#initialize(consul) ⇒ Plugin

Returns a new instance of Plugin.



5
6
7
8
# File 'lib/odania/plugin.rb', line 5

def initialize(consul)
  @consul = consul
  @plugin_config = Config::GlobalConfig.new
end

Instance Method Details

#config_for(plugin_name) ⇒ Object



33
34
35
# File 'lib/odania/plugin.rb', line 33

def config_for(plugin_name)
  @consul.config.get get_plugin_config_path_for(plugin_name)
end

#deregister(plugin_instance_name) ⇒ Object



25
26
27
# File 'lib/odania/plugin.rb', line 25

def deregister(plugin_instance_name)
  @consul.service.deregister(plugin_instance_name)
end

#get_allObject



29
30
31
# File 'lib/odania/plugin.rb', line 29

def get_all
  @consul.service.get_all
end

#get_domain_config_for(domain, global_config = nil) ⇒ Object



63
64
65
66
67
68
69
# File 'lib/odania/plugin.rb', line 63

def get_domain_config_for(domain, global_config=nil)
  global_config = get_global_config if global_config.nil?

  domain_info = PublicSuffix.parse(domain)
  return global_config['domains'][domain_info.domain], domain unless global_config['domains'][domain_info.domain].nil?
  return false, nil
end

#get_global_configObject



59
60
61
# File 'lib/odania/plugin.rb', line 59

def get_global_config
  @consul.config.get get_global_plugin_config_path
end

#get_plugin_instance_name(plugin_name) ⇒ Object

Generate a unique number for this instance of the plugin



38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/odania/plugin.rb', line 38

def get_plugin_instance_name(plugin_name)
  plugin_instance_name_file = "#{INSTANCE_FILES_PATH}#{plugin_name}"

  plugin_instance_name = nil
  plugin_instance_name = File.read plugin_instance_name_file if File.exist? plugin_instance_name_file
  return plugin_instance_name unless plugin_instance_name.nil?

  available_instances = @consul.service.get_all_for plugin_name
  plugin_instance_name = "#{plugin_name}_#{available_instances.length + 1}"
  File.write plugin_instance_name_file, plugin_instance_name
  plugin_instance_name
end

#healthObject



71
72
73
# File 'lib/odania/plugin.rb', line 71

def health
  @consul.health
end

#plugin_configObject



51
52
53
# File 'lib/odania/plugin.rb', line 51

def plugin_config
  @plugin_config
end

#register(plugin_instance_name, plugin_config) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/odania/plugin.rb', line 10

def register(plugin_instance_name, plugin_config)
  plugin_name = plugin_config['plugin-config']['name']

  # Write configuration of the plugin
  @consul.config.set(get_plugin_config_path_for(plugin_name), plugin_config)

  # Register service
  consul_config = @consul.service.build_config(plugin_name, plugin_instance_name, plugin_config['plugin-config']['ip'], plugin_config['plugin-config']['tags'], plugin_config['plugin-config']['port'])
  @consul.service.register(consul_config)

  # Fire event
  @consul.event.fire 'service-registered', "#{plugin_name}|#{plugin_instance_name}"
  "#{plugin_name}|#{plugin_instance_name}"
end

#set_global_config(config) ⇒ Object



55
56
57
# File 'lib/odania/plugin.rb', line 55

def set_global_config(config)
  @consul.config.set get_global_plugin_config_path, config
end