chef-monitor 0.1.0 → 0.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.
- data/bin/chef-logmon +5 -1
- data/bin/chef-worker +33 -6
- data/lib/chef_logmon.rb +20 -0
- data/lib/chef_monitor/item.rb +61 -49
- data/lib/chef_monitor/itemlist.rb +60 -123
- data/lib/chef_monitor/log.rb +3 -1
- data/lib/chef_monitor/version.rb +1 -1
- data/lib/chef_monitor/worker.rb +20 -25
- data/lib/{chef_monitor.rb → chef_worker.rb} +0 -2
- metadata +4 -3
    
        data/bin/chef-logmon
    CHANGED
    
    | @@ -16,7 +16,7 @@ | |
| 16 16 | 
             
            # See the License for the specific language governing permissions and
         | 
| 17 17 | 
             
            # limitations under the License.
         | 
| 18 18 |  | 
| 19 | 
            -
            require " | 
| 19 | 
            +
            require "chef_logmon"
         | 
| 20 20 | 
             
            require 'rubygems'
         | 
| 21 21 | 
             
            require 'file-tail'
         | 
| 22 22 | 
             
            require 'bunny'
         | 
| @@ -24,9 +24,12 @@ require 'json' | |
| 24 24 | 
             
            require 'daemons'
         | 
| 25 25 |  | 
| 26 26 | 
             
            config=nil
         | 
| 27 | 
            +
            debug=false
         | 
| 28 | 
            +
             | 
| 27 29 | 
             
            opt=0
         | 
| 28 30 | 
             
            ARGV.each do |arg|
         | 
| 29 31 | 
             
              config = ARGV[opt+1] if arg == "-C" || arg == "--config"
         | 
| 32 | 
            +
              debug = true if arg == "--debug"
         | 
| 30 33 | 
             
              opt+=1
         | 
| 31 34 | 
             
            end
         | 
| 32 35 |  | 
| @@ -47,6 +50,7 @@ MQSERVER = Monitor::Config[:mq_server] | |
| 47 50 | 
             
            MQQUEUE  = Monitor::Config[:mq_queue]
         | 
| 48 51 | 
             
            MON_FILE = Monitor::Config[:mon_file]
         | 
| 49 52 | 
             
            CHEF_URL = Monitor::Config[:chef_url]
         | 
| 53 | 
            +
            DEBUG = debug
         | 
| 50 54 |  | 
| 51 55 | 
             
            @options = {
         | 
| 52 56 | 
             
              :log_output => true,
         | 
    
        data/bin/chef-worker
    CHANGED
    
    | @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            #!/opt/chef/embedded/bin/ruby
         | 
| 2 3 | 
             
            #
         | 
| 3 4 | 
             
            # Author:: Sander Botman (<sander.botman@gmail.com>)
         | 
| 4 5 | 
             
            # Copyright:: Copyright (c) 2014 Sander Botman.
         | 
| @@ -15,17 +16,21 @@ | |
| 15 16 | 
             
            # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         | 
| 16 17 | 
             
            # See the License for the specific language governing permissions and
         | 
| 17 18 | 
             
            # limitations under the License.
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            require " | 
| 19 | 
            +
            # $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
         | 
| 20 | 
            +
            require "chef_worker"
         | 
| 20 21 | 
             
            require 'rubygems'
         | 
| 21 22 | 
             
            require 'bunny'
         | 
| 22 23 | 
             
            require 'json'
         | 
| 23 24 | 
             
            require 'daemons'
         | 
| 24 25 |  | 
| 25 26 | 
             
            config=nil
         | 
| 27 | 
            +
            populate=nil
         | 
| 28 | 
            +
            debug=false
         | 
| 26 29 | 
             
            opt=0
         | 
| 27 30 | 
             
            ARGV.each do |arg|
         | 
| 28 31 | 
             
              config = ARGV[opt+1] if arg == "-C" || arg == "--config"
         | 
| 32 | 
            +
              populate = ARGV[opt+1] if arg == "-O" 
         | 
| 33 | 
            +
              debug = true if arg == "--debug"
         | 
| 29 34 | 
             
              opt+=1
         | 
| 30 35 | 
             
            end
         | 
| 31 36 |  | 
| @@ -42,10 +47,12 @@ else | |
| 42 47 | 
             
              end
         | 
| 43 48 | 
             
            end    
         | 
| 44 49 |  | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 50 | 
            +
            ALLOWED_OBJECTS = ['users', 'cookbooks','roles','environments','clients','nodes','groups','data']
         | 
| 51 | 
            +
            DOWNLOAD_PATH   = Monitor::Config[:download_path]
         | 
| 52 | 
            +
            MQSERVER        = Monitor::Config[:mq_server]
         | 
| 53 | 
            +
            MQQUEUE         = Monitor::Config[:mq_queue]
         | 
| 54 | 
            +
            CHEF_URL        = Monitor::Config[:chef_url]
         | 
| 55 | 
            +
            DEBUG           = debug
         | 
| 49 56 | 
             
            Chef::Config[:node_name]  = Monitor::Config[:node_name]
         | 
| 50 57 | 
             
            Chef::Config[:client_key] = Monitor::Config[:client_key]
         | 
| 51 58 |  | 
| @@ -56,6 +63,26 @@ Chef::Config[:client_key] = Monitor::Config[:client_key] | |
| 56 63 | 
             
              :log_dir => Monitor::Config[:log_dir]
         | 
| 57 64 | 
             
            }
         | 
