icinga2 0.7.0.1 → 0.8.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +73 -58
 - data/doc/Icinga2.html +35 -3
 - data/doc/Logging.html +2 -2
 - data/doc/_index.html +2 -2
 - data/doc/class_list.html +1 -1
 - data/doc/downtimes.md +21 -4
 - data/doc/file.README.html +118 -66
 - data/doc/hostgroups.md +26 -11
 - data/doc/hosts.md +93 -20
 - data/doc/index.html +118 -66
 - data/doc/method_list.html +84 -300
 - data/doc/notifications.md +42 -14
 - data/doc/servicegroups.md +28 -11
 - data/doc/services.md +91 -21
 - data/doc/statistics.md +54 -0
 - data/doc/top-level-namespace.html +1 -1
 - data/doc/usergroups.md +25 -4
 - data/doc/users.md +26 -29
 - data/examples/test.rb +213 -76
 - data/lib/icinga2.rb +256 -71
 - data/lib/icinga2/converts.rb +5 -2
 - data/lib/icinga2/downtimes.rb +26 -88
 - data/lib/icinga2/hostgroups.rb +46 -32
 - data/lib/icinga2/hosts.rb +205 -92
 - data/lib/icinga2/network.rb +136 -325
 - data/lib/icinga2/network.rb-SAVE +1004 -0
 - data/lib/icinga2/notifications.rb +49 -72
 - data/lib/icinga2/servicegroups.rb +54 -42
 - data/lib/icinga2/services.rb +212 -82
 - data/lib/icinga2/statistics.rb +191 -0
 - data/lib/icinga2/tools.rb +28 -23
 - data/lib/icinga2/usergroups.rb +49 -39
 - data/lib/icinga2/users.rb +56 -61
 - data/lib/icinga2/version.rb +3 -3
 - metadata +5 -3
 - data/lib/icinga2/status.rb +0 -210
 
| 
         @@ -0,0 +1,191 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Icinga2
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              # namespace for icinga2 statistics
         
     | 
| 
      
 7 
     | 
    
         
            +
              module Statistics
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                # return statistic data for latency and execution_time
         
     | 
| 
      
 11 
     | 
    
         
            +
                #
         
     | 
| 
      
 12 
     | 
    
         
            +
                # @example
         
     | 
| 
      
 13 
     | 
    
         
            +
                #    @icinga.cib_data
         
     | 
| 
      
 14 
     | 
    
         
            +
                #    latency, execution_time = @icinga.average_statistics.values
         
     | 
| 
      
 15 
     | 
    
         
            +
                #
         
     | 
| 
      
 16 
     | 
    
         
            +
                #    h = @icinga.average_statistics
         
     | 
| 
      
 17 
     | 
    
         
            +
                #    latency = h.dig(:latency)
         
     | 
| 
      
 18 
     | 
    
         
            +
                #
         
     | 
| 
      
 19 
     | 
    
         
            +
                # @return [Hash]
         
     | 
| 
      
 20 
     | 
    
         
            +
                #    * latency (Float)
         
     | 
| 
      
 21 
     | 
    
         
            +
                #    * execution_time (Float)
         
     | 
| 
      
 22 
     | 
    
         
            +
                #
         
     | 
| 
      
 23 
     | 
    
         
            +
                def average_statistics
         
     | 
| 
      
 24 
     | 
    
         
            +
                  avg_latency        = @avg_latency.nil?        ? 0 : @avg_latency
         
     | 
| 
      
 25 
     | 
    
         
            +
                  avg_execution_time = @avg_execution_time.nil? ? 0 : @avg_execution_time
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  {
         
     | 
| 
      
 28 
     | 
    
         
            +
                    latency: avg_latency.to_f,
         
     | 
| 
      
 29 
     | 
    
         
            +
                    execution_time: avg_execution_time.to_f
         
     | 
| 
      
 30 
     | 
    
         
            +
                  }
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                # return statistic data for intervall data
         
     | 
| 
      
 34 
     | 
    
         
            +
                #
         
     | 
| 
      
 35 
     | 
    
         
            +
                # @example
         
     | 
| 
      
 36 
     | 
    
         
            +
                #    @icinga.cib_data
         
     | 
| 
      
 37 
     | 
    
         
            +
                #    hosts_active_checks, hosts_passive_checks, services_active_checks, services_passive_checks = @icinga.interval_statistics.values
         
     | 
| 
      
 38 
     | 
    
         
            +
                #
         
     | 
| 
      
 39 
     | 
    
         
            +
                #    i = @icinga.interval_statistics
         
     | 
| 
      
 40 
     | 
    
         
            +
                #    hosts_active_checks = i.dig(:hosts_active_checks)
         
     | 
| 
      
 41 
     | 
    
         
            +
                #
         
     | 
| 
      
 42 
     | 
    
         
            +
                # @return [Hash]
         
     | 
| 
      
 43 
     | 
    
         
            +
                #    * hosts_active_checks (Float)
         
     | 
| 
      
 44 
     | 
    
         
            +
                #    * hosts_passive_checks (Float)
         
     | 
| 
      
 45 
     | 
    
         
            +
                #    * services_active_checks (Float)
         
     | 
| 
      
 46 
     | 
    
         
            +
                #    * services_passive_checks (Float)
         
     | 
| 
      
 47 
     | 
    
         
            +
                #
         
     | 
| 
      
 48 
     | 
    
         
            +
                def interval_statistics
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  # take a look into https://github.com/Icinga/pkg-icinga2-debian/blob/master/lib/icinga/cib.cpp
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  hosts_active_checks     = @hosts_active_checks_1min.nil?     ? 0 : @hosts_active_checks_1min
         
     | 
| 
      
 53 
     | 
    
         
            +
                  hosts_passive_checks    = @hosts_passive_checks_1min.nil?    ? 0 : @hosts_passive_checks_1min
         
     | 
| 
      
 54 
     | 
    
         
            +
                  services_active_checks  = @services_active_checks_1min.nil?  ? 0 : @services_active_checks_1min
         
     | 
| 
      
 55 
     | 
    
         
            +
                  services_passive_checks = @services_passive_checks_1min.nil? ? 0 : @services_passive_checks_1min
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  {
         
     | 
| 
      
 58 
     | 
    
         
            +
                    hosts_active_checks: hosts_active_checks.to_f,
         
     | 
| 
      
 59 
     | 
    
         
            +
                    hosts_passive_checks: hosts_passive_checks.to_f,
         
     | 
| 
      
 60 
     | 
    
         
            +
                    services_active_checks: services_active_checks.to_f,
         
     | 
| 
      
 61 
     | 
    
         
            +
                    services_passive_checks: services_passive_checks.to_f
         
     | 
| 
      
 62 
     | 
    
         
            +
                  }
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                # return statistic data for services
         
     | 
