miu 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -16,4 +16,7 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  vendor
19
- db/*.db*
19
+ db
20
+ log
21
+ config
22
+
data/bin/miu CHANGED
@@ -1,6 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
  # -*- encoding: utf-8 -*-
3
3
  require 'miu/cli'
4
- require 'miu/store/cli'
5
-
6
4
  Miu::CLI.start
data/lib/miu/cli.rb CHANGED
@@ -2,12 +2,58 @@ require 'thor'
2
2
  require 'miu'
3
3
 
4
4
  module Miu
5
- class CLI < Thor
5
+ class CLI < ::Thor
6
+ include ::Thor::Actions
7
+ add_runtime_options!
8
+
6
9
  map ['--version', '-v'] => :version
7
10
 
8
11
  desc 'version', 'Show version'
9
12
  def version
10
13
  say "Miu #{Miu::VERSION}"
11
14
  end
15
+
16
+ desc 'list', 'Lists plugins'
17
+ def list
18
+ table = Miu.plugins.map { |k, v| [k, "# #{v}" ] }
19
+
20
+ say 'Plugins:'
21
+ print_table table, :indent => 2, :truncate => true
22
+ say
23
+ end
24
+
25
+ desc 'init', 'Generates a miu configuration files'
26
+ def init
27
+ empty_directory 'config'
28
+ empty_directory 'log'
29
+ empty_directory 'tmp/pids'
30
+
31
+ create_file 'config/miu.god', <<-CONF
32
+ # vim: ft=ruby
33
+ require 'miu'
34
+
35
+ God.port = 30300
36
+ God.pid_file_directory = Miu.root.join('tmp/pids')
37
+
38
+ God.watch do |w|
39
+ w.dir = Miu.root
40
+ w.log = Miu.root.join('log/fluentd.log')
41
+ w.name = 'fluentd'
42
+ w.start = 'bundle exec fluentd -c config/fluent.conf'
43
+ w.keepalive
44
+ end
45
+ CONF
46
+ create_file 'config/fluent.conf', <<-CONF
47
+ # built-in TCP input
48
+ # $ echo <json> | fluent-cat <tag>
49
+ <source>
50
+ type forward
51
+ </source>
52
+ CONF
53
+ end
12
54
  end
13
55
  end
56
+
57
+ # load built-in plugins
58
+ require 'miu/plugins'
59
+
data/lib/miu/plugin.rb ADDED
@@ -0,0 +1,16 @@
1
+ require 'miu'
2
+
3
+ module Miu
4
+ module Plugin
5
+ def self.included(base)
6
+ base.extend ClassMethods
7
+ end
8
+
9
+ module ClassMethods
10
+ def register(*args, &block)
11
+ args.insert 1, self.class
12
+ Miu.register *args, &block
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,57 @@
1
+ require 'miu/plugin'
2
+
3
+ module Miu
4
+ module Plugins
5
+ class Null
6
+ include Miu::Plugin
7
+
8
+ class Handler
9
+ def log(tag, time, record)
10
+ end
11
+ end
12
+
13
+ def initialize(options)
14
+ require 'msgpack/rpc'
15
+ @server = MessagePack::RPC::Server.new
16
+ @server.listen options[:host], options[:port], Handler.new
17
+
18
+ [:TERM, :INT].each do |sig|
19
+ Signal.trap(sig) { @server.stop }
20
+ end
21
+
22
+ @server.run
23
+ end
24
+
25
+ register :null, :desc => 'Null plugin' do
26
+ desc 'start', 'start null'
27
+ option :bind, :type => :string, :default => '0.0.0.0', :desc => 'bind address', :aliases => '-a'
28
+ option :port, :type => :numeric, :default => 30301, :desc => 'listen port', :aliases => '-p'
29
+ def start
30
+ Null.new options
31
+ end
32
+
33
+ desc 'init', 'init null config'
34
+ def init
35
+ append_to_file 'config/miu.god', <<-CONF
36
+
37
+ God.watch do |w|
38
+ w.dir = Miu.root
39
+ w.log = Miu.root.join('log', 'null.log')
40
+ w.name = 'null'
41
+ w.start = 'bundle exec miu null start'
42
+ end
43
+ CONF
44
+ append_to_file 'config/fluent.conf', <<-CONF
45
+
46
+ # miu null output plugin
47
+ <match miu.output.null>
48
+ type msgpack_rpc
49
+ host localhost
50
+ port 30301
51
+ </match>
52
+ CONF
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,2 @@
1
+ require 'miu/plugins/null'
2
+
data/lib/miu/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Miu
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/miu.rb CHANGED
@@ -1,11 +1,48 @@
1
1
  require 'miu/version'
2
- require 'miu/store'
3
- require 'pathname'
4
2
 
5
3
  module Miu
4
+ autoload :CLI, 'miu/cli'
5
+
6
6
  class << self
7
7
  def root
8
+ require 'pathname'
8
9
  Pathname.new(File.expand_path('../../', __FILE__))
9
10
  end
11
+
12
+ def plugins
13
+ @plugins ||= {}
14
+ end
15
+
16
+ def register(name, type, options = {}, &block)
17
+ name = name.to_s
18
+ usage = options[:usage] || "#{name} [COMMAND]"
19
+ desc = options[:desc] || type.to_s
20
+
21
+ plugins[name] = type
22
+ Miu::CLI.register generate_subcommand(name, &block), name, usage, desc if block
23
+ end
24
+
25
+ private
26
+
27
+ def generate_subcommand(name, &block)
28
+ require 'thor'
29
+ Class.new ::Thor do
30
+ include ::Thor::Actions
31
+ add_runtime_options!
32
+
33
+ class << self
34
+ def source_root
35
+ Miu.root.to_s
36
+ end
37
+
38
+ def banner(task, namespace = nil, subcommand = true)
39
+ super
40
+ end
41
+ end
42
+
43
+ namespace name
44
+ class_eval &block if block
45
+ end
46
+ end
10
47
  end
11
48
  end
data/miu.gemspec CHANGED
@@ -18,9 +18,8 @@ Gem::Specification.new do |gem|
18
18
  gem.require_paths = ["lib"]
19
19
 
20
20
  gem.add_dependency 'thor'
21
- gem.add_dependency 'foreman'
21
+ gem.add_dependency 'god'
22
22
  gem.add_dependency 'fluentd'
23
- gem.add_dependency 'msgpack'
24
23
  gem.add_dependency 'msgpack-rpc'
25
24
 
26
25
  gem.add_development_dependency 'rake'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.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: 2013-02-19 00:00:00.000000000 Z
12
+ date: 2013-02-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
@@ -28,7 +28,7 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
- name: foreman
31
+ name: god
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
@@ -59,22 +59,6 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: msgpack
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :runtime
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
62
  - !ruby/object:Gem::Dependency
79
63
  name: msgpack-rpc
80
64
  requirement: !ruby/object:Gem::Requirement
@@ -118,19 +102,14 @@ files:
118
102
  - .gitignore
119
103
  - Gemfile
120
104
  - LICENSE.txt
121
- - Procfile
122
105
  - README.md
123
106
  - Rakefile
124
107
  - bin/miu
125
- - config/fluent.conf
126
- - config/store.rb
127
- - db/.gitkeep
128
108
  - lib/miu.rb
129
109
  - lib/miu/cli.rb
130
- - lib/miu/store.rb
131
- - lib/miu/store/cli.rb
132
- - lib/miu/store/strategies/null.rb
133
- - lib/miu/store/strategy.rb
110
+ - lib/miu/plugin.rb
111
+ - lib/miu/plugins.rb
112
+ - lib/miu/plugins/null.rb
134
113
  - lib/miu/version.rb
135
114
  - miu.gemspec
136
115
  homepage: ''
@@ -147,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
147
126
  version: '0'
148
127
  segments:
149
128
  - 0
150
- hash: 1422047492336437771
129
+ hash: -1753892730624338277
151
130
  required_rubygems_version: !ruby/object:Gem::Requirement
152
131
  none: false
153
132
  requirements:
@@ -156,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
135
  version: '0'
157
136
  segments:
158
137
  - 0
159
- hash: 1422047492336437771
138
+ hash: -1753892730624338277
160
139
  requirements: []
161
140
  rubyforge_project:
162
141
  rubygems_version: 1.8.24
data/Procfile DELETED
@@ -1,3 +0,0 @@
1
- store: bundle exec bin/miu store
2
- fluentd: bundle exec fluentd -c config/fluent.conf
3
-
data/config/fluent.conf DELETED
@@ -1,84 +0,0 @@
1
-
2
- ## built-in TCP input
3
- ## $ echo <json> | fluent-cat <tag>
4
- <source>
5
- type forward
6
- </source>
7
-
8
- ## built-in UNIX socket input
9
- #<source>
10
- # type unix
11
- #</source>
12
-
13
- # HTTP input
14
- # http://localhost:8888/<tag>?json=<json>
15
- <source>
16
- type http
17
- port 8888
18
- </source>
19
-
20
- ## File input
21
- ## read apache logs with tag=apache.access
22
- #<source>
23
- # type tail
24
- # format apache
25
- # path /var/log/httpd-access.log
26
- # tag apache.access
27
- #</source>
28
-
29
- # Listen DRb for debug
30
- <source>
31
- type debug_agent
32
- port 24230
33
- </source>
34
-
35
-
36
- ## match tag=apache.access and write to file
37
- #<match apache.access>
38
- # type file
39
- # path /var/log/fluent/access
40
- #</match>
41
-
42
- ## match tag=debug.** and dump to console
43
- <match debug.**>
44
- type stdout
45
- </match>
46
-
47
- ## match tag=system.** and forward to another fluent server
48
- #<match system.**>
49
- # type forward
50
- # host 192.168.0.11
51
- # <secondary>
52
- # host 192.168.0.12
53
- # </secondary>
54
- #</match>
55
-
56
- ## match tag=myapp.** and forward and write to file
57
- #<match myapp.**>
58
- # type copy
59
- # <store>
60
- # type forward
61
- # host 192.168.0.13
62
- # buffer_type file
63
- # buffer_path /var/log/fluent/myapp-forward
64
- # retry_limit 50
65
- # flush_interval 10s
66
- # </store>
67
- # <store>
68
- # type file
69
- # path /var/log/fluent/myapp
70
- # </store>
71
- #</match>
72
-
73
- ## match fluent's internal events
74
- #<match fluent.**>
75
- # type null
76
- #</match>
77
-
78
- ## match not matched logs and write to file
79
- #<match **>
80
- # type file
81
- # path /var/log/fluent/else
82
- # compress gz
83
- #</match>
84
-
data/config/store.rb DELETED
@@ -1,3 +0,0 @@
1
- # options.database = '0.0.0.0'
2
- # options.port = 30301
3
-
data/db/.gitkeep DELETED
File without changes
data/lib/miu/store/cli.rb DELETED
@@ -1,32 +0,0 @@
1
- require 'miu'
2
- require 'miu/store'
3
- require 'miu/cli'
4
-
5
- module Miu
6
- module Store
7
- class CLI < Thor
8
- include Thor::Actions
9
-
10
- namespace :store
11
-
12
- class << self
13
- def source_root
14
- Miu.root
15
- end
16
- end
17
-
18
- desc 'start', 'Start miu store'
19
- option :config, :type => :string, :desc => 'config file', :aliases => '-c'
20
- option :address, :type => :string, :default => '0.0.0.0', :desc => 'bind address', :aliases => '-a'
21
- option :port, :type => :numeric, :default => 30301, :desc => 'listen port', :aliases => '-p'
22
- option :type, :type => :string, :default => 'groonga', :desc => 'store type', :aliases => '-t'
23
- option :database, :type => :string, :default => 'db/miu.db', :desc => 'database'
24
- def start
25
- apply options[:config] if options[:config]
26
- Miu::Store.start options
27
- end
28
- end
29
- end
30
-
31
- Miu::CLI.register Miu::Store::CLI, 'store', 'store [COMMAND]', 'Miu store'
32
- end
@@ -1,16 +0,0 @@
1
- require 'miu/store/strategy'
2
-
3
- module Miu
4
- module Store
5
- module Strategies
6
- class Null
7
- include Miu::Store::Strategy
8
-
9
- def log(tag, time, record)
10
- end
11
- end
12
- end
13
-
14
- register :null, Strategies::Null
15
- end
16
- end
@@ -1,18 +0,0 @@
1
- require 'miu/store'
2
-
3
- module Miu
4
- module Store
5
- module Strategy
6
- def self.included(base)
7
- base.extend ClassMethods
8
- end
9
-
10
- module ClassMethods
11
- end
12
-
13
- def log(tag, time, record)
14
- raise NotImplementedError
15
- end
16
- end
17
- end
18
- end
data/lib/miu/store.rb DELETED
@@ -1,34 +0,0 @@
1
- require 'msgpack/rpc'
2
-
3
- module Miu
4
- module Store
5
- class << self
6
- def strategies
7
- @@strategies ||= {}
8
- end
9
-
10
- def register(name, type)
11
- strategies[name.to_sym] = type
12
- end
13
-
14
- def start(options = {})
15
- address = options[:address]
16
- port = options[:port]
17
- type = options[:type]
18
-
19
- klass = Miu::Store.strategies[type.to_sym]
20
-
21
- server = MessagePack::RPC::Server.new
22
- server.listen address, port, klass.new(options)
23
-
24
- [:TERM, :INT].each do |sig|
25
- Signal.trap(sig) { server.stop }
26
- end
27
-
28
- server.run
29
- end
30
- end
31
- end
32
- end
33
-
34
- require 'miu/store/strategies/null'