| 58 65 |  | 
| 66 | 
            +
            unless populate.nil?
         | 
| 67 | 
            +
              Chef::Config[:chef_server_url] = CHEF_URL + "/organizations/#{populate}"
         | 
| 68 | 
            +
              ALLOWED_OBJECTS.each do |object|
         | 
| 69 | 
            +
                data = {}
         | 
| 70 | 
            +
                data['object'] = object
         | 
| 71 | 
            +
                data['action'] = 'POST'
         | 
| 72 | 
            +
                data['org']    = populate
         | 
| 73 | 
            +
                data['time']   = Time.now
         | 
| 74 | 
            +
                data['user']   = 'chef-worker'
         | 
| 75 | 
            +
                data['server'] = ENV['HOSTNAME']
         | 
| 76 | 
            +
                pop = Monitor::Item.new(data)
         | 
| 77 | 
            +
                obj = Monitor::ItemList.new(data)
         | 
| 78 | 
            +
                obj.each do |item|
         | 
| 79 | 
            +
                  item.download(DOWNLOAD_PATH)
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
                pop.commit_nohook(DOWNLOAD_PATH)
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
              exit 0
         | 
| 84 | 
            +
            end
         | 
| 85 | 
            +
             | 
| 59 86 | 
             
            Daemons.run_proc('chef-worker', @options) do
         | 
| 60 87 | 
             
              worker = Monitor::Worker.new
         | 
| 61 88 | 
             
              worker.run()
         | 
    
        data/lib/chef_logmon.rb
    ADDED
    
    | @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            #
         | 
| 2 | 
            +
            # Author:: Sander Botman (<sander.botman@gmail.com>)
         | 
| 3 | 
            +
            # Copyright:: Copyright (c) 2014 Sander Botman.
         | 
| 4 | 
            +
            # License:: Apache License, Version 2.0
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            # Licensed under the Apache License, Version 2.0 (the "License");
         | 
| 7 | 
            +
            # you may not use this file except in compliance with the License.
         | 
| 8 | 
            +
            # You may obtain a copy of the License at
         | 
| 9 | 
            +
            #
         | 
| 10 | 
            +
            #     http://www.apache.org/licenses/LICENSE-2.0
         | 
| 11 | 
            +
            #
         | 
| 12 | 
            +
            # Unless required by applicable law or agreed to in writing, software
         | 
| 13 | 
            +
            # distributed under the License is distributed on an "AS IS" BASIS,
         | 
| 14 | 
            +
            # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         | 
| 15 | 
            +
            # See the License for the specific language governing permissions and
         | 
| 16 | 
            +
            # limitations under the License.
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            require "chef_monitor/log"
         | 
| 19 | 
            +
            require "chef_monitor/config"
         | 
| 20 | 
            +
            require "chef_monitor/logmon"
         | 
    
        data/lib/chef_monitor/item.rb
    CHANGED
    
    | @@ -43,13 +43,12 @@ class Monitor | |
| 43 43 | 
             
                attr_reader :organization
         | 
| 44 44 |  | 
| 45 45 | 
             
                def download(path)
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                   | 
| 48 | 
            -
                    r = download_object(path)
         | 
| 49 | 
            -
                  when 'cookbooks'
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  if @object == "cookbooks" 
         | 