| 
      
 66 
     | 
    
         
            +
                #
         
     | 
| 
      
 67 
     | 
    
         
            +
                # @example
         
     | 
| 
      
 68 
     | 
    
         
            +
                #    @icinga.cib_data
         
     | 
| 
      
 69 
     | 
    
         
            +
                #    ok, warning, critical, unknown, pending, in_downtime, ack = @icinga.service_statistics.values
         
     | 
| 
      
 70 
     | 
    
         
            +
                #
         
     | 
| 
      
 71 
     | 
    
         
            +
                #    s = @icinga.service_statistics
         
     | 
| 
      
 72 
     | 
    
         
            +
                #    critical = s.dig(:critical)
         
     | 
| 
      
 73 
     | 
    
         
            +
                #
         
     | 
| 
      
 74 
     | 
    
         
            +
                # @return [Hash]
         
     | 
| 
      
 75 
     | 
    
         
            +
                #    * ok (Integer)
         
     | 
| 
      
 76 
     | 
    
         
            +
                #    * warning (Integer)
         
     | 
| 
      
 77 
     | 
    
         
            +
                #    * critical (Integer)
         
     | 
| 
      
 78 
     | 
    
         
            +
                #    * unknown (Integer)
         
     | 
| 
      
 79 
     | 
    
         
            +
                #    * pending (Integer)
         
     | 
| 
      
 80 
     | 
    
         
            +
                #    * in_downtime (Integer)
         
     | 
| 
      
 81 
     | 
    
         
            +
                #    * acknowledged (Integer)
         
     | 
| 
      
 82 
     | 
    
         
            +
                #
         
     | 
| 
      
 83 
     | 
    
         
            +
                def service_statistics
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                  services_ok           = @services_ok.nil?           ? 0 : @services_ok
         
     | 
| 
      
 86 
     | 
    
         
            +
                  services_warning      = @services_warning.nil?      ? 0 : @services_warning
         
     | 
| 
      
 87 
     | 
    
         
            +
                  services_critical     = @services_critical.nil?     ? 0 : @services_critical
         
     | 
| 
      
 88 
     | 
    
         
            +
                  services_unknown      = @services_unknown.nil?      ? 0 : @services_unknown
         
     | 
| 
      
 89 
     | 
    
         
            +
                  services_pending      = @services_pending.nil?      ? 0 : @services_pending
         
     | 
| 
      
 90 
     | 
    
         
            +
                  services_in_downtime  = @services_in_downtime.nil?  ? 0 : @services_in_downtime
         
     | 
| 
      
 91 
     | 
    
         
            +
                  services_acknowledged = @services_acknowledged.nil? ? 0 : @services_acknowledged
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                  {
         
     | 
| 
      
 94 
     | 
    
         
            +
                    ok: services_ok.to_i,
         
     | 
| 
      
 95 
     | 
    
         
            +
                    warning: services_warning.to_i,
         
     | 
| 
      
 96 
     | 
    
         
            +
                    critical: services_critical.to_i,
         
     | 
| 
      
 97 
     | 
    
         
            +
                    unknown: services_unknown.to_i,
         
     | 
| 
      
 98 
     | 
    
         
            +
                    pending: services_pending.to_i,
         
     | 
| 
      
 99 
     | 
    
         
            +
                    in_downtime: services_in_downtime.to_i,
         
     | 
| 
      
 100 
     | 
    
         
            +
                    acknowledged: services_acknowledged.to_i
         
     | 
| 
      
 101 
     | 
    
         
            +
                  }
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                # return statistic data for hosts
         
     | 
| 
      
 105 
     | 
    
         
            +
                #
         
     | 
| 
      
 106 
     | 
    
         
            +
                # @example
         
     | 
| 
      
 107 
     | 
    
         
            +
                #    @icinga.cib_data
         
     | 
| 
      
 108 
     | 
    
         
            +
                #    up, down, pending, unreachable, in_downtime, ack = @icinga.host_statistics.values
         
     | 
| 
      
 109 
     | 
    
         
            +
                #
         
     | 
| 
      
 110 
     | 
    
         
            +
                #    h = @icinga.host_statistics
         
     | 
| 
      
 111 
     | 
    
         
            +
                #    pending = h.dig(:pending)
         
     | 
| 
      
 112 
     | 
    
         
            +
                #
         
     | 
| 
      
 113 
     | 
    
         
            +
                # @return [Hash]
         
     | 
| 
      
 114 
     | 
    
         
            +
                #    * up (Integer)
         
     | 
| 
      
 115 
     | 
    
         
            +
                #    * down (Integer)
         
     | 
| 
      
 116 
     | 
    
         
            +
                #    * pending (Integer)
         
     | 
| 
      
 117 
     | 
    
         
            +
                #    * unreachable (Integer)
         
     | 
| 
      
 118 
     | 
    
         
            +
                #    * in_downtime (Integer)
         
     | 
| 
      
 119 
     | 
    
         
            +
                #    * acknowledged (Integer)
         
     | 
| 
      
 120 
     | 
    
         
            +
                #
         
     | 
| 
      
 121 
     | 
    
         
            +
                def host_statistics
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                  hosts_up           = @hosts_up.nil?           ? 0 : @hosts_up
         
     | 
| 
      
 124 
     | 
    
         
            +
                  hosts_down         = @hosts_down.nil?         ? 0 : @hosts_down
         
     | 
| 
      
 125 
     | 
    
         
            +
                  hosts_pending      = @hosts_pending.nil?      ? 0 : @hosts_pending
         
     | 
| 
      
 126 
     | 
    
         
            +
                  hosts_unreachable  = @hosts_unreachable.nil?  ? 0 : @hosts_unreachable
         
     | 
| 
      
 127 
     | 
    
         
            +
                  hosts_in_downtime  = @hosts_in_downtime.nil?  ? 0 : @hosts_in_downtime
         
     | 
| 
      
 128 
     | 
    
         
            +
                  hosts_acknowledged = @hosts_acknowledged.nil? ? 0 : @hosts_acknowledged
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
                  {
         
     | 
| 
      
 131 
     | 
    
         
            +
                    up: hosts_up.to_i,
         
     | 
| 
      
 132 
     | 
    
         
            +
                    down: hosts_down.to_i,
         
     | 
| 
      
 133 
     | 
    
         
            +
                    pending: hosts_pending.to_i,
         
     | 
| 
      
 134 
     | 
    
         
            +
                    unreachable: hosts_unreachable.to_i,
         
     | 
| 
      
 135 
     | 
    
         
            +
                    in_downtime: hosts_in_downtime.to_i,
         
     | 
| 
      
 136 
     | 
    
         
            +
                    acknowledged: hosts_acknowledged.to_i
         
     | 
| 
      
 137 
     | 
    
         
            +
                  }
         
     | 
