Skip to content

Instantly share code, notes, and snippets.

@cruftyoldsysadmin
Created March 1, 2017 12:23

Revisions

  1. cruftyoldsysadmin created this gist Mar 1, 2017.
    43 changes: 43 additions & 0 deletions stackdriver-maintenance.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,43 @@
    #!/usr/bin/env ruby
    #
    require 'net/http'
    require 'json'

    apiKey ='APIKEYHERE'
    params = { :apikey => apiKey }
    instances = {}

    counter = 0
    Net::HTTP.start('api.stackdriver.com', 443, :use_ssl => true) do |http|

    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_PEER
    http.keep_alive_timeout = 10

    uri = URI.parse('https://api.stackdriver.com/v0.2/instances')
    uri.query = URI.encode_www_form(params)

    #JSON(http.request(Net::HTTP::Get.new(uri.request_uri)).body)['data'].each do |instance|
    JSON(http.request_get(uri.request_uri).body)['data'].each do |instance|
    instanceId = instance['id']
    maintUri = URI.parse("https://api.stackdriver.com/v0.2/instances/#{instanceId}/maintenance")
    maintUri.query = URI.encode_www_form(params)

    maintStatus=JSON(http.request_get(maintUri.request_uri).body)['data']
    if maintStatus['maintenance']
    if maintStatus['reason']
    instances["#{instance['name']}"] = { 'maintenance' => maintStatus['maintenance'], 'reason' => maintStatus['reason'] }
    else
    instances["#{instance['name']}"] = { 'maintenance' => maintStatus['maintenance'] }
    end
    end
    end
    end

    instances.keys.sort.each do |instance|
    if instances[instance]['reason']
    puts "#{instance} is in maintenance mode because: #{instances[instance]['reason']}"
    else
    puts "#{instance} is in maintenance mode for no good reason"
    end
    end