| 50 48 | 
             
                    r = download_cookbook(path)
         | 
| 49 | 
            +
                  else
         | 
| 50 | 
            +
                    r = download_object(path)
         | 
| 51 51 | 
             
                  end
         | 
| 52 | 
            -
             
         | 
| 53 52 |  | 
| 54 53 | 
             
                  (@version.nil? || @version.empty?) ? object = [@organization, @object, @name].join('/') : object = [@organization, @object, @name, @version].join('/') 
         | 
| 55 54 |  | 
| @@ -71,8 +70,8 @@ class Monitor | |
| 71 70 | 
             
                  items << @organization
         | 
| 72 71 | 
             
                  items << @object
         | 
| 73 72 | 
             
                  if @name
         | 
| 74 | 
            -
                    filename=@name + ".json"  | 
| 75 | 
            -
             | 
| 73 | 
            +
                    filename=@name + ".json" 
         | 
| 74 | 
            +
             
         | 
| 76 75 | 
             
                    if @object == "cookbooks"
         | 
| 77 76 | 
             
                      (@version.nil? || @version.empty?) ? filename=@name : filename=@name + "-" + @version
         | 
| 78 77 | 
             
                    end
         | 
| @@ -83,37 +82,62 @@ class Monitor | |
| 83 82 |  | 
| 84 83 | 
             
                    items << filename
         | 
| 85 84 | 
             
                  end
         | 
| 86 | 
            -
             | 
| 87 85 | 
             
                  file = items.join("/")
         | 
| 88 | 
            -
                   | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 86 | 
            +
                  delete_file(file)
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                def delete_file(file)
         | 
| 90 | 
            +
                  FileUtils.rm_rf(file)
         | 
| 91 | 
            +
                  Monitor::Log.new("Deleted   : " + file, 'INFO')
         | 
| 92 | 
            +
                  true
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
             
         | 
| 95 | 
            +
                def get_item_json(object)
         | 
| 96 | 
            +
                  begin
         | 
| 97 | 
            +
                    item = rest.get_rest(object)
         | 
| 98 | 
            +
                    result = JSON.pretty_generate(item)
         | 
| 99 | 
            +
                  rescue
         | 
| 100 | 
            +
                    return nil
         | 
| 93 101 | 
             
                  end
         | 
| 94 | 
            -
                  return  | 
| 102 | 
            +
                  return result
         | 
| 95 103 | 
             
                end
         | 
| 96 104 |  | 
| 97 105 | 
             
                def commit(path)
         | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 106 | 
            +
                  current_dir = Dir.pwd
         | 
| 107 | 
            +
                  commit_dir = File.join(path, @organization, @object)
         | 
| 108 | 
            +
                  Dir.chdir(commit_dir)
         | 
| 109 | 
            +
                  @version ? object = [@organization, @object, @name, @version].join('/') : object = [@organization, @object, @name].join('/')
         | 
| 110 | 
            +
                  text = "User     : " + @user + "\nObject   : " + object + "\nAction   : " + @action + "\nLog Time : " + @time
         | 
| 111 | 
            +
                  domain = %x(git config hooks.emaildomain) || "acme.com"
         | 
| 112 | 
            +
                  domain = "@" + domain unless domain[0,1] == "@"        
         | 
| 113 | 
            +
                  username = @user
         | 
| 114 | 
            +
                  useremail = @user + domain
         | 