| 
      
 138 
     | 
    
         
            +
                end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                # return queue statistics from the api
         
     | 
| 
      
 142 
     | 
    
         
            +
                #
         
     | 
| 
      
 143 
     | 
    
         
            +
                # @example
         
     | 
| 
      
 144 
     | 
    
         
            +
                #    @icinga.work_queue_statistics
         
     | 
| 
      
 145 
     | 
    
         
            +
                #
         
     | 
| 
      
 146 
     | 
    
         
            +
                # @return [Hash]
         
     | 
| 
      
 147 
     | 
    
         
            +
                #
         
     | 
| 
      
 148 
     | 
    
         
            +
                def work_queue_statistics
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
                  stats  = {}
         
     | 
| 
      
 151 
     | 
    
         
            +
                  data   = Network.api_data(
         
     | 
| 
      
 152 
     | 
    
         
            +
                    url: format( '%s/status', @icinga_api_url_base ),
         
     | 
| 
      
 153 
     | 
    
         
            +
                    headers: @headers,
         
     | 
| 
      
 154 
     | 
    
         
            +
                    options: @options
         
     | 
| 
      
 155 
     | 
    
         
            +
                  )
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
                  return stats if data.nil?
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
                  if( data.dig(:status).nil? )
         
     | 
| 
      
 160 
     | 
    
         
            +
                    results = data.dig('results')
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
                    json_rpc_data  = results.find { |k| k['name'] == 'ApiListener' }
         
     | 
| 
      
 163 
     | 
    
         
            +
                    graphite_data  = results.find { |k| k['name'] == 'GraphiteWriter' }
         
     | 
| 
      
 164 
     | 
    
         
            +
                    ido_mysql_data = results.find { |k| k['name'] == 'IdoMysqlConnection' }
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                    json_rpc_data  = json_rpc_data.dig('status', 'api', 'json_rpc') unless( json_rpc_data.nil? )
         
     | 
| 
      
 167 
     | 
    
         
            +
                    graphite_data  = graphite_data.dig('status', 'graphitewriter', 'graphite')       unless( graphite_data.nil? )
         
     | 
| 
      
 168 
     | 
    
         
            +
                    ido_mysql_data = ido_mysql_data.dig('status', 'idomysqlconnection', 'ido-mysql') unless( ido_mysql_data.nil? )
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
                    a = {}
         
     | 
| 
      
 171 
     | 
    
         
            +
                    a['json_rpc']  = json_rpc_data  if(json_rpc_data.is_a?(Hash))
         
     | 
| 
      
 172 
     | 
    
         
            +
                    a['graphite']  = graphite_data  if(graphite_data.is_a?(Hash))
         
     | 
| 
      
 173 
     | 
    
         
            +
                    a['ido-mysql'] = ido_mysql_data if(ido_mysql_data.is_a?(Hash))
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
                    key_list = %w[work_queue_item_rate query_queue_item_rate]
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
                    a.each do |k,v|
         
     | 
| 
      
 178 
     | 
    
         
            +
                      key_list.each do |key|
         
     | 
| 
      
 179 
     | 
    
         
            +
                        if( v.include?( key ))
         
     | 
| 
      
 180 
     | 
    
         
            +
                          attr_name = format('%s queue rate', k)
         
     | 
| 
      
 181 
     | 
    
         
            +
                          stats[attr_name] = v[key].to_f.round(3)
         
     | 
| 
      
 182 
     | 
    
         
            +
                        end
         
     | 
| 
      
 183 
     | 
    
         
            +
                      end
         
     | 
| 
      
 184 
     | 
    
         
            +
                    end
         
     | 
| 
      
 185 
     | 
    
         
            +
                  end
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
      
 187 
     | 
    
         
            +
                  stats
         
     | 
| 
      
 188 
     | 
    
         
            +
                end
         
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
      
 190 
     | 
    
         
            +
              end
         
     | 
| 
      
 191 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/icinga2/tools.rb
    CHANGED
    
    | 
         @@ -13,7 +13,7 @@ module Icinga2 
     | 
|
| 
       13 
13 
     | 
    
         
             
                #
         
     | 
| 
       14 
14 
     | 
    
         
             
                # @return [Bool]
         
     | 
| 
       15 
15 
     | 
    
         
             
                #
         
     | 
| 
       16 
     | 
    
         
            -
                def object_has_been_checked?(object)
         
     | 
| 
      
 16 
     | 
    
         
            +
                def object_has_been_checked?( object )
         
     | 
| 
       17 
17 
     | 
    
         
             
                  object.dig('attrs', 'last_check').positive?
         
     | 
| 
       18 
18 
     | 
    
         
             
                end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
         @@ -23,7 +23,7 @@ module Icinga2 
     | 
|
| 
       23 
23 
     | 
    
         
             
                #
         
     | 
| 
       24 
24 
     | 
    
         
             
                # @return [String, String]
         
     | 
| 
       25 
25 
     | 
    
         
             
                #
         
     | 
| 
       26 
     | 
    
         
            -
                def parse_version(version)
         
     | 
| 
      
 26 
     | 
    
         
            +
                def parse_version( version )
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
28 
     | 
    
         
             
                  # version = "v2.4.10-504-gab4ba18"
         
     | 
| 
       29 
29 
     | 
    
         
             
                  # version = "v2.4.10"
         
     | 
| 
         @@ -46,43 +46,48 @@ module Icinga2 
     | 
|
| 
       46 
46 
     | 
    
         
             
                # return count of handled problems
         
     | 
| 
       47 
47 
     | 
    
         
             
                #
         
     | 
| 
       48 
48 
     | 
    
         
             
                # @param [Hash] objects
         
     | 
| 
       49 
     | 
    
         
            -
                # @param [Integer]  
     | 
| 
      
 49 
     | 
    
         
            +
                # @param [Integer] state (nil)
         
     | 
| 
       50 
50 
     | 
    
         
             
                #
         
     | 
| 
       51 
51 
     | 
    
         
             
                # @example for host objects
         
     | 
| 
       52 
52 
     | 
    
         
             
                #    h_objects = @icinga.host_objects
         
     | 
