Skip to content

Instantly share code, notes, and snippets.

@kris-lab
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kris-lab/06d38265ed8037d8f1b3 to your computer and use it in GitHub Desktop.
Save kris-lab/06d38265ed8037d8f1b3 to your computer and use it in GitHub Desktop.
Pulsar task example for mms-api client
require 'mms'
namespace :mongo do
set :mms_settings, {
:username => 'username',
:apikey => 'apikey',
:group_id => 'group-id',
:cluster_id => 'cluster-id'
}
filter_mms_backup = {:filter => -> (server) { server.mongo.mms_backup? }}
filter_mms_monitoring = {:filter => -> (server) { server.mongo.mms_monitoring? }}
filter_arbiters = {:skip_hostfilter => true, :filter => -> (server) { server.mongo.arbiter? }}
namespace :mms do
# @return MMS::Agent
def agent
MMS::Agent.new(mms_settings[:username], mms_settings[:apikey])
end
# @return MMS::Resource::Group
def group
agent.findGroup(mms_settings[:group_id])
end
# @return MMS::Resource::Cluster
def cluster
group.cluster(mms_settings[:cluster_id])
end
# @return MMS::Resource::Snapshot
def snapshot(id)
group.cluster(mms_settings[:cluster_id]).snapshot(id)
end
def health(asserter)
last_heartbeat = cluster.last_heartbeat.nil? ? 0 : DateTime.parse(cluster.last_heartbeat)
heartbeat_ok = (last_heartbeat + (30/1440.0)) > DateTime.now
host_list = group.hosts
host_alert_disabled = host_list.reject { |host| host.alerts_enabled }
host_profiler_enabled = host_list.reject { |host| !host.profiler_enabled }
host_logs_enabled = host_list.reject { |host| !host.logs_enabled }
host_unreachable = host_list.reject { |host| (host.last_ping.nil? or (DateTime.parse(host.last_ping) + (30/1440.0)) > DateTime.now) }
snapshot_list = cluster.snapshots 1, 1
unless snapshot_list.empty?
snapshot_date = snapshot_list.empty? ? DateTime.new : DateTime.parse(snapshot_list.first.created_date)
snapshot_ok = (snapshot_date + (6/24.0)) > DateTime.now
asserter.call "MMS snapshot for cluster `#{cluster.name}`", snapshot_ok, "snapshot is outdated. last #{snapshot_date}"
end
asserter.call "MMS agent for `#{cluster.name}`", heartbeat_ok, "is not active since #{cluster.last_heartbeat}"
asserter.call "MMS alerts enabled for all hosts of `#{cluster.name}`", host_alert_disabled.empty?, "is not enabled for #{host_alert_disabled.map { |host| host.name }}"
asserter.call "MMS profiler disabled for all hosts of `#{cluster.name}`", host_profiler_enabled.empty?, "is not disabled for #{host_profiler_enabled.map { |host| host.name }}"
asserter.call "MMS logs disabled for all hosts of `#{cluster.name}`", host_logs_enabled.empty?, "is not disabled for #{host_logs_enabled.map { |host| host.name }}"
asserter.call "MMS hosts reachable by agent of `#{cluster.name}`", host_unreachable.empty?, "is unreachable for #{host_unreachable.map { |host| host.name }}"
end
desc 'Snapshots list'
task :snapshots do
snapshot_list = cluster.snapshots 1, 10
snapshot_list.each do |snapshot|
parts_info = snapshot.parts.map { |part| (part['replicaSetName'].nil? ? part['typeName'] : part['replicaSetName']) }
puts "#{snapshot.name} #{snapshot.id} parts: #{parts_info.uniq}"
end
end
desc 'Restorejobs list'
task :jobs do
job_list = cluster.restorejobs 1, 10
job_list.each do |job|
puts "#{job.name} #{job.id} #{job.status_name}"
puts "url: #{job.delivery_url}" if job.status_name == 'READY'
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment