scribeit 0.0.3

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.
@@ -0,0 +1,3 @@
1
+ v0.0.3 Push to public rubygems
2
+ v0.0.2 Handle directories filled with config
3
+ v0.0.1 First release
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ # A sample Gemfile
2
+ source "http://rubygems.org"
3
+
4
+ gemspec
@@ -0,0 +1,27 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ scribeit (0.0.3)
5
+ eventmachine
6
+ eventmachine-tail
7
+ scribe (> 0.2.2)
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ eventmachine (0.12.10)
13
+ eventmachine-tail (0.6.1)
14
+ eventmachine
15
+ rake (0.8.7)
16
+ scribe (0.2.4)
17
+ rake
18
+ thrift_client (~> 0.6)
19
+ thrift (0.5.0)
20
+ thrift_client (0.6.0)
21
+ thrift (~> 0.5.0)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ scribeit!
@@ -0,0 +1,11 @@
1
+ CHANGELOG
2
+ Gemfile
3
+ Gemfile.lock
4
+ README.md
5
+ Rakefile
6
+ bin/scribeit
7
+ lib/scribeit.rb
8
+ lib/scribeit/log.rb
9
+ lib/scribeit/source.rb
10
+ scribeit.gemspec
11
+ Manifest
@@ -0,0 +1,3 @@
1
+ # ScribeIt
2
+
3
+ ScribeIt is a configurable logging system that pushes to a local scribe server.
@@ -0,0 +1,15 @@
1
+ begin
2
+ require 'rubygems'
3
+ require 'echoe'
4
+
5
+ Echoe.new("scribeit") do |p|
6
+ p.author = "Thom May"
7
+ p.email = "thom@may.lt"
8
+ p.url = "https://github.com/thommay/scribeit"
9
+ p.summary = "A configurable scribe client"
10
+ p.runtime_dependencies = ['scribe >0.2.2', "eventmachine", "eventmachine-tail"]
11
+ p.rdoc_pattern = /^(lib|bin|tasks|ext)|^README|^CHANGELOG|^TODO|^LICENSE|^COPYING$/
12
+ end
13
+ rescue LoadError
14
+ end
15
+
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $: << File.dirname($0) + '/../lib'
4
+
5
+ require 'rubygems'
6
+ require 'eventmachine'
7
+ require 'yaml'
8
+ require 'optparse'
9
+ require 'scribe'
10
+ require 'scribeit'
11
+
12
+ conf = '/etc/scribeit.conf'
13
+
14
+ opts = OptionParser.new do |opts|
15
+ opts.banner = "Usage: #{$0} [options]"
16
+
17
+ opts.on("-f CONFIGFILE", "--config CONFIGFILE", "Load scribeit's config from the specified file") do |arg|
18
+ conf = arg
19
+ end
20
+ end
21
+
22
+ opts.parse!
23
+ if conf == '' or conf.nil?
24
+ raise "No config file given"
25
+ end
26
+
27
+ if !File.exist? conf
28
+ $stderr.puts "Config file #{conf} does not exist!"
29
+ exit 1
30
+ end
31
+
32
+ begin
33
+ config = YAML::load_file(conf)
34
+ if config["dirs"]
35
+ config["dirs"].each do |dir|
36
+ Dir.glob("#{dir}/*.yml") do |fn|
37
+ config.merge!(YAML::load_file(fn)) do |k,r1,r2|
38
+ r1.merge(r2) do |k,r1,r2|
39
+ if r1.respond_to? "merge"
40
+ r1.merge r2
41
+ else
42
+ r1 + r2 if r1.is_a? Array
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ rescue => e
50
+ $stderr.puts "Loading config file #{conf} failed: #{e}"
51
+ exit 1
52
+ end
53
+
54
+ scr = ScribeIt.new(config)
55
+ scr.run
@@ -0,0 +1,88 @@
1
+ require 'eventmachine'
2
+ require 'eventmachine-tail'
3
+ require 'scribe'
4
+ require 'scribeit/source'
5
+ require 'scribeit/log'
6
+
7
+ class ScribeIt
8
+
9
+ attr_reader :config
10
+ attr_reader :sources
11
+
12
+ def initialize(config)
13
+ @config = config
14
+ @sources = []
15
+ @scribe = Scribe.new
16
+ @logger = ScribeIt::Log.new STDERR
17
+ end
18
+
19
+ def register
20
+ if !@config.has_key? "sources"
21
+ raise "Config error - no sources defined"
22
+ end
23
+
24
+ sources = @config["sources"]
25
+ sources.each do |source|
26
+ puts source.inspect
27
+ if source.is_a? Array or source.is_a? Hash
28
+ cat, files = source
29
+ else
30
+ raise "Config error - no category for file: #{files.inspect}"
31
+ end
32
+
33
+ files = [files] if !files.is_a? Array
34
+
35
+ files.each do |f|
36
+ @logger.debug("Adding new source #{f} to category #{cat}")
37
+ s = ScribeIt::Source.new(f, cat) { |event| fire(event) }
38
+ s.register
39
+ @sources << s
40
+ end
41
+ end
42
+
43
+ register_signal_handler
44
+ end
45
+
46
+ def run(&block)
47
+ EventMachine.epoll
48
+ EventMachine.run do
49
+ self.register
50
+ yield if block_given?
51
+ end
52
+ end
53
+
54
+ def stop
55
+ EventMachine.stop_event_loop
56
+ end
57
+
58
+ def register_signal_handler
59
+ @signals = EventMachine::Channel.new
60
+
61
+ Signal.trap("INT") do
62
+ @signals.push(:INT)
63
+ end
64
+
65
+ Signal.trap("USR1") do
66
+ @signals.push(:USR1)
67
+ end
68
+
69
+ @signals.subscribe do |msg|
70
+ case msg
71
+ when :USR1
72
+ #eventually, we want to reload our config.
73
+ # for now, we'll just show what we're looking at.
74
+ puts @sources
75
+ when :INT
76
+ EventMachine.stop_event_loop
77
+ end
78
+ end
79
+ end
80
+
81
+ protected
82
+
83
+ def fire(event)
84
+ @logger.debug("Firing a new event at scribe for #{event.inspect}")
85
+ @scribe.log(event[:event], event[:category])
86
+ end
87
+
88
+ end
@@ -0,0 +1,19 @@
1
+ require 'logger'
2
+
3
+ class ScribeIt
4
+ class Log < Logger
5
+ attr_reader :level
6
+
7
+ def initialize(name)
8
+ super(name)
9
+ @level = $DEBUG ? Logger::DEBUG : Logger::INFO
10
+ end
11
+
12
+ def level=(level)
13
+ super(level)
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+
@@ -0,0 +1,37 @@
1
+ class ScribeIt
2
+ class Source
3
+ def initialize(file, category, &block)
4
+ @logger = ScribeIt::Log.new STDERR
5
+ @file = file
6
+ @callback = block
7
+ @category = category
8
+ end
9
+
10
+ def register
11
+ @logger.info "Registering #{@file}"
12
+ EventMachine::FileGlobWatchTail.new(@file, Reader, interval=60, exclude=[], receiver=self)
13
+ end
14
+
15
+ def receive(filetail, event)
16
+ @logger.debug "File #{@file} got event: #{event.inspect}"
17
+ e = {:event => event, :category => @category}
18
+ @callback.call e
19
+ end
20
+
21
+ private
22
+ class Reader < EventMachine::FileTail
23
+ def initialize(path, receiver)
24
+ super path
25
+ @receiver = receiver
26
+ @buffer = BufferedTokenizer.new
27
+ end
28
+
29
+ def receive_data(data)
30
+ @buffer.extract(data).each do |line|
31
+ @receiver.receive(self, line)
32
+ end
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,40 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{scribeit}
5
+ s.version = "0.0.3"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Thom May"]
9
+ s.date = %q{2011-05-09}
10
+ s.default_executable = %q{scribeit}
11
+ s.description = %q{A configurable scribe client}
12
+ s.email = %q{thom@may.lt}
13
+ s.executables = ["scribeit"]
14
+ s.extra_rdoc_files = ["CHANGELOG", "README.md", "bin/scribeit", "lib/scribeit.rb", "lib/scribeit/log.rb", "lib/scribeit/source.rb"]
15
+ s.files = ["CHANGELOG", "Gemfile", "Gemfile.lock", "README.md", "Rakefile", "bin/scribeit", "lib/scribeit.rb", "lib/scribeit/log.rb", "lib/scribeit/source.rb", "scribeit.gemspec", "Manifest"]
16
+ s.homepage = %q{https://github.com/thommay/scribeit}
17
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Scribeit", "--main", "README.md"]
18
+ s.require_paths = ["lib"]
19
+ s.rubyforge_project = %q{scribeit}
20
+ s.rubygems_version = %q{1.6.0}
21
+ s.summary = %q{A configurable scribe client}
22
+
23
+ if s.respond_to? :specification_version then
24
+ s.specification_version = 3
25
+
26
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
+ s.add_runtime_dependency(%q<scribe>, ["> 0.2.2"])
28
+ s.add_runtime_dependency(%q<eventmachine>, [">= 0"])
29
+ s.add_runtime_dependency(%q<eventmachine-tail>, [">= 0"])
30
+ else
31
+ s.add_dependency(%q<scribe>, ["> 0.2.2"])
32
+ s.add_dependency(%q<eventmachine>, [">= 0"])
33
+ s.add_dependency(%q<eventmachine-tail>, [">= 0"])
34
+ end
35
+ else
36
+ s.add_dependency(%q<scribe>, ["> 0.2.2"])
37
+ s.add_dependency(%q<eventmachine>, [">= 0"])
38
+ s.add_dependency(%q<eventmachine-tail>, [">= 0"])
39
+ end
40
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: scribeit
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.3
6
+ platform: ruby
7
+ authors:
8
+ - Thom May
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-05-09 00:00:00 +01:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: scribe
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">"
23
+ - !ruby/object:Gem::Version
24
+ version: 0.2.2
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: eventmachine
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: eventmachine-tail
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id003
49
+ description: A configurable scribe client
50
+ email: thom@may.lt
51
+ executables:
52
+ - scribeit
53
+ extensions: []
54
+
55
+ extra_rdoc_files:
56
+ - CHANGELOG
57
+ - README.md
58
+ - bin/scribeit
59
+ - lib/scribeit.rb
60
+ - lib/scribeit/log.rb
61
+ - lib/scribeit/source.rb
62
+ files:
63
+ - CHANGELOG
64
+ - Gemfile
65
+ - Gemfile.lock
66
+ - README.md
67
+ - Rakefile
68
+ - bin/scribeit
69
+ - lib/scribeit.rb
70
+ - lib/scribeit/log.rb
71
+ - lib/scribeit/source.rb
72
+ - scribeit.gemspec
73
+ - Manifest
74
+ has_rdoc: true
75
+ homepage: https://github.com/thommay/scribeit
76
+ licenses: []
77
+
78
+ post_install_message:
79
+ rdoc_options:
80
+ - --line-numbers
81
+ - --inline-source
82
+ - --title
83
+ - Scribeit
84
+ - --main
85
+ - README.md
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: "0"
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: "1.2"
100
+ requirements: []
101
+
102
+ rubyforge_project: scribeit
103
+ rubygems_version: 1.6.0
104
+ signing_key:
105
+ specification_version: 3
106
+ summary: A configurable scribe client
107
+ test_files: []
108
+