Class: CirrASManagement::Manager

Inherits:
Object
  • Object
show all
Defined in:
lib/cirras-management/manager.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeManager

Returns a new instance of Manager.



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/cirras-management/manager.rb', line 36

def initialize

  @log = Logger.new(STDOUT)

  configure :production do
    @log = LogHelper.instance.log
  end

  @config           = ConfigHelper.new( :log => @log ).config
  @@config          = @config
  @@event_manager   = EventManager.new( :log => @log )

  @log.info "Setting up management environment for #{@config.appliance_name}"

  if @config.is_management_appliance?
    @log.info "Setting up node managers..."

    if @config.running_on_ec2
      @node_manager = AWSNodeManager.new( @config, :log => @log )
    else
      @node_manager = DefaultNodeManager.new( @config, :log => @log )
    end

    @@node_manager = @node_manager
  else
    create_client
  end

  # sinatra parameters
  enable  :raise_errors
  disable :logging
  disable :lock

  helpers do
    def prefix
      request.path_info.match( /^\/([\w\-]+)\// )[1]
    end

    def notify( event, *args )
      Manager.event_manager.notify( false, prefix, event, *args )
    end

    def notify_threaded( event, *args )
      Manager.event_manager.notify( true, prefix, event, *args )
    end
  end

  for api in APIS
    bind_handler( api )
  end

  bind_handler( APIS.first, "latest" )

  get '/' do
    apis = "latest\n"
    for api in APIS
      apis += api + "\n"
    end

    apis
  end

  get '/*' do
    status 404
    "Not found"
  end

  wait_for_web_server
end

Class Method Details

.configObject



145
146
147
# File 'lib/cirras-management/manager.rb', line 145

def self.config
  @@config
end

.event_managerObject



165
166
167
# File 'lib/cirras-management/manager.rb', line 165

def self.event_manager
  @@event_manager
end

.node_managerObject



149
150
151
# File 'lib/cirras-management/manager.rb', line 149

def self.node_manager
  @@node_manager
end

Instance Method Details

#bind_handler(api_version, prefix = nil) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/cirras-management/manager.rb', line 106

def bind_handler( api_version, prefix = nil )
  prefix = api_version if prefix.nil?

  @log.debug "Binding new request handler helper for API version '#{api_version}' and prefix '#{prefix}'..."

  Dir["lib/cirras-management/api/#{api_version}/handler/*/*"].each {|file| require file if File.exists?( file ) }

  to = HandlerTO.new( prefix, api_version, @config, @log )

  if @config.is_management_appliance?
    handler_helper = ManagementApplianceRequestHandlerHelper.new( to )
  else
    handler_helper = DefaultRequestHandlerHelper.new( to )
  end

  Manager.event_manager.register( api_version, prefix, handler_helper.handlers )
end

#create_clientObject

this is a client



138
139
# File 'lib/cirras-management/manager.rb', line 138

def create_client
end

#discover_nodesObject



153
154
155
156
157
158
159
160
161
162
163
# File 'lib/cirras-management/manager.rb', line 153

def discover_nodes
  t = Thread.new do
    while true do
      @log.debug "Begining node discovery..."
      @node_manager.register_nodes
      @node_manager.push_management_address
      @log.debug "Waiting #{@config.sleep} seconds before next node discovery..."
      sleep @config.sleep # check after 30 sec if there are changes in nodes (new added, removed, etc)
    end
  end
end

#nodesObject



141
142
143
# File 'lib/cirras-management/manager.rb', line 141

def nodes
  @node_manager.nodes
end

#wait_for_web_serverObject



124
125
126
127
128
129
130
131
132
133
134
# File 'lib/cirras-management/manager.rb', line 124

def wait_for_web_server
  t = Thread.new do
    while true do
      @log.info "Waiting for web server..."
      break if IPHelper.new.is_port_open?( "localhost", @config.port )
      sleep 1
    end
    @log.info "Web server is running and ready for requests!"
    discover_nodes if @config.is_management_appliance?
  end
end