| 
       53 
     | 
    
         
            -
                #     
     | 
| 
      
 53 
     | 
    
         
            +
                #    all = @icinga.count_problems(h_objects)
         
     | 
| 
      
 54 
     | 
    
         
            +
                #    down = @icinga.count_problems(h_objects, Icinga2::HOSTS_DOWN)
         
     | 
| 
      
 55 
     | 
    
         
            +
                #    critical = @icinga.count_problems(h_objects, Icinga2::HOSTS_CRITICAL)
         
     | 
| 
      
 56 
     | 
    
         
            +
                #    unknown = @icinga.count_problems(h_objects, Icinga2::HOSTS_UNKNOWN)
         
     | 
| 
       54 
57 
     | 
    
         
             
                #
         
     | 
| 
       55 
58 
     | 
    
         
             
                # @example for service objects
         
     | 
| 
       56 
59 
     | 
    
         
             
                #    s_objects = @icinga.service_objects
         
     | 
| 
       57 
     | 
    
         
            -
                #     
     | 
| 
       58 
     | 
    
         
            -
                #     
     | 
| 
       59 
     | 
    
         
            -
                #     
     | 
| 
      
 60 
     | 
    
         
            +
                #    all = @icinga.count_problems(s_objects)
         
     | 
| 
      
 61 
     | 
    
         
            +
                #    warning = @icinga.count_problems(s_objects, Icinga2::SERVICE_STATE_WARNING)
         
     | 
| 
      
 62 
     | 
    
         
            +
                #    critical = @icinga.count_problems(s_objects, Icinga2::SERVICE_STATE_CRITICAL)
         
     | 
| 
      
 63 
     | 
    
         
            +
                #    unknown = @icinga.count_problems(s_objects, Icinga2::SERVICE_STATE_UNKNOWN)
         
     | 
| 
       60 
64 
     | 
    
         
             
                #
         
     | 
| 
       61 
65 
     | 
    
         
             
                # @return [Integer]
         
     | 
| 
       62 
66 
     | 
    
         
             
                #
         
     | 
| 
       63 
     | 
    
         
            -
                def  
     | 
| 
      
 67 
     | 
    
         
            +
                def count_problems( objects, state = nil )
         
     | 
| 
       64 
68 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
                   
     | 
| 
      
 69 
     | 
    
         
            +
                  compare_states = []
         
     | 
| 
       66 
70 
     | 
    
         | 
| 
       67 
     | 
    
         
            -
                   
     | 
| 
       68 
     | 
    
         
            -
                  nodes   = objects.dig(:nodes)
         
     | 
| 
      
 71 
     | 
    
         
            +
                  unless( state.nil? )
         
     | 
| 
       69 
72 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
                     
     | 
| 
      
 73 
     | 
    
         
            +
                    # 0 = "Up"   or "OK"
         
     | 
| 
      
 74 
     | 
    
         
            +
                    # 1 = "Down" or "Warning"
         
     | 
| 
      
 75 
     | 
    
         
            +
                    # 2 = "Critical"
         
     | 
| 
      
 76 
     | 
    
         
            +
                    # 3 = "Unknown"
         
     | 
| 
      
 77 
     | 
    
         
            +
                    compare_states = [1, 2, 3]
         
     | 
| 
      
 78 
     | 
    
         
            +
                  end
         
     | 
| 
       73 
79 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
                      state           = attrs.dig('state')           || 0
         
     | 
| 
       76 
     | 
    
         
            -
                      downtime_depth  = attrs.dig('downtime_depth')  || 0
         
     | 
| 
       77 
     | 
    
         
            -
                      acknowledgement = attrs.dig('acknowledgement') || 0
         
     | 
| 
      
 80 
     | 
    
         
            +
                  compare_states.push(state) if( state.is_a?(Integer) )
         
     | 
| 
       78 
81 
     | 
    
         | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
                        problems += 1
         
     | 
| 
       81 
     | 
    
         
            -
                      end
         
     | 
| 
      
 82 
     | 
    
         
            +
                  objects = JSON.parse(objects) if objects.is_a?(String)
         
     | 
| 
       82 
83 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
      
 84 
     | 
    
         
            +
                  f = objects.select do |t|
         
     | 
| 
      
 85 
     | 
    
         
            +
                    t.dig('attrs','state') == state && \
         
     | 
| 
      
 86 
     | 
    
         
            +
                        ( !t.dig('attrs','downtime_depth').nil? && t.dig('attrs','downtime_depth').zero?) && \
         
     | 
| 
      
 87 
     | 
    
         
            +
                        ( !t.dig('attrs','acknowledgement').nil? && t.dig('attrs','acknowledgement').zero? )
         
     | 
| 
       84 
88 
     | 
    
         
             
                  end
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                  f.size
         
     | 
| 
       86 
91 
     | 
    
         
             
                end
         
     | 
| 
       87 
92 
     | 
    
         | 
| 
       88 
93 
     | 
    
         
             
              end
         
     | 
    
        data/lib/icinga2/usergroups.rb
    CHANGED
    
    | 
         @@ -9,25 +9,23 @@ module Icinga2 
     | 
|
| 
       9 
9 
     | 
    
         
             
                # add a usergroup
         
     | 
| 
       10 
10 
     | 
    
         
             
                #
         
     | 
| 
       11 
11 
     | 
    
         
             
                # @param [Hash] params
         
     | 
| 
       12 
     | 
    
         
            -
                # @option params [String] : 
     | 
| 
      
 12 
     | 
    
         
            +
                # @option params [String] :user_group usergroup to create
         
     | 
| 
       13 
13 
     | 
    
         
             
                # @option params [String] :display_name the displayed name
         
     | 
| 
       14 
14 
     | 
    
         
             
                #
         
     | 
| 
       15 
15 
     | 
    
         
             
                # @example
         
     | 
| 
       16 
     | 
    
         
            -
                #   @icinga.add_usergroup( 
     | 
| 
      
 16 
     | 
    
         
            +
                #   @icinga.add_usergroup(user_group: 'foo', display_name: 'FOO')
         
     | 
| 
       17 
17 
     | 
    
         
             
                #
         
     | 
| 
       18 
18 
     | 
    
         
             
                # @return [Hash] result
         
     | 
| 
       19 
19 
     | 
    
         
             
                #
         
     | 
