class Ruboty::Handlers::Niftycloud

Constants

ACCOUNT
ADDRESS
AVAILABILITY_ZONE
COMPUTING
DB_INSTANCE
IMAGE
INSTANCE
KEY_PAIR
LIST
LOAD_BALANCER
NIFTYCLOUD
RDB
SECURITY_GROUP
SSL_CERTIFICATE
VOLUME

Attributes

prev[RW]

Public Class Methods

new(robot) click to toggle source
Calls superclass method
# File lib/ruboty/handlers/niftycloud.rb, line 7
def initialize(robot)
  super(robot)
  @prev = {}
end

Public Instance Methods

account_list(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 175
def account_list(message)
  Ruboty::Niftycloud::Actions::AccountList.new(message).call
end
account_use(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 179
def account_use(message)
  Ruboty::Niftycloud::Actions::AccountUse.new(message).call
end
computing_address_list(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 215
def computing_address_list(message)
  Ruboty::Niftycloud::Actions::ComputingAddressList.new(message).call
end
computing_availability_zone_list(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 219
def computing_availability_zone_list(message)
  Ruboty::Niftycloud::Actions::ComputingAvailabilityZoneList.new(message).call
end
computing_image_list(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 223
def computing_image_list(message)
  Ruboty::Niftycloud::Actions::ComputingImageList.new(message).call
end
computing_image_show(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 227
def computing_image_show(message)
  Ruboty::Niftycloud::Actions::ComputingImageShow.new(message).call
end
computing_instance_list(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 183
def computing_instance_list(message)
  Ruboty::Niftycloud::Actions::ComputingInstanceList.new(message).call
end
computing_instance_show(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 187
def computing_instance_show(message)
  Ruboty::Niftycloud::Actions::ComputingInstanceShow.new(message).call
end
computing_key_pair_list(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 231
def computing_key_pair_list(message)
  Ruboty::Niftycloud::Actions::ComputingKeyPairList.new(message).call
end
computing_key_pair_show(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 235
def computing_key_pair_show(message)
  Ruboty::Niftycloud::Actions::ComputingKeyPairShow.new(message).call
end
computing_load_balancer_list(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 207
def computing_load_balancer_list(message)
  Ruboty::Niftycloud::Actions::ComputingLoadBalancerList.new(message).call
end
computing_load_balancer_show(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 211
def computing_load_balancer_show(message)
  Ruboty::Niftycloud::Actions::ComputingLoadBalancerShow.new(message).call
end
computing_region_list(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 255
def computing_region_list(message)
  Ruboty::Niftycloud::Actions::ComputingRegionList.new(message).call
end
computing_region_use(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 259
def computing_region_use(message)
  Ruboty::Niftycloud::Actions::ComputingRegionUse.new(message).call
end
computing_security_group_list(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 191
def computing_security_group_list(message)
  Ruboty::Niftycloud::Actions::ComputingSecurityGroupList.new(message).call
end
computing_security_group_show(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 195
def computing_security_group_show(message)
  Ruboty::Niftycloud::Actions::ComputingSecurityGroupShow.new(message).call
end
computing_ssl_certificate_list(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 239
def computing_ssl_certificate_list(message)
  Ruboty::Niftycloud::Actions::ComputingSslCertificateList.new(message).call
end
computing_ssl_certificate_show(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 243
def computing_ssl_certificate_show(message)
  Ruboty::Niftycloud::Actions::ComputingSslCertificateShow.new(message).call
end
computing_volume_list(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 199
def computing_volume_list(message)
  Ruboty::Niftycloud::Actions::ComputingVolumeList.new(message).call
end
computing_volume_show(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 203
def computing_volume_show(message)
  Ruboty::Niftycloud::Actions::ComputingVolumeShow.new(message).call
end
event_watch(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 263
def event_watch(message)
  return if @thread
  message.reply "started to watch events"
  @thread = Thread.new do
    base = Ruboty::Niftycloud::Actions::Base.new(message)
    loop do
      base.accounts.each do |account|
        base.current_account(account[:name])

        base.computing.regions.each do |region|
          base.current_region(region['regionName'])

          resources = {
            %w(computing volumes) => {id: 'volumeId', label: 'ディスク'},
            %w(computing key_pairs) => {id: 'keyName', label: 'SSH キー'},
            %w(computing images) => {id: 'imageId', label: 'イメージ'},
            %w(computing ssl_certificates) => {id: 'fqdnId', label: 'SSL 証明書'},
            %w(computing addresses) => {id: ['publicIp', 'privateIpAddress'], label: '付替 IP アドレス'},
            %w(computing uploads) => {id: 'conversionTaskId', label: 'アップロード'},
            %w(computing instances) => {id: 'instanceId', label: 'サーバー'},
            %w(rdb db_instances) => {id: 'DBInstanceIdentifier', label: 'DB サーバー'},
            %w(rdb db_snapshots) => {id: 'instanceId', label: 'DB スナップショット'},
            %w(computing security_groups) => {id: 'groupName', ignore: 'ipPermissions', label: 'ファイアウォールグループ'},
            %w(rdb db_security_groups) => {id: 'DBSecurityGroupName', ignore: ['EC2SecurityGroups', 'IPRanges'], label: 'DB ファイアウォールグループ'},
            %w(rdb db_parameter_groups) => {id: 'DBParameterGroupName', label: 'DB パラメーターグループ'},
          }
          resources.each do |options, d2e|
            begin
              service, resource = options
              key = [account[:name], region['regionName'], resource].join(':')
              prev = @prev[key]
              curr = base.send(service).send(resource)
              if prev
                events = D2E.new(d2e).d2e(prev, curr) 
                events.each do |event|
                  ja = case event['type']
                  when 'create'; '作成'
                  when 'delete'; '削除'
                  when 'update'; '更新'
                  end
                  if event['type'] == 'create' || event['type'] == 'delete'
                    table = Table(event['item'].keys)
                    table << event['item'].values
                    message.reply [
                      "#{account[:name]} (#{account[:description]}) の #{region['regionName']} で下記#{d2e[:label]}が#{ja}されました",
                      table.to_s
                    ]
                  else
                    table = Table(event['diff'].keys)
                    table << event['diff'].values.map {|val| "#{val[0]} -> #{val[1]}" }
                    message.reply [
                      "#{account[:name]} (#{account[:description]}) の #{region['regionName']} で下記#{d2e[:label]}(#{event['id']})が#{ja}されました",
                      table.to_s
                    ].join("\n")
                  end
                end
              end
              @prev[key] = curr
            rescue StandardError => e
              message.reply "Error: #{e}"
            end
          end
        end
      end
      sleep 5
    end
  end.run
end
rdb_db_instance_list(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 247
def rdb_db_instance_list(message)
  Ruboty::Niftycloud::Actions::RdbDbInstanceList.new(message).call
end
rdb_db_instance_show(message) click to toggle source
# File lib/ruboty/handlers/niftycloud.rb, line 251
def rdb_db_instance_show(message)
  Ruboty::Niftycloud::Actions::RdbDbInstanceShow.new(message).call
end