| 115 | 
            +
                  %x(git config hooks.username #{username} )
         | 
| 116 | 
            +
                  %x(git config hooks.useremail #{useremail} )
         | 
| 117 | 
            +
                  %x(git add .)
         | 
| 118 | 
            +
                  %x(git commit -am \"#{text}\")
         | 
| 119 | 
            +
                  Dir.chdir(current_dir)
         | 
| 120 | 
            +
                end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                def commit_nohook(path)
         | 
| 123 | 
            +
                  current_dir = Dir.pwd
         | 
| 124 | 
            +
                  commit_dir = File.join(path, @organization, @object)
         | 
| 125 | 
            +
                  Dir.chdir(commit_dir)
         | 
| 126 | 
            +
                  %x(git config hooks.exclude true)
         | 
| 127 | 
            +
                  %x(git add .)
         | 
| 128 | 
            +
                  %x(git commit -am \"no hook executed on this commit\")
         | 
| 129 | 
            +
                  Dir.chdir(current_dir)
         | 
| 113 130 | 
             
                end
         | 
| 114 | 
            -
             | 
| 131 | 
            +
             | 
| 115 132 | 
             
                private
         | 
| 116 | 
            -
             | 
| 133 | 
            +
             | 
| 134 | 
            +
                def rest
         | 
| 135 | 
            +
                  @rest ||= begin
         | 
| 136 | 
            +
                    require 'chef/rest'
         | 
| 137 | 
            +
                    Chef::REST.new(Chef::Config[:chef_server_url])
         | 
| 138 | 
            +
                  end
         | 
| 139 | 
            +
                end
         | 
| 140 | 
            +
             | 
| 117 141 | 
             
                def download_cookbook(path)
         | 
| 118 142 | 
             
                  begin
         | 
| 119 143 | 
             
                    args = ['cookbook', 'download', @name ]
         | 
| @@ -133,26 +157,14 @@ class Monitor | |
| 133 157 | 
             
                end
         | 
| 134 158 |  | 
| 135 159 | 
             
                def download_object(path)
         | 
| 136 | 
            -
                   | 
| 137 | 
            -
                   | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
                      data = JSON.pretty_generate(Chef::Node.load(@name))
         | 
| 143 | 
            -
                    when 'environments'
         | 
| 144 | 
            -
                      data = JSON.pretty_generate(Chef::Environment.load(@name))
         | 
| 145 | 
            -
                    when 'clients'
         | 
| 146 | 
            -
                      data = JSON.pretty_generate(Chef::ApiClient.load(@name))
         | 
| 147 | 
            -
                    when 'data'
         | 
| 148 | 
            -
                      data = JSON.pretty_generate(Chef::DataBagItem.load(@name, @version))
         | 
| 149 | 
            -
                      file = File.join(path, @organization, @object, @name, @version + '.json' )
         | 
| 150 | 
            -
                    end
         | 
| 160 | 
            +
                  args = [ @object, @name ]
         | 
| 161 | 
            +
                  args.push(@version) if @version
         | 
| 162 | 
            +
                  item = args.join('/')
         | 
| 163 | 
            +
                  file = File.join(path, @organization, item + '.json' )
         | 
| 164 | 
            +
                  data = get_item_json(item)
         | 
| 165 | 
            +
                  unless data.nil?
         | 
| 151 166 | 
             
                    FileUtils.mkdir_p(File.dirname(file)) unless File.directory?(File.dirname(file))
         | 
| 152 167 | 
             
                    File.open(file, 'w') {|f| f.write(data)}
         | 
| 153 | 
            -
                    self.path = File.dirname(file)
         | 
| 154 | 
            -
                  rescue Exception => e
         | 
| 155 | 
            -
                    return e
         | 
| 156 168 | 
             
                  end
         | 
| 157 169 | 
             
                  return true
         | 
| 158 170 | 
             
                end
         | 
| @@ -16,7 +16,6 @@ | |
| 16 16 | 
             
            # limitations under the License.
         | 
| 17 17 |  | 
| 18 18 | 
             
            require 'chef/client'
         | 
| 19 | 
            -
            require 'chef_monitor/log'
         | 
| 20 19 | 
             
            require 'chef_monitor/item'
         | 
| 21 20 |  | 
| 22 21 | 
             
            class Monitor
         | 
| @@ -24,152 +23,90 @@ class Monitor | |
| 24 23 |  | 
| 25 24 | 
             
                def initialize(data)
         | 
| 26 25 | 
             
                  @name = data['name']
         | 
| 27 | 
            -
                  @time = data['time'] | 
| 28 | 
            -
                  @user = data['user'] | 
| 29 | 
            -
                  @object = data['object'] | 
| 30 | 
            -
                  @server = data['server'] | 
| 31 | 
            -
                  @action = data['action'] | 
| 26 | 
            +
                  @time = data['time']
         | 
| 27 | 
            +
                  @user = data['user']
         | 
| 28 | 
            +
                  @object = data['object']
         | 
| 29 | 
            +
                  @server = data['server']
         | 
| 30 | 
            +
                  @action = data['action']
         | 
| 32 31 | 
             
                  @version = data['version'] unless data['version'].nil? || data['version'].empty?
         | 
| 33 | 
            -
                  @organization = data['org'] | 
| 32 | 
            +
                  @organization = data['org']
         | 
| 33 | 
            +
                  check_sub_items()
         | 
| 34 34 | 
             
                end
         | 
| 35 35 |  | 
| 36 | 
            -
                 | 
| 37 | 
            -
             | 
| 38 | 
            -
                 | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
                   | 
| 48 | 
            -
             | 
| 49 | 
            -
                  list = []
         | 
| 50 | 
            -
                  items = []
         | 
| 51 | 
            -
                  if object.nil? || object.empty?
         | 
| 52 | 
            -
                    objects = [ "roles", "nodes", "environments", "clients", "cookbooks", "data" ]
         | 
| 36 | 
            +
                private
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                def check_sub_items()
         | 
| 39 | 
            +
                  if @object == "cookbooks" || @object == "data"
         | 
| 40 | 
            +
                    if @name.nil? || @name.empty?
         | 
| 41 | 
            +
                      add_sub_items(@object)
         | 
| 42 | 
            +
                    elsif @version.nil? || @version.empty?
         | 
| 43 | 
            +
                      add_sub_items(@object, @name)
         | 
| 44 | 
            +
                    else
         | 
| 45 | 
            +
                      add_item(@object, @name, @version)
         | 
| 46 | 
            +
                    end
         | 
| 47 | 
            +
                  elsif @name.nil? || @name.empty?
         | 
| 48 | 
            +
                    add_sub_items(@object)
         | 
| 53 49 | 
             
                  else
         | 
| 54 | 
            -
                     | 
| 50 | 
            +
                    add_item(@object, @name)
         | 
| 55 51 | 
             
                  end
         | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def add_sub_items(object, name=nil)
         | 
| 55 | 
            +
                  items = get_sub_items(object, name)
         | 
| 56 | 
            +
                  items.each do |item|
         | 
| 57 | 
            +
                    res = item.split('/')
         | 
| 58 | 
            +
                    add_item(res[0], res[1], res[2]) 
         | 
| 59 | 
            +
                  end      
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
              
         | 
| 62 | 
            +
                def get_sub_items(object, name=nil)
         | 
| 63 | 
            +
                  col = []
         | 
| 64 | 
            +
                  target = [ object, name ].join('/')
         | 
| 65 | 
            +
                  items = get_rest_item(target)
         | 
| 66 | 
            +
                  items.each do |item,value|
         | 
| 67 | 
            +
                    if object == "data" || object == "cookbooks"
         | 
| 68 | 
            +
                      if name.nil?
         | 
| 69 | 
            +
                        col += get_sub_items(object, item)
         | 
| 62 70 | 
             
                      else
         | 
| 63 | 
            -
                         | 
| 71 | 
            +
                        col.push([object, name, item].join('/')) if object == "data"
         | 
| 72 | 
            +
                        value['versions'].each {|ver| col << sub_item_parse(ver['url'])} if object == "cookbooks"
         | 
| 64 73 | 
             
                      end
         | 
| 74 | 
            +
                    elsif object == "users"
         | 
| 75 | 
            +
                      item.each { |k|  k.each {|sv| col << "users/" + sv['username'] unless sv['username'].nil? }} unless name
         | 
| 65 76 | 
             
                    else
         | 
| 66 | 
            -
                       | 
| 67 | 
            -
                        list += get_item(object)
         | 
| 68 | 
            -
                      else
         | 
| 69 | 
            -
                        return [ create_item(object, name) ]
         | 
| 70 | 
            -
                      end
         | 
| 77 | 
            +
                      col << sub_item_parse(value) unless name
         | 
| 71 78 | 
             
                    end
         | 
| 72 79 | 
             
                  end
         | 
| 80 | 
            +
                  return col
         | 
| 81 | 
            +
                end
         | 
| 73 82 |  | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
                  end      
         | 
| 78 | 
            -
                  return items
         | 
| 83 | 
            +
                def sub_item_parse(str)
         | 
| 84 | 
            +
                  str.gsub!(Chef::Config[:chef_server_url],"")
         | 
| 85 | 
            +
                  str[1..-1] if str[0] == '/'
         | 
| 79 86 | 
             
                end
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                def  | 
| 82 | 
            -
                   | 
| 83 | 
            -
             | 
| 84 | 
            -
                   | 
| 85 | 
            -
                     | 
| 86 | 
            -
                    names << url[6] 
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                def get_rest_item(target)
         | 
| 89 | 
            +
                  begin
         | 
| 90 | 
            +
                    result = rest.get_rest(target)
         | 
| 91 | 
            +
                  rescue 
         | 
| 92 | 
            +
                    return []
         | 
| 87 93 | 
             
                  end
         | 
| 88 | 
            -
                  return  | 
| 89 | 
            -
             | 
| 94 | 
            +
                  return result    
         | 
| 95 | 
            +
                 end
         | 
| 90 96 |  | 
| 91 | 
            -
                def  | 
| 97 | 
            +
                def add_item(object, name, version=nil)
         | 
| 92 98 | 
             
                  data = {}
         | 
| 93 99 | 
             
                  data['time'] = @time
         | 
| 94 100 | 
             
                  data['user'] = @user
         | 
| 95 101 | 
             
                  data['action'] = @action
         | 
| 96 102 | 
             
                  data['server'] = @server
         | 
| 97 103 | 
             
                  data['org'] = @organization
         | 
| 98 | 
            -
                  data['name'] = name
         | 
| 99 104 | 
             
                  data['object'] = object
         | 
| 105 | 
            +
                  data['name'] = name
         | 
| 100 106 | 
             
                  data['version'] = version unless version.nil?
         | 
| 101 | 
            -
                  Monitor::Item.new(data)
         | 
| 107 | 
            +
                  self << Monitor::Item.new(data)
         | 
| 102 108 | 
             
                end
         | 
| 103 109 |  | 
| 104 | 
            -
                def parse_data(object, data)
         | 
| 105 | 
            -
                  data = JSON[data].to_hash unless data.class == Hash
         | 
| 106 | 
            -
                  items = []
         | 
| 107 | 
            -
                  data.each do |key,val|
         | 
| 108 | 
            -
                    item = {}
         | 
| 109 | 
            -
                    item['object'] = object
         | 
| 110 | 
            -
                    item['url'] = val 
         | 
| 111 | 
            -
                    items << item
         | 
| 112 | 
            -
                  end
         | 
| 113 | 
            -
                  items
         | 
| 114 | 
            -
                end
         | 
| 115 | 
            -
              
         | 
| 116 | 
            -
                def get_item(object=nil, name=nil)
         | 
| 117 | 
            -
                  objects = []
         | 
| 118 | 
            -
                  begin
         | 
| 119 | 
            -
                    case object
         | 
| 120 | 
            -
                    when 'roles'
         | 
| 121 | 
            -
                      json = JSON[Chef::Role.list]
         | 
| 122 | 
            -
                      objects = parse_data("role", json)
         | 
| 123 | 
            -
                    when 'nodes'
         | 
| 124 | 
            -
                      json = JSON[Chef::Node.list]
         | 
| 125 | 
            -
                      objects = parse_data("node", json)
         | 
| 126 | 
            -
                    when 'environments'
         | 
| 127 | 
            -
                      json = JSON[Chef::Environment.list]
         | 
| 128 | 
            -
                      objects = parse_data("environment", json)
         | 
| 129 | 
            -
                    when 'clients'
         | 
| 130 | 
            -
                      json = JSON[Chef::ApiClient.list]
         | 
| 131 | 
            -
                      objects = parse_data("client", json)
         | 
| 132 | 
            -
                    when 'data'
         | 
| 133 | 
            -
                      if name
         | 
| 134 | 
            -
                        json = JSON[Chef::DataBag.load(name)]
         | 
| 135 | 
            -
                        items = JSON[json].to_hash
         | 
| 136 | 
            -
                        items.each do |key,val|
         | 
| 137 | 
            -
                          item = {}
         | 
| 138 | 
            -
                          item['object'] = 'data_bag'
         | 
| 139 | 
            -
                          item['url'] = val
         | 
| 140 | 
            -
                          objects << item
         | 
| 141 | 
            -
                        end
         | 
| 142 | 
            -
                      else
         | 
| 143 | 
            -
                        json = JSON[Chef::DataBag.list]
         | 
| 144 | 
            -
                        items = JSON[json].to_hash
         | 
| 145 | 
            -
                        items.each do |key,val|
         | 
| 146 | 
            -
                          objects += get_item(object, key)
         | 
| 147 | 
            -
                        end
         | 
| 148 | 
            -
                      end
         | 
| 149 | 
            -
                    when 'cookbooks'
         | 
| 150 | 
            -
                      json = JSON[rest.get_rest("/cookbooks?num_versions=all")]
         | 
| 151 | 
            -
                      items = JSON[json].to_hash
         | 
| 152 | 
            -
                      items.each do |key,val|
         | 
| 153 | 
            -
                        val['versions'].each do |version|
         | 
| 154 | 
            -
                          item = {}
         | 
| 155 | 
            -
                          item['object'] = 'cookbook'
         | 
| 156 | 
            -
                          item['url'] = version['url']
         | 
| 157 | 
            -
                          objects << item
         | 
| 158 | 
            -
                        end
         | 
| 159 | 
            -
                      end
         | 
| 160 | 
            -
                    end
         | 
| 161 | 
            -
                  rescue Exception => e
         | 
| 162 | 
            -
                    @version ? object = [@organization, @object, @name, @version].join('/') : object = [@organization, @object, @name].join('/')
         | 
| 163 | 
            -
                    if e.respond_to?("message")
         | 
| 164 | 
            -
                      Monitor::Log.new(e.message + ' with object: ' + object , 'ERROR')
         | 
| 165 | 
            -
                    else
         | 
| 166 | 
            -
                      Monitor::Log.new('Error while downloading object: ' + object , 'ERROR')
         | 
| 167 | 
            -
                    end
         | 
| 168 | 
            -
                    return []
         | 
| 169 | 
            -
                  end
         | 
| 170 | 
            -
                  return objects
         | 
| 171 | 
            -
                end
         | 
| 172 | 
            -
             
         | 
| 173 110 | 
             
                def rest
         | 
| 174 111 | 
             
                  @rest ||= begin
         | 
| 175 112 | 
             
                    require 'chef/rest'
         | 
    
        data/lib/chef_monitor/log.rb
    CHANGED
    
    | @@ -17,7 +17,7 @@ | |
| 17 17 |  | 
| 18 18 | 
             
            class Monitor
         | 
| 19 19 | 
             
              class Log
         | 
| 20 | 
            -
             | 
| 20 | 
            +
                
         | 
| 21 21 | 
             
                def initialize(text, type='INFO')
         | 
| 22 22 | 
             
                  case type.downcase
         | 
| 23 23 | 
             
                  when "INFO".downcase
         | 
| @@ -26,6 +26,8 @@ class Monitor | |
| 26 26 | 
             
                    puts "[" + Time.now.iso8601 + "] WARN: " + text
         | 
| 27 27 | 
             
                  when "ERROR".downcase
         | 
| 28 28 | 
             
                    puts "[" + Time.now.iso8601 + "] ERROR: " + text
         | 
| 29 | 
            +
                  when "DEBUG".downcase
         | 
| 30 | 
            +
                    puts "[" + Time.now.iso8601 + "] DEBUG: " + text if DEBUG
         | 
| 29 31 | 
             
                  else
         | 
| 30 32 | 
             
                    puts "[" + Time.now.iso8601 + "] UNKNOWN: " + text
         | 
| 31 33 | 
             
                  end
         | 
    
        data/lib/chef_monitor/version.rb
    CHANGED
    
    
    
        data/lib/chef_monitor/worker.rb
    CHANGED
    
    | @@ -15,9 +15,9 @@ | |
| 15 15 | 
             
            # See the License for the specific language governing permissions and
         | 
| 16 16 | 
             
            # limitations under the License.
         | 
| 17 17 |  | 
| 18 | 
            +
             | 
| 18 19 | 
             
            class Monitor
         | 
| 19 20 | 
             
              class Worker
         | 
| 20 | 
            -
             
         | 
| 21 21 | 
             
                def run
         | 
| 22 22 | 
             
                  conn = Bunny.new(:hostname => MQSERVER)
         | 
| 23 23 | 
             
                  conn.start
         | 
| @@ -30,37 +30,32 @@ class Monitor | |
| 30 30 | 
             
                    q.subscribe(:ack => true, :block => true) do |delivery_info, properties, body|
         | 
| 31 31 | 
             
                      if properties[:content_type] =~ /.*json/
         | 
| 32 32 | 
             
                        data = JSON.parse(body).to_hash
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                         | 
| 35 | 
            -
             | 
| 36 | 
            -
                        elsif data['name'].nil? || data['name'].empty?
         | 
| 37 | 
            -
                          log_obj = [ data['org'], data['object'] ].join('/')
         | 
| 38 | 
            -
                        elsif data['version'].nil? || data['version'].empty?
         | 
| 39 | 
            -
                          log_obj = [ data['org'], data['object'], data['name'] ].join('/')
         | 
| 40 | 
            -
                        else
         | 
| 41 | 
            -
                          log_obj = [ data['org'], data['object'], data['name'], data['version'] ].join('/')
         | 
| 42 | 
            -
                        end
         | 
| 43 | 
            -
                        Monitor::Log.new("Receiving : #{log_obj} action: #{data['action']}", "INFO")
         | 
| 44 | 
            -
                
         | 
| 33 | 
            +
                        Monitor::Log.new("Receiving : #{data}", "DEBUG") 
         | 
| 34 | 
            +
                        data['object'] = nil unless ALLOWED_OBJECTS.include?(data['object'])
         | 
| 35 | 
            +
             | 
| 45 36 | 
             
                        unless data['object'].nil? || !File.directory?((File.join(DOWNLOAD_PATH, data['org'])))
         | 
| 46 37 | 
             
                          Chef::Config[:chef_server_url] = CHEF_URL + "/organizations/#{data['org']}"
         | 
| 47 38 |  | 
| 48 | 
            -
                          Monitor::Item.new(data) | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
                           | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
                             | 
| 55 | 
            -
                              if  | 
| 56 | 
            -
                                item. | 
| 57 | 
            -
                               | 
| 58 | 
            -
             | 
| 39 | 
            +
                          obj = Monitor::Item.new(data)
         | 
| 40 | 
            +
                          if data['action'] == "DELETE"
         | 
| 41 | 
            +
                            obj.delete(DOWNLOAD_PATH)
         | 
| 42 | 
            +
                          else
         | 
| 43 | 
            +
                            items = Monitor::ItemList.new(data)              
         | 
| 44 | 
            +
             
         | 
| 45 | 
            +
                            items.each do |item|
         | 
| 46 | 
            +
                              if data['action'] == "PUT"
         | 
| 47 | 
            +
                                item.download(DOWNLOAD_PATH)
         | 
| 48 | 
            +
                              end
         | 
| 49 | 
            +
                           
         | 
| 50 | 
            +
                              if data['action'] == "POST"
         | 
| 51 | 
            +
                                item.delete(DOWNLOAD_PATH)
         | 
| 52 | 
            +
                                item.download(DOWNLOAD_PATH)
         | 
| 59 53 | 
             
                              end
         | 
| 60 54 | 
             
                            end
         | 
| 61 55 | 
             
                          end
         | 
| 56 | 
            +
                          obj.commit(DOWNLOAD_PATH)
         | 
| 62 57 | 
             
                        else
         | 
| 63 | 
            -
                          Monitor::Log.new("Ignoring  : #{ | 
| 58 | 
            +
                          Monitor::Log.new("Ignoring  : #{data}", "DEBUG")
         | 
| 64 59 | 
             
                        end
         | 
| 65 60 | 
             
                      else
         | 
| 66 61 | 
             
                        Monitor::Log.new("Unknown   : #{body}", "ERROR")
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: chef-monitor
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.2
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2014-02- | 
| 12 | 
            +
            date: 2014-02-07 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: bunny
         | 
| @@ -92,7 +92,7 @@ files: | |
| 92 92 | 
             
            - bin/chef-logmon
         | 
| 93 93 | 
             
            - bin/chef-worker
         | 
| 94 94 | 
             
            - chef-monitor.gemspec
         | 
| 95 | 
            -
            - lib/ | 
| 95 | 
            +
            - lib/chef_logmon.rb
         | 
| 96 96 | 
             
            - lib/chef_monitor/config.rb
         | 
| 97 97 | 
             
            - lib/chef_monitor/item.rb
         | 
| 98 98 | 
             
            - lib/chef_monitor/itemlist.rb
         | 
| @@ -100,6 +100,7 @@ files: | |
| 100 100 | 
             
            - lib/chef_monitor/logmon.rb
         | 
| 101 101 | 
             
            - lib/chef_monitor/version.rb
         | 
| 102 102 | 
             
            - lib/chef_monitor/worker.rb
         | 
| 103 | 
            +
            - lib/chef_worker.rb
         | 
| 103 104 | 
             
            homepage: https://github.com/schubergphilis/chef-monitor
         | 
| 104 105 | 
             
            licenses:
         | 
| 105 106 | 
             
            - Apache 2.0
         |