| 
       20 
     | 
    
         
            -
                def add_usergroup( params  
     | 
| 
      
 20 
     | 
    
         
            +
                def add_usergroup( params )
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
                   
     | 
| 
      
 22 
     | 
    
         
            +
                  raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
         
     | 
| 
      
 23 
     | 
    
         
            +
                  raise ArgumentError.new('missing params') if( params.size.zero? )
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  user_group   = params.dig(:user_group)
         
     | 
| 
       23 
26 
     | 
    
         
             
                  display_name = params.dig(:display_name)
         
     | 
| 
       24 
27 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                  if(  
     | 
| 
       26 
     | 
    
         
            -
                    return {
         
     | 
| 
       27 
     | 
    
         
            -
                      status: 404,
         
     | 
| 
       28 
     | 
    
         
            -
                      message: 'missing usergroup name'
         
     | 
| 
       29 
     | 
    
         
            -
                    }
         
     | 
| 
       30 
     | 
    
         
            -
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  raise ArgumentError.new('Missing user_group') if( user_group.nil? )
         
     | 
| 
       31 
29 
     | 
    
         | 
| 
       32 
30 
     | 
    
         
             
                  payload = {
         
     | 
| 
       33 
31 
     | 
    
         
             
                    'attrs' => {
         
     | 
| 
         @@ -35,82 +33,94 @@ module Icinga2 
     | 
|
| 
       35 
33 
     | 
    
         
             
                    }
         
     | 
| 
       36 
34 
     | 
    
         
             
                  }
         
     | 
| 
       37 
35 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
                  Network.put( 
     | 
| 
       39 
     | 
    
         
            -
                    url: format( '%s/ 
     | 
| 
      
 36 
     | 
    
         
            +
                  Network.put(
         
     | 
| 
      
 37 
     | 
    
         
            +
                    url: format( '%s/objects/usergroups/%s', @icinga_api_url_base, user_group ),
         
     | 
| 
       40 
38 
     | 
    
         
             
                    headers: @headers,
         
     | 
| 
       41 
39 
     | 
    
         
             
                    options: @options,
         
     | 
| 
       42 
     | 
    
         
            -
                    payload: payload 
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
      
 40 
     | 
    
         
            +
                    payload: payload
         
     | 
| 
      
 41 
     | 
    
         
            +
                  )
         
     | 
| 
       44 
42 
     | 
    
         
             
                end
         
     | 
| 
       45 
43 
     | 
    
         | 
| 
       46 
44 
     | 
    
         
             
                # delete a usergroup
         
     | 
| 
       47 
45 
     | 
    
         
             
                #
         
     | 
| 
       48 
46 
     | 
    
         
             
                # @param [Hash] params
         
     | 
| 
       49 
     | 
    
         
            -
                # @option params [String] : 
     | 
| 
      
 47 
     | 
    
         
            +
                # @option params [String] :user_group usergroup to delete
         
     | 
| 
       50 
48 
     | 
    
         
             
                #
         
     | 
| 
       51 
49 
     | 
    
         
             
                # @example
         
     | 
| 
       52 
     | 
    
         
            -
                #   @icinga.delete_usergroup( 
     | 
| 
      
 50 
     | 
    
         
            +
                #   @icinga.delete_usergroup(user_group: 'foo')
         
     | 
| 
       53 
51 
     | 
    
         
             
                #
         
     | 
| 
       54 
52 
     | 
    
         
             
                # @return [Hash] result
         
     | 
| 
       55 
53 
     | 
    
         
             
                #
         
     | 
| 
       56 
     | 
    
         
            -
                def delete_usergroup( params  
     | 
| 
      
 54 
     | 
    
         
            +
                def delete_usergroup( params )
         
     | 
| 
       57 
55 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
                   
     | 
| 
      
 56 
     | 
    
         
            +
                  raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
         
     | 
| 
      
 57 
     | 
    
         
            +
                  raise ArgumentError.new('missing params') if( params.size.zero? )
         
     | 
| 
       59 
58 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
                   
     | 
| 
       61 
     | 
    
         
            -
                    return {
         
     | 
| 
       62 
     | 
    
         
            -
                      status: 404,
         
     | 
| 
       63 
     | 
    
         
            -
                      message: 'missing usergroup name'
         
     | 
| 
       64 
     | 
    
         
            -
                    }
         
     | 
| 
       65 
     | 
    
         
            -
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
                  user_group = params.dig(:user_group)
         
     | 
| 
       66 
60 
     | 
    
         | 
| 
       67 
     | 
    
         
            -
                   
     | 
| 
       68 
     | 
    
         
            -
                    url: format( '%s/v1/objects/usergroups/%s?cascade=1', @icinga_api_url_base, name ),
         
     | 
| 
       69 
     | 
    
         
            -
                    headers: @headers,
         
     | 
| 
       70 
     | 
    
         
            -
                    options: @options )
         
     | 
| 
      
 61 
     | 
    
         
            +
                  raise ArgumentError.new('Missing user_group') if( user_group.nil? )
         
     | 
| 
       71 
62 
     | 
    
         | 
| 
      
 63 
     | 
    
         
            +
                  Network.delete(
         
     | 
| 
      
 64 
     | 
    
         
            +
                    url: format( '%s/objects/usergroups/%s?cascade=1', @icinga_api_url_base, user_group ),
         
     | 
| 
      
 65 
     | 
    
         
            +
                    headers: @headers,
         
     | 
| 
      
 66 
     | 
    
         
            +
                    options: @options
         
     | 
| 
      
 67 
     | 
    
         
            +
                  )
         
     | 
| 
       72 
68 
     | 
    
         
             
                end
         
     | 
| 
       73 
69 
     | 
    
         | 
| 
       74 
70 
     | 
    
         
             
                # returns all usersgroups
         
     | 
| 
       75 
71 
     | 
    
         
             
                #
         
     | 
| 
       76 
72 
     | 
    
         
             
                # @param [Hash] params
         
     | 
| 
       77 
     | 
    
         
            -
                # @option params [String] : 
     | 
| 
      
 73 
     | 
    
         
            +
                # @option params [String] :user_group ('') optional for a single usergroup
         
     | 
| 
       78 
74 
     | 
    
         
             
                #
         
     | 
| 
       79 
75 
     | 
    
         
             
                # @example to get all users
         
     | 
| 
       80 
76 
     | 
    
         
             
                #    @icinga.usergroups
         
     | 
| 
       81 
77 
     | 
    
         
             
                #
         
     | 
| 
       82 
78 
     | 
    
         
             
                # @example to get one user
         
     | 
| 
       83 
     | 
    
         
            -
                #    @icinga.usergroups( 
     | 
| 
      
 79 
     | 
    
         
            +
                #    @icinga.usergroups(user_group: 'icingaadmins')
         
     | 
| 
       84 
80 
     | 
    
         
             
                #
         
     | 
| 
       85 
81 
     | 
    
         
             
                # @return [Hash] returns a hash with all usergroups
         
     | 
| 
       86 
82 
     | 
    
         
             
                #
         
     | 
| 
       87 
83 
     | 
    
         
             
                def usergroups( params = {} )
         
     | 
| 
       88 
84 
     | 
    
         | 
| 
       89 
     | 
    
         
            -
                   
     | 
| 
      
 85 
     | 
    
         
            +
                  user_group = params.dig(:user_group)
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                  url =
         
     | 
| 
      
 88 
     | 
    
         
            +
                  if( user_group.nil? )
         
     | 
| 
      
 89 
     | 
    
         
            +
                    format( '%s/objects/usergroups'   , @icinga_api_url_base )
         
     | 
| 
      
 90 
     | 
    
         
            +
                  else
         
     | 
| 
      
 91 
     | 
    
         
            +
                    format( '%s/objects/usergroups/%s', @icinga_api_url_base, user_group )
         
     | 
| 
      
 92 
     | 
    
         
            +
                  end
         
     | 
| 
       90 
93 
     | 
    
         | 
| 
       91 
     | 
    
         
            -
                  Network. 
     | 
| 
       92 
     | 
    
         
            -
                    url:  
     | 
| 
      
 94 
     | 
    
         
            +
                  data = Network.api_data(
         
     | 
| 
      
 95 
     | 
    
         
            +
                    url: url,
         
     | 
| 
       93 
96 
     | 
    
         
             
                    headers: @headers,
         
     | 
| 
       94 
     | 
    
         
            -
                    options: @options 
     | 
| 
      
 97 
     | 
    
         
            +
                    options: @options
         
     | 
| 
      
 98 
     | 
    
         
            +
                  )
         
     | 
| 
       95 
99 
     | 
    
         | 
| 
      
 100 
     | 
    
         
            +
                  return data.dig('results') if( data.dig(:status).nil? )
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                  nil
         
     | 
| 
       96 
103 
     | 
    
         
             
                end
         
     | 
| 
       97 
104 
     | 
    
         | 
| 
       98 
105 
     | 
    
         
             
                # returns true if the usergroup exists
         
     | 
| 
       99 
106 
     | 
    
         
             
                #
         
     | 
| 
       100 
     | 
    
         
            -
                # @param [String]  
     | 
| 
      
 107 
     | 
    
         
            +
                # @param [String] user_group the name of the usergroups
         
     | 
| 
       101 
108 
     | 
    
         
             
                #
         
     | 
| 
       102 
109 
     | 
    
         
             
                # @example
         
     | 
| 
       103 
110 
     | 
    
         
             
                #    @icinga.exists_usergroup?('icingaadmins')
         
     | 
| 
       104 
111 
     | 
    
         
             
                #
         
     | 
| 
       105 
112 
     | 
    
         
             
                # @return [Bool] returns true if the usergroup exists
         
     | 
| 
       106 
113 
     | 
    
         
             
                #
         
     | 
| 
       107 
     | 
    
         
            -
                def exists_usergroup?(  
     | 
| 
      
 114 
     | 
    
         
            +
                def exists_usergroup?( user_group )
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                  raise ArgumentError.new('only String are allowed') unless( user_group.is_a?(String) )
         
     | 
| 
      
 117 
     | 
    
         
            +
                  raise ArgumentError.new('Missing user_group') if( user_group.size.zero? )
         
     | 
| 
       108 
118 
     | 
    
         | 
| 
       109 
     | 
    
         
            -
                  result = usergroups(  
     | 
| 
      
 119 
     | 
    
         
            +
                  result = usergroups( user_group: user_group )
         
     | 
| 
       110 
120 
     | 
    
         
             
                  result = JSON.parse( result ) if  result.is_a?( String )
         
     | 
| 
       111 
     | 
    
         
            -
                  status = result.dig(:status)
         
     | 
| 
       112 
121 
     | 
    
         | 
| 
       113 
     | 
    
         
            -
                  return true if  ! 
     | 
| 
      
 122 
     | 
    
         
            +
                  return true if  !result.nil? && result.is_a?(Array)
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
       114 
124 
     | 
    
         
             
                  false
         
     | 
| 
       115 
125 
     | 
    
         
             
                end
         
     | 
| 
       116 
126 
     | 
    
         | 
    
        data/lib/icinga2/users.rb
    CHANGED
    
    | 
         @@ -9,41 +9,32 @@ module Icinga2 
     | 
|
| 
       9 
9 
     | 
    
         
             
                # add a user
         
     | 
| 
       10 
10 
     | 
    
         
             
                #
         
     | 
| 
       11 
11 
     | 
    
         
             
                # @param [Hash] params
         
     | 
| 
       12 
     | 
    
         
            -
                # @option params [String] : 
     | 
| 
       13 
     | 
    
         
            -
                # @option params [String] :display_name the displayed name
         
     | 
| 
      
 12 
     | 
    
         
            +
                # @option params [String] :user_name ('') user to create
         
     | 
| 
      
 13 
     | 
    
         
            +
                # @option params [String] :display_name ('') the displayed name
         
     | 
| 
       14 
14 
     | 
    
         
             
                # @option params [String] :email ('') the user email
         
     | 
| 
       15 
15 
     | 
    
         
             
                # @option params [String] :pager ('') optional a pager
         
     | 
| 
       16 
16 
     | 
    
         
             
                # @option params [Bool] :enable_notifications (false) enable notifications for this user
         
     | 
| 
       17 
17 
     | 
    
         
             
                # @option params [Array] :groups ([]) a hash with groups
         
     | 
| 
       18 
18 
     | 
    
         
             
                #
         
     | 
| 
       19 
19 
     | 
    
         
             
                # @example
         
     | 
| 
       20 
     | 
    
         
            -
                #   @icinga.add_user( 
     | 
| 
      
 20 
     | 
    
         
            +
                #   @icinga.add_user(user_name: 'foo', display_name: 'FOO', email: 'foo@bar.com', pager: '0000', groups: ['icingaadmins'])
         
     | 
| 
       21 
21 
     | 
    
         
             
                #
         
     | 
| 
       22 
22 
     | 
    
         
             
                # @return [Hash] result
         
     | 
| 
       23 
23 
     | 
    
         
             
                #
         
     | 
| 
       24 
     | 
    
         
            -
                def add_user( params  
     | 
| 
      
 24 
     | 
    
         
            +
                def add_user( params )
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
                   
     | 
| 
      
 26 
     | 
    
         
            +
                  raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
         
     | 
| 
      
 27 
     | 
    
         
            +
                  raise ArgumentError.new('missing params') if( params.size.zero? )
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  user_name     = params.dig(:user_name)
         
     | 
| 
       27 
30 
     | 
    
         
             
                  display_name  = params.dig(:display_name)
         
     | 
| 
       28 
31 
     | 
    
         
             
                  email         = params.dig(:email)
         
     | 
| 
       29 
32 
     | 
    
         
             
                  pager         = params.dig(:pager)
         
     | 
| 
       30 
33 
     | 
    
         
             
                  notifications = params.dig(:enable_notifications) || false
         
     | 
| 
       31 
34 
     | 
    
         
             
                  groups        = params.dig(:groups) || []
         
     | 
| 
       32 
35 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                  if(  
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                      status: 404,
         
     | 
| 
       36 
     | 
    
         
            -
                      message: 'missing user name'
         
     | 
| 
       37 
     | 
    
         
            -
                    }
         
     | 
| 
       38 
     | 
    
         
            -
                  end
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                  unless( groups.is_a?( Array ) )
         
     | 
| 
       41 
     | 
    
         
            -
                    return {
         
     | 
| 
       42 
     | 
    
         
            -
                      status: 404,
         
     | 
| 
       43 
     | 
    
         
            -
                      message: 'groups must be an array',
         
     | 
| 
       44 
     | 
    
         
            -
                      data: params
         
     | 
| 
       45 
     | 
    
         
            -
                    }
         
     | 
| 
       46 
     | 
    
         
            -
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
                  raise ArgumentError.new('Missing user_name') if( user_name.nil? )
         
     | 
| 
      
 37 
     | 
    
         
            +
                  raise ArgumentError.new('groups must be an array') unless( groups.is_a?( Array ) )
         
     | 
| 
       47 
38 
     | 
    
         | 
| 
       48 
39 
     | 
    
         
             
                  payload = {
         
     | 
| 
       49 
40 
     | 
    
         
             
                    'attrs' => {
         
     | 
| 
         @@ -73,90 +64,94 @@ module Icinga2 
     | 
|
| 
       73 
64 
     | 
    
         
             
                    }
         
     | 
| 
       74 
65 
     | 
    
         
             
                  end
         
     | 
| 
       75 
66 
     | 
    
         | 
| 
       76 
     | 
    
         
            -
                  Network.put( 
     | 
| 
       77 
     | 
    
         
            -
                    url: format( '%s/ 
     | 
| 
      
 67 
     | 
    
         
            +
                  Network.put(
         
     | 
| 
      
 68 
     | 
    
         
            +
                    url: format( '%s/objects/users/%s', @icinga_api_url_base, user_name ),
         
     | 
| 
       78 
69 
     | 
    
         
             
                    headers: @headers,
         
     | 
| 
       79 
70 
     | 
    
         
             
                    options: @options,
         
     | 
| 
       80 
     | 
    
         
            -
                    payload: payload 
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                  # result:
         
     | 
| 
       83 
     | 
    
         
            -
                  #   {:status=>200, :name=>nil, :message=>"Object was created"}
         
     | 
| 
      
 71 
     | 
    
         
            +
                    payload: payload
         
     | 
| 
      
 72 
     | 
    
         
            +
                  )
         
     | 
| 
       84 
73 
     | 
    
         
             
                end
         
     | 
| 
       85 
74 
     | 
    
         | 
| 
       86 
75 
     | 
    
         
             
                # delete a user
         
     | 
| 
       87 
76 
     | 
    
         
             
                #
         
     | 
| 
       88 
77 
     | 
    
         
             
                # @param [Hash] params
         
     | 
| 
       89 
     | 
    
         
            -
                # @option params [String] : 
     | 
| 
      
 78 
     | 
    
         
            +
                # @option params [String] :user_name user to delete
         
     | 
| 
       90 
79 
     | 
    
         
             
                #
         
     | 
| 
       91 
80 
     | 
    
         
             
                # @example
         
     | 
| 
       92 
     | 
    
         
            -
                #   @icinga.delete_user( 
     | 
| 
      
 81 
     | 
    
         
            +
                #   @icinga.delete_user(user_name: 'foo')
         
     | 
| 
       93 
82 
     | 
    
         
             
                #
         
     | 
| 
       94 
83 
     | 
    
         
             
                # @return [Hash] result
         
     | 
| 
       95 
84 
     | 
    
         
             
                #
         
     | 
| 
       96 
     | 
    
         
            -
                def delete_user( params  
     | 
| 
      
 85 
     | 
    
         
            +
                def delete_user( params )
         
     | 
| 
       97 
86 
     | 
    
         | 
| 
       98 
     | 
    
         
            -
                   
     | 
| 
      
 87 
     | 
    
         
            +
                  raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
         
     | 
| 
      
 88 
     | 
    
         
            +
                  raise ArgumentError.new('missing params') if( params.size.zero? )
         
     | 
| 
       99 
89 
     | 
    
         | 
| 
       100 
     | 
    
         
            -
                   
     | 
| 
       101 
     | 
    
         
            -
                    return {
         
     | 
| 
       102 
     | 
    
         
            -
                      status: 404,
         
     | 
| 
       103 
     | 
    
         
            -
                      message: 'missing user name'
         
     | 
| 
       104 
     | 
    
         
            -
                    }
         
     | 
| 
       105 
     | 
    
         
            -
                  end
         
     | 
| 
      
 90 
     | 
    
         
            +
                  user_name = params.dig(:user_name)
         
     | 
| 
       106 
91 
     | 
    
         | 
| 
       107 
     | 
    
         
            -
                   
     | 
| 
       108 
     | 
    
         
            -
                    url: format( '%s/v1/objects/users/%s?cascade=1', @icinga_api_url_base, name ),
         
     | 
| 
       109 
     | 
    
         
            -
                    headers: @headers,
         
     | 
| 
       110 
     | 
    
         
            -
                    options: @options )
         
     | 
| 
      
 92 
     | 
    
         
            +
                  raise ArgumentError.new('Missing user_name') if( user_name.nil? )
         
     | 
| 
       111 
93 
     | 
    
         | 
| 
       112 
     | 
    
         
            -
                   
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
      
 94 
     | 
    
         
            +
                  Network.delete(
         
     | 
| 
      
 95 
     | 
    
         
            +
                    url: format( '%s/objects/users/%s?cascade=1', @icinga_api_url_base, user_name ),
         
     | 
| 
      
 96 
     | 
    
         
            +
                    headers: @headers,
         
     | 
| 
      
 97 
     | 
    
         
            +
                    options: @options
         
     | 
| 
      
 98 
     | 
    
         
            +
                  )
         
     | 
| 
       114 
99 
     | 
    
         
             
                end
         
     | 
| 
       115 
100 
     | 
    
         | 
| 
       116 
     | 
    
         
            -
                # returns all users
         
     | 
| 
      
 101 
     | 
    
         
            +
                # returns a named or all users
         
     | 
| 
       117 
102 
     | 
    
         
             
                #
         
     | 
| 
       118 
103 
     | 
    
         
             
                # @param [Hash] params
         
     | 
| 
       119 
     | 
    
         
            -
                # @option params [String] : 
     | 
| 
      
 104 
     | 
    
         
            +
                # @option params [String] :user_name ('') optional for a single user
         
     | 
| 
       120 
105 
     | 
    
         
             
                #
         
     | 
| 
       121 
106 
     | 
    
         
             
                # @example to get all users
         
     | 
| 
       122 
107 
     | 
    
         
             
                #    @icinga.users
         
     | 
| 
       123 
108 
     | 
    
         
             
                #
         
     | 
| 
       124 
109 
     | 
    
         
             
                # @example to get one user
         
     | 
| 
       125 
     | 
    
         
            -
                #    @icinga.users( 
     | 
| 
      
 110 
     | 
    
         
            +
                #    @icinga.users(user_name: 'icingaadmin')
         
     | 
| 
       126 
111 
     | 
    
         
             
                #
         
     | 
| 
       127 
     | 
    
         
            -
                # @return [Hash] returns a hash 
     | 
| 
      
 112 
     | 
    
         
            +
                # @return [Hash] returns a hash
         
     | 
| 
       128 
113 
     | 
    
         
             
                #
         
     | 
| 
       129 
114 
     | 
    
         
             
                def users( params = {} )
         
     | 
| 
       130 
115 
     | 
    
         | 
| 
       131 
     | 
    
         
            -
                   
     | 
| 
      
 116 
     | 
    
         
            +
                  user_name = params.dig(:user_name)
         
     | 
| 
       132 
117 
     | 
    
         | 
| 
       133 
     | 
    
         
            -
                   
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
      
 118 
     | 
    
         
            +
                  url =
         
     | 
| 
      
 119 
     | 
    
         
            +
                  if( user_name.nil? )
         
     | 
| 
      
 120 
     | 
    
         
            +
                    format( '%s/objects/users'   , @icinga_api_url_base )
         
     | 
| 
      
 121 
     | 
    
         
            +
                  else
         
     | 
| 
      
 122 
     | 
    
         
            +
                    format( '%s/objects/users/%s', @icinga_api_url_base, user_name )
         
     | 
| 
      
 123 
     | 
    
         
            +
                  end
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                  data = Network.api_data(
         
     | 
| 
      
 126 
     | 
    
         
            +
                    url: url,
         
     | 
| 
       135 
127 
     | 
    
         
             
                    headers: @headers,
         
     | 
| 
       136 
     | 
    
         
            -
                    options: @options 
     | 
| 
      
 128 
     | 
    
         
            +
                    options: @options
         
     | 
| 
      
 129 
     | 
    
         
            +
                  )
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                  return data.dig('results') if( data.dig(:status).nil? )
         
     | 
| 
       137 
132 
     | 
    
         | 
| 
       138 
     | 
    
         
            -
                   
     | 
| 
       139 
     | 
    
         
            -
                  #  - named user:
         
     | 
| 
       140 
     | 
    
         
            -
                  #   {:status=>200, :data=>{"icingaadmin"=>{:name=>"icingaadmin", :display_name=>"Icinga 2 Admin", :type=>"User"}}}
         
     | 
| 
       141 
     | 
    
         
            -
                  #  - all users:
         
     | 
| 
       142 
     | 
    
         
            -
                  #   {:status=>200, :data=>{"icingaadmin"=>{:name=>"icingaadmin", :display_name=>"Icinga 2 Admin", :type=>"User"}, "foo"=>{:name=>"foo", :display_name=>"FOO", :type=>"User"}}}
         
     | 
| 
      
 133 
     | 
    
         
            +
                  nil
         
     | 
| 
       143 
134 
     | 
    
         
             
                end
         
     | 
| 
       144 
135 
     | 
    
         | 
| 
       145 
     | 
    
         
            -
                #  
     | 
| 
      
 136 
     | 
    
         
            +
                # checks if the user exists
         
     | 
| 
       146 
137 
     | 
    
         
             
                #
         
     | 
| 
       147 
     | 
    
         
            -
                # @param [String]  
     | 
| 
      
 138 
     | 
    
         
            +
                # @param [String] user_name the name of the user
         
     | 
| 
       148 
139 
     | 
    
         
             
                #
         
     | 
| 
       149 
140 
     | 
    
         
             
                # @example
         
     | 
| 
       150 
141 
     | 
    
         
             
                #    @icinga.exists_user?('icingaadmin')
         
     | 
| 
       151 
142 
     | 
    
         
             
                #
         
     | 
| 
       152 
143 
     | 
    
         
             
                # @return [Bool] returns true if the user exists
         
     | 
| 
       153 
     | 
    
         
            -
                 
     | 
| 
      
 144 
     | 
    
         
            +
                #
         
     | 
| 
      
 145 
     | 
    
         
            +
                def exists_user?( user_name )
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                  raise ArgumentError.new('only String are allowed') unless( user_name.is_a?(String) )
         
     | 
| 
      
 148 
     | 
    
         
            +
                  raise ArgumentError.new('Missing user_name') if( user_name.size.zero? )
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
                  result = users( user_name: user_name )
         
     | 
| 
      
 151 
     | 
    
         
            +
                  result = JSON.parse( result ) if( result.is_a?(String) )
         
     | 
| 
       154 
152 
     | 
    
         | 
| 
       155 
     | 
    
         
            -
                   
     | 
| 
       156 
     | 
    
         
            -
                  result = JSON.parse( result ) if  result.is_a?( String )
         
     | 
| 
       157 
     | 
    
         
            -
                  status = result.dig(:status)
         
     | 
| 
      
 153 
     | 
    
         
            +
                  return true if( !result.nil? && result.is_a?(Array) )
         
     | 
| 
       158 
154 
     | 
    
         | 
| 
       159 
     | 
    
         
            -
                  return true if  !status.nil? && status == 200
         
     | 
| 
       160 
155 
     | 
    
         
             
                  false
         
     | 
| 
       161 
156 
     | 
    
         
             
                end
         
     | 
| 
       162 
157 
     | 
    
         |