rouge-lexers-fluentd 0.1.0
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 +7 -0
- data/.document +3 -0
- data/.gitignore +6 -0
- data/.yardopts +1 -0
- data/ChangeLog.md +4 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +20 -0
- data/README.md +53 -0
- data/Rakefile +26 -0
- data/lib/rouge/demos/fluentd +72 -0
- data/lib/rouge/lexers/fluentd.rb +114 -0
- data/rouge-lexers-fluentd.gemspec +38 -0
- data/test/demo-stack.yaml +468 -0
- data/test/helper.rb +13 -0
- data/test/test_rouge-lexers-fluentd.rb +25 -0
- metadata +158 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: df3cb79b3b1920d0f178a3aac42c1a9beb85849e
|
4
|
+
data.tar.gz: 348935f5d414183f9490e5a6a9651ab39cf9aec8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1fca72f3c5d08eb5cfcfc2f2761cdbf8c3f53f70703e0efef6cb6f87306b90fbb2410ee428619e3540138c5ef02d59c97123a1bc7e18e45e514549c2cc0c73f3
|
7
|
+
data.tar.gz: 7c724aa3279bc40888dce8f6733ff91cf6218b6fcfccd088dab4b99905e80aca6147be3802678647e2940a2ef9ad19c47fa1d544b8c4ccd4e19ad5d22510166f
|
data/.document
ADDED
data/.gitignore
ADDED
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--markup markdown --title "rouge-lexers-fluentd Documentation" --protected
|
data/ChangeLog.md
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2016 KITAITI Makoto
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# rouge-lexers-fluentd
|
2
|
+
|
3
|
+
* [Homepage](https://rubygems.org/gems/rouge-lexers-fluentd)
|
4
|
+
* [Documentation](http://rubydoc.info/gems/rouge-lexers-fluentd/frames)
|
5
|
+
* [Email](mailto:KitaitiMakoto at gmail.com)
|
6
|
+
|
7
|
+
## Description
|
8
|
+
|
9
|
+
Rouge lexer for fluentd configuration files
|
10
|
+
|
11
|
+
## Features
|
12
|
+
|
13
|
+
* Guesses Fluentd configuration files from filename
|
14
|
+
* Lexes Fluentd configuration files
|
15
|
+
|
16
|
+
## Examples
|
17
|
+
|
18
|
+
require 'rouge/lexers/fluentd'
|
19
|
+
|
20
|
+
config = File.read("path/to/fluent.conf")
|
21
|
+
lexer = Rouge::Lexer.find("fluentd")
|
22
|
+
tokens = lexer.lex(config)
|
23
|
+
terminal_formatter = Rouge::Formatters::Terminal256.new
|
24
|
+
html_formatter = Rouge::Formatters::HTML.new
|
25
|
+
File.write 'path/to/output.html', html_formatter.format(tokens)
|
26
|
+
puts terminal_formatter.format(tokens)
|
27
|
+
|
28
|
+
## Requirements
|
29
|
+
|
30
|
+
* [Rouge][]
|
31
|
+
|
32
|
+
## Install
|
33
|
+
|
34
|
+
$ gem install rouge-lexers-fluentd
|
35
|
+
|
36
|
+
## Todo
|
37
|
+
|
38
|
+
* Lex array values
|
39
|
+
* Lex hash values
|
40
|
+
* Lex embedded Ruby code
|
41
|
+
* Recognize labels
|
42
|
+
* Recognize tag with separator dots
|
43
|
+
* Lex quotes in quoted strings correctly
|
44
|
+
* Lex closing brackets in array correctly
|
45
|
+
* Lex closing braces in hash correctly
|
46
|
+
|
47
|
+
## Copyright
|
48
|
+
|
49
|
+
Copyright (c) 2016 KITAITI Makoto
|
50
|
+
|
51
|
+
See {file:LICENSE.txt} for details.
|
52
|
+
|
53
|
+
[Rouge]: http://rouge.jneen.net/
|
data/Rakefile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'bundler/setup'
|
7
|
+
rescue LoadError => e
|
8
|
+
abort e.message
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'rake'
|
12
|
+
|
13
|
+
|
14
|
+
require 'rubygems/tasks'
|
15
|
+
Gem::Tasks.new
|
16
|
+
|
17
|
+
require 'rake/testtask'
|
18
|
+
Rake::TestTask.new do |test|
|
19
|
+
test.libs << 'test'
|
20
|
+
test.pattern = 'test/**/test_*.rb'
|
21
|
+
test.verbose = true
|
22
|
+
end
|
23
|
+
|
24
|
+
require 'yard'
|
25
|
+
YARD::Rake::YardocTask.new
|
26
|
+
task :doc => :yard
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# Receive events from 24224/tcp
|
2
|
+
# This is used by log forwarding and the fluent-cat command
|
3
|
+
<source>
|
4
|
+
@type forward
|
5
|
+
port 24224
|
6
|
+
</source>
|
7
|
+
|
8
|
+
# http://this.host:9880/myapp.access?json={"event":"data"}
|
9
|
+
<source>
|
10
|
+
@type http
|
11
|
+
port 9880
|
12
|
+
</source>
|
13
|
+
|
14
|
+
<source>
|
15
|
+
@type tail
|
16
|
+
@label @SYSTEM
|
17
|
+
</source>
|
18
|
+
|
19
|
+
<label @SYSTEM>
|
20
|
+
<filter var.log.middleware.**>
|
21
|
+
@type grep
|
22
|
+
# ...
|
23
|
+
</filter>
|
24
|
+
<match **>
|
25
|
+
@type s3
|
26
|
+
# ...
|
27
|
+
</match>
|
28
|
+
</label>
|
29
|
+
|
30
|
+
<filter myapp.access>
|
31
|
+
@type record_transformer
|
32
|
+
<record>
|
33
|
+
host_param "#{Socket.gethostname}"
|
34
|
+
</record>
|
35
|
+
</filter>
|
36
|
+
|
37
|
+
# Match events tagged with "myapp.access" and
|
38
|
+
# store them to /var/log/fluent/access.%Y-%m-%d
|
39
|
+
# Of course, you can control how you partition your data
|
40
|
+
# with the time_slice_format option.
|
41
|
+
<match myapp.access>
|
42
|
+
@type file
|
43
|
+
path /var/log/fluent/access
|
44
|
+
</match>
|
45
|
+
|
46
|
+
# Include config files in the ./config.d directory
|
47
|
+
@include config.d/*.conf
|
48
|
+
|
49
|
+
array_param [
|
50
|
+
"a", "b"
|
51
|
+
]
|
52
|
+
hash_param {
|
53
|
+
"k":"v",
|
54
|
+
"k1":10
|
55
|
+
}
|
56
|
+
|
57
|
+
<match **>
|
58
|
+
@type mail
|
59
|
+
subject "[CRITICAL] foo's alert system"
|
60
|
+
</match>
|
61
|
+
|
62
|
+
<match tag>
|
63
|
+
@type map
|
64
|
+
map '[["code." + tag, time, { "code" => record["code"].to_i}], ["time." + tag, time, { "time" => record["time"].to_i}]]'
|
65
|
+
multi true
|
66
|
+
</match>
|
67
|
+
|
68
|
+
str_param "foo"
|
69
|
+
|
70
|
+
host_param "#{Socket.gethostname}" # host_param is actual hostname like `webserver1`.
|
71
|
+
|
72
|
+
str_param "foo\nbar" # \n is interpreted as actual LF character
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require "rouge"
|
2
|
+
|
3
|
+
module Rouge
|
4
|
+
module Lexers
|
5
|
+
class Fluentd < RegexLexer
|
6
|
+
title "Fluentd"
|
7
|
+
desc "configuration files for Fluentd"
|
8
|
+
tag "fluentd"
|
9
|
+
filenames "fluent.conf", "td-agent.conf"
|
10
|
+
|
11
|
+
state :whitespace do
|
12
|
+
rule /\#.*/, Comment
|
13
|
+
rule /\s+/m, Text
|
14
|
+
end
|
15
|
+
|
16
|
+
state :root do
|
17
|
+
mixin :whitespace
|
18
|
+
|
19
|
+
rule /(<\/?)(\w+)/ do
|
20
|
+
groups Punctuation, Name::Label
|
21
|
+
push :section
|
22
|
+
end
|
23
|
+
|
24
|
+
rule /@\w+/ do
|
25
|
+
token Name::Builtin
|
26
|
+
push :directive
|
27
|
+
end
|
28
|
+
|
29
|
+
rule /\w+/ do
|
30
|
+
token Name::Class
|
31
|
+
push :directive
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# @todo recognize tag with dots as separator
|
36
|
+
# @todo recognize label
|
37
|
+
state :section do
|
38
|
+
rule /([^>]+)?(>(?:\r\n?|\n)?)/ do
|
39
|
+
groups Literal::String::Regex, Punctuation
|
40
|
+
pop!
|
41
|
+
end
|
42
|
+
|
43
|
+
mixin :whitespace
|
44
|
+
end
|
45
|
+
|
46
|
+
# @todo embedded Ruby code
|
47
|
+
state :directive do
|
48
|
+
rule /\r\n?|\n/, Text, :pop!
|
49
|
+
|
50
|
+
mixin :whitespace
|
51
|
+
|
52
|
+
rule /"/ do
|
53
|
+
token Str::Double
|
54
|
+
push :double_quoted_string
|
55
|
+
end
|
56
|
+
|
57
|
+
rule /'/ do
|
58
|
+
token Str::Single
|
59
|
+
push :single_quoted_string
|
60
|
+
end
|
61
|
+
|
62
|
+
rule /\[/ do
|
63
|
+
token Punctuation
|
64
|
+
push :array
|
65
|
+
end
|
66
|
+
|
67
|
+
rule /\{/ do
|
68
|
+
token Punctuation
|
69
|
+
push :hash
|
70
|
+
end
|
71
|
+
|
72
|
+
rule /\S+/ do
|
73
|
+
token Literal::String::Symbol
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# @todo don't break at escaped double quote
|
78
|
+
state :double_quoted_string do
|
79
|
+
rule /([^\"]*)(\")/ do
|
80
|
+
groups Literal::String::Symbol, Str::Double
|
81
|
+
pop!
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# @todo don't break at escaped single quote
|
86
|
+
state :single_quoted_string do
|
87
|
+
rule /([^\']*)(\')/ do
|
88
|
+
groups Literal::String::Symbol, Str::Single
|
89
|
+
pop!
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# @todo don't escape at escaped or in-string closing bracket
|
94
|
+
state :array do
|
95
|
+
mixin :whitespace
|
96
|
+
|
97
|
+
rule /\]/, Punctuation, :pop!
|
98
|
+
rule /\S+/ do
|
99
|
+
token Literal::String::Symbol
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# @todo don't escape at escaped or in-string closing brace
|
104
|
+
state :hash do
|
105
|
+
mixin :whitespace
|
106
|
+
|
107
|
+
rule /}/, Punctuation, :pop!
|
108
|
+
rule /\S+/ do
|
109
|
+
token Literal::String::Symbol
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "rouge-lexers-fluentd"
|
8
|
+
gem.version = "0.1.0"
|
9
|
+
gem.summary = %q{Rouge lexer for fluentd configuration files}
|
10
|
+
gem.description = %q{Rouge lexer for fluentd configuration files}
|
11
|
+
gem.license = "MIT"
|
12
|
+
gem.authors = ["KITAITI Makoto"]
|
13
|
+
gem.email = "KitaitiMakoto@gmail.com"
|
14
|
+
gem.homepage = "https://rubygems.org/gems/rouge-lexers-fluentd"
|
15
|
+
|
16
|
+
gem.files = `git ls-files`.split($/)
|
17
|
+
|
18
|
+
`git submodule --quiet foreach --recursive pwd`.split($/).each do |submodule|
|
19
|
+
submodule.sub!("#{Dir.pwd}/",'')
|
20
|
+
|
21
|
+
Dir.chdir(submodule) do
|
22
|
+
`git ls-files`.split($/).map do |subpath|
|
23
|
+
gem.files << File.join(submodule,subpath)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
28
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
29
|
+
gem.require_paths = ['lib']
|
30
|
+
|
31
|
+
gem.add_runtime_dependency 'rouge', '~> 1.11'
|
32
|
+
gem.add_development_dependency 'test-unit', '~> 3'
|
33
|
+
gem.add_development_dependency 'test-unit-notify', '~> 1'
|
34
|
+
gem.add_development_dependency 'bundler', '~> 1.10'
|
35
|
+
gem.add_development_dependency 'rake', '~> 10.0'
|
36
|
+
gem.add_development_dependency 'rubygems-tasks', '~> 0.2'
|
37
|
+
gem.add_development_dependency 'yard', '~> 0.8'
|
38
|
+
end
|
@@ -0,0 +1,468 @@
|
|
1
|
+
---
|
2
|
+
- - Comment
|
3
|
+
- "# Receive events from 24224/tcp"
|
4
|
+
- - Text
|
5
|
+
- "\n"
|
6
|
+
- - Comment
|
7
|
+
- "# This is used by log forwarding and the fluent-cat command"
|
8
|
+
- - Text
|
9
|
+
- "\n"
|
10
|
+
- - Punctuation
|
11
|
+
- "<"
|
12
|
+
- - Name.Label
|
13
|
+
- source
|
14
|
+
- - Punctuation
|
15
|
+
- ">\n"
|
16
|
+
- - Text
|
17
|
+
- " "
|
18
|
+
- - Name.Builtin
|
19
|
+
- "@type"
|
20
|
+
- - Text
|
21
|
+
- " "
|
22
|
+
- - Literal.String.Symbol
|
23
|
+
- forward
|
24
|
+
- - Text
|
25
|
+
- "\n "
|
26
|
+
- - Name.Class
|
27
|
+
- port
|
28
|
+
- - Text
|
29
|
+
- " "
|
30
|
+
- - Literal.String.Symbol
|
31
|
+
- '24224'
|
32
|
+
- - Text
|
33
|
+
- "\n"
|
34
|
+
- - Punctuation
|
35
|
+
- "</"
|
36
|
+
- - Name.Label
|
37
|
+
- source
|
38
|
+
- - Punctuation
|
39
|
+
- ">\n"
|
40
|
+
- - Text
|
41
|
+
- "\n"
|
42
|
+
- - Comment
|
43
|
+
- '# http://this.host:9880/myapp.access?json={"event":"data"}'
|
44
|
+
- - Text
|
45
|
+
- "\n"
|
46
|
+
- - Punctuation
|
47
|
+
- "<"
|
48
|
+
- - Name.Label
|
49
|
+
- source
|
50
|
+
- - Punctuation
|
51
|
+
- ">\n"
|
52
|
+
- - Text
|
53
|
+
- " "
|
54
|
+
- - Name.Builtin
|
55
|
+
- "@type"
|
56
|
+
- - Text
|
57
|
+
- " "
|
58
|
+
- - Literal.String.Symbol
|
59
|
+
- http
|
60
|
+
- - Text
|
61
|
+
- "\n "
|
62
|
+
- - Name.Class
|
63
|
+
- port
|
64
|
+
- - Text
|
65
|
+
- " "
|
66
|
+
- - Literal.String.Symbol
|
67
|
+
- '9880'
|
68
|
+
- - Text
|
69
|
+
- "\n"
|
70
|
+
- - Punctuation
|
71
|
+
- "</"
|
72
|
+
- - Name.Label
|
73
|
+
- source
|
74
|
+
- - Punctuation
|
75
|
+
- ">\n"
|
76
|
+
- - Text
|
77
|
+
- "\n"
|
78
|
+
- - Punctuation
|
79
|
+
- "<"
|
80
|
+
- - Name.Label
|
81
|
+
- source
|
82
|
+
- - Punctuation
|
83
|
+
- ">\n"
|
84
|
+
- - Text
|
85
|
+
- " "
|
86
|
+
- - Name.Builtin
|
87
|
+
- "@type"
|
88
|
+
- - Text
|
89
|
+
- " "
|
90
|
+
- - Literal.String.Symbol
|
91
|
+
- tail
|
92
|
+
- - Text
|
93
|
+
- "\n "
|
94
|
+
- - Name.Builtin
|
95
|
+
- "@label"
|
96
|
+
- - Text
|
97
|
+
- " "
|
98
|
+
- - Literal.String.Symbol
|
99
|
+
- "@SYSTEM"
|
100
|
+
- - Text
|
101
|
+
- "\n"
|
102
|
+
- - Punctuation
|
103
|
+
- "</"
|
104
|
+
- - Name.Label
|
105
|
+
- source
|
106
|
+
- - Punctuation
|
107
|
+
- ">\n"
|
108
|
+
- - Text
|
109
|
+
- "\n"
|
110
|
+
- - Punctuation
|
111
|
+
- "<"
|
112
|
+
- - Name.Label
|
113
|
+
- label
|
114
|
+
- - Literal.String.Regex
|
115
|
+
- " @SYSTEM"
|
116
|
+
- - Punctuation
|
117
|
+
- ">\n"
|
118
|
+
- - Text
|
119
|
+
- " "
|
120
|
+
- - Punctuation
|
121
|
+
- "<"
|
122
|
+
- - Name.Label
|
123
|
+
- filter
|
124
|
+
- - Literal.String.Regex
|
125
|
+
- " var.log.middleware.**"
|
126
|
+
- - Punctuation
|
127
|
+
- ">\n"
|
128
|
+
- - Text
|
129
|
+
- " "
|
130
|
+
- - Name.Builtin
|
131
|
+
- "@type"
|
132
|
+
- - Text
|
133
|
+
- " "
|
134
|
+
- - Literal.String.Symbol
|
135
|
+
- grep
|
136
|
+
- - Text
|
137
|
+
- "\n "
|
138
|
+
- - Comment
|
139
|
+
- "# ..."
|
140
|
+
- - Text
|
141
|
+
- "\n "
|
142
|
+
- - Punctuation
|
143
|
+
- "</"
|
144
|
+
- - Name.Label
|
145
|
+
- filter
|
146
|
+
- - Punctuation
|
147
|
+
- ">\n"
|
148
|
+
- - Text
|
149
|
+
- " "
|
150
|
+
- - Punctuation
|
151
|
+
- "<"
|
152
|
+
- - Name.Label
|
153
|
+
- match
|
154
|
+
- - Literal.String.Regex
|
155
|
+
- " **"
|
156
|
+
- - Punctuation
|
157
|
+
- ">\n"
|
158
|
+
- - Text
|
159
|
+
- " "
|
160
|
+
- - Name.Builtin
|
161
|
+
- "@type"
|
162
|
+
- - Text
|
163
|
+
- " "
|
164
|
+
- - Literal.String.Symbol
|
165
|
+
- s3
|
166
|
+
- - Text
|
167
|
+
- "\n "
|
168
|
+
- - Comment
|
169
|
+
- "# ..."
|
170
|
+
- - Text
|
171
|
+
- "\n "
|
172
|
+
- - Punctuation
|
173
|
+
- "</"
|
174
|
+
- - Name.Label
|
175
|
+
- match
|
176
|
+
- - Punctuation
|
177
|
+
- |-
|
178
|
+
>
|
179
|
+
</
|
180
|
+
- - Name.Label
|
181
|
+
- label
|
182
|
+
- - Punctuation
|
183
|
+
- ">\n"
|
184
|
+
- - Text
|
185
|
+
- "\n"
|
186
|
+
- - Punctuation
|
187
|
+
- "<"
|
188
|
+
- - Name.Label
|
189
|
+
- filter
|
190
|
+
- - Literal.String.Regex
|
191
|
+
- " myapp.access"
|
192
|
+
- - Punctuation
|
193
|
+
- ">\n"
|
194
|
+
- - Text
|
195
|
+
- " "
|
196
|
+
- - Name.Builtin
|
197
|
+
- "@type"
|
198
|
+
- - Text
|
199
|
+
- " "
|
200
|
+
- - Literal.String.Symbol
|
201
|
+
- record_transformer
|
202
|
+
- - Text
|
203
|
+
- "\n "
|
204
|
+
- - Punctuation
|
205
|
+
- "<"
|
206
|
+
- - Name.Label
|
207
|
+
- record
|
208
|
+
- - Punctuation
|
209
|
+
- ">\n"
|
210
|
+
- - Text
|
211
|
+
- " "
|
212
|
+
- - Name.Class
|
213
|
+
- host_param
|
214
|
+
- - Text
|
215
|
+
- " "
|
216
|
+
- - Literal.String.Double
|
217
|
+
- "\""
|
218
|
+
- - Literal.String.Symbol
|
219
|
+
- "#{Socket.gethostname}"
|
220
|
+
- - Literal.String.Double
|
221
|
+
- "\""
|
222
|
+
- - Text
|
223
|
+
- "\n "
|
224
|
+
- - Punctuation
|
225
|
+
- "</"
|
226
|
+
- - Name.Label
|
227
|
+
- record
|
228
|
+
- - Punctuation
|
229
|
+
- |-
|
230
|
+
>
|
231
|
+
</
|
232
|
+
- - Name.Label
|
233
|
+
- filter
|
234
|
+
- - Punctuation
|
235
|
+
- ">\n"
|
236
|
+
- - Text
|
237
|
+
- "\n"
|
238
|
+
- - Comment
|
239
|
+
- '# Match events tagged with "myapp.access" and'
|
240
|
+
- - Text
|
241
|
+
- "\n"
|
242
|
+
- - Comment
|
243
|
+
- "# store them to /var/log/fluent/access.%Y-%m-%d"
|
244
|
+
- - Text
|
245
|
+
- "\n"
|
246
|
+
- - Comment
|
247
|
+
- "# Of course, you can control how you partition your data"
|
248
|
+
- - Text
|
249
|
+
- "\n"
|
250
|
+
- - Comment
|
251
|
+
- "# with the time_slice_format option."
|
252
|
+
- - Text
|
253
|
+
- "\n"
|
254
|
+
- - Punctuation
|
255
|
+
- "<"
|
256
|
+
- - Name.Label
|
257
|
+
- match
|
258
|
+
- - Literal.String.Regex
|
259
|
+
- " myapp.access"
|
260
|
+
- - Punctuation
|
261
|
+
- ">\n"
|
262
|
+
- - Text
|
263
|
+
- " "
|
264
|
+
- - Name.Builtin
|
265
|
+
- "@type"
|
266
|
+
- - Text
|
267
|
+
- " "
|
268
|
+
- - Literal.String.Symbol
|
269
|
+
- file
|
270
|
+
- - Text
|
271
|
+
- "\n "
|
272
|
+
- - Name.Class
|
273
|
+
- path
|
274
|
+
- - Text
|
275
|
+
- " "
|
276
|
+
- - Literal.String.Symbol
|
277
|
+
- "/var/log/fluent/access"
|
278
|
+
- - Text
|
279
|
+
- "\n"
|
280
|
+
- - Punctuation
|
281
|
+
- "</"
|
282
|
+
- - Name.Label
|
283
|
+
- match
|
284
|
+
- - Punctuation
|
285
|
+
- ">\n"
|
286
|
+
- - Text
|
287
|
+
- "\n"
|
288
|
+
- - Comment
|
289
|
+
- "# Include config files in the ./config.d directory"
|
290
|
+
- - Text
|
291
|
+
- "\n"
|
292
|
+
- - Name.Builtin
|
293
|
+
- "@include"
|
294
|
+
- - Text
|
295
|
+
- " "
|
296
|
+
- - Literal.String.Symbol
|
297
|
+
- config.d/*.conf
|
298
|
+
- - Text
|
299
|
+
- "\n\n"
|
300
|
+
- - Name.Class
|
301
|
+
- array_param
|
302
|
+
- - Text
|
303
|
+
- " "
|
304
|
+
- - Punctuation
|
305
|
+
- "["
|
306
|
+
- - Text
|
307
|
+
- "\n "
|
308
|
+
- - Literal.String.Symbol
|
309
|
+
- '"a",'
|
310
|
+
- - Text
|
311
|
+
- " "
|
312
|
+
- - Literal.String.Symbol
|
313
|
+
- '"b"'
|
314
|
+
- - Text
|
315
|
+
- "\n"
|
316
|
+
- - Punctuation
|
317
|
+
- "]"
|
318
|
+
- - Text
|
319
|
+
- "\n"
|
320
|
+
- - Name.Class
|
321
|
+
- hash_param
|
322
|
+
- - Text
|
323
|
+
- " "
|
324
|
+
- - Punctuation
|
325
|
+
- "{"
|
326
|
+
- - Text
|
327
|
+
- "\n "
|
328
|
+
- - Literal.String.Symbol
|
329
|
+
- '"k":"v",'
|
330
|
+
- - Text
|
331
|
+
- "\n "
|
332
|
+
- - Literal.String.Symbol
|
333
|
+
- '"k1":10'
|
334
|
+
- - Text
|
335
|
+
- "\n"
|
336
|
+
- - Punctuation
|
337
|
+
- "}"
|
338
|
+
- - Text
|
339
|
+
- "\n\n"
|
340
|
+
- - Punctuation
|
341
|
+
- "<"
|
342
|
+
- - Name.Label
|
343
|
+
- match
|
344
|
+
- - Literal.String.Regex
|
345
|
+
- " **"
|
346
|
+
- - Punctuation
|
347
|
+
- ">\n"
|
348
|
+
- - Text
|
349
|
+
- " "
|
350
|
+
- - Name.Builtin
|
351
|
+
- "@type"
|
352
|
+
- - Text
|
353
|
+
- " "
|
354
|
+
- - Literal.String.Symbol
|
355
|
+
- mail
|
356
|
+
- - Text
|
357
|
+
- "\n "
|
358
|
+
- - Name.Class
|
359
|
+
- subject
|
360
|
+
- - Text
|
361
|
+
- " "
|
362
|
+
- - Literal.String.Double
|
363
|
+
- "\""
|
364
|
+
- - Literal.String.Symbol
|
365
|
+
- "[CRITICAL] foo's alert system"
|
366
|
+
- - Literal.String.Double
|
367
|
+
- "\""
|
368
|
+
- - Text
|
369
|
+
- "\n"
|
370
|
+
- - Punctuation
|
371
|
+
- "</"
|
372
|
+
- - Name.Label
|
373
|
+
- match
|
374
|
+
- - Punctuation
|
375
|
+
- ">\n"
|
376
|
+
- - Text
|
377
|
+
- "\n"
|
378
|
+
- - Punctuation
|
379
|
+
- "<"
|
380
|
+
- - Name.Label
|
381
|
+
- match
|
382
|
+
- - Literal.String.Regex
|
383
|
+
- " tag"
|
384
|
+
- - Punctuation
|
385
|
+
- ">\n"
|
386
|
+
- - Text
|
387
|
+
- " "
|
388
|
+
- - Name.Builtin
|
389
|
+
- "@type"
|
390
|
+
- - Text
|
391
|
+
- " "
|
392
|
+
- - Literal.String.Symbol
|
393
|
+
- map
|
394
|
+
- - Text
|
395
|
+
- "\n "
|
396
|
+
- - Name.Class
|
397
|
+
- map
|
398
|
+
- - Text
|
399
|
+
- " "
|
400
|
+
- - Literal.String.Single
|
401
|
+
- "'"
|
402
|
+
- - Literal.String.Symbol
|
403
|
+
- '[["code." + tag, time, { "code" => record["code"].to_i}], ["time." + tag, time,
|
404
|
+
{ "time" => record["time"].to_i}]]'
|
405
|
+
- - Literal.String.Single
|
406
|
+
- "'"
|
407
|
+
- - Text
|
408
|
+
- "\n "
|
409
|
+
- - Name.Class
|
410
|
+
- multi
|
411
|
+
- - Text
|
412
|
+
- " "
|
413
|
+
- - Literal.String.Symbol
|
414
|
+
- 'true'
|
415
|
+
- - Text
|
416
|
+
- "\n"
|
417
|
+
- - Punctuation
|
418
|
+
- "</"
|
419
|
+
- - Name.Label
|
420
|
+
- match
|
421
|
+
- - Punctuation
|
422
|
+
- ">\n"
|
423
|
+
- - Text
|
424
|
+
- "\n"
|
425
|
+
- - Name.Class
|
426
|
+
- str_param
|
427
|
+
- - Text
|
428
|
+
- " "
|
429
|
+
- - Literal.String.Double
|
430
|
+
- "\""
|
431
|
+
- - Literal.String.Symbol
|
432
|
+
- foo
|
433
|
+
- - Literal.String.Double
|
434
|
+
- "\""
|
435
|
+
- - Text
|
436
|
+
- "\n\n"
|
437
|
+
- - Name.Class
|
438
|
+
- host_param
|
439
|
+
- - Text
|
440
|
+
- " "
|
441
|
+
- - Literal.String.Double
|
442
|
+
- "\""
|
443
|
+
- - Literal.String.Symbol
|
444
|
+
- "#{Socket.gethostname}"
|
445
|
+
- - Literal.String.Double
|
446
|
+
- "\""
|
447
|
+
- - Text
|
448
|
+
- " "
|
449
|
+
- - Comment
|
450
|
+
- "# host_param is actual hostname like `webserver1`."
|
451
|
+
- - Text
|
452
|
+
- "\n\n"
|
453
|
+
- - Name.Class
|
454
|
+
- str_param
|
455
|
+
- - Text
|
456
|
+
- " "
|
457
|
+
- - Literal.String.Double
|
458
|
+
- "\""
|
459
|
+
- - Literal.String.Symbol
|
460
|
+
- foo\nbar
|
461
|
+
- - Literal.String.Double
|
462
|
+
- "\""
|
463
|
+
- - Text
|
464
|
+
- " "
|
465
|
+
- - Comment
|
466
|
+
- "# \\n is interpreted as actual LF character"
|
467
|
+
- - Text
|
468
|
+
- "\n"
|
data/test/helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'rouge/lexers/fluentd'
|
3
|
+
|
4
|
+
class TestRougeLexersFluentd < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@lexer = Rouge::Lexers::Fluentd.new(debug: ENV['ROUGE_DEBUG'])
|
7
|
+
@demo = File.read(File.join(__dir__, '../lib/rouge/demos/fluentd'))
|
8
|
+
@demo_stack = YAML.load(File.read(File.join(__dir__, 'demo-stack.yaml')))
|
9
|
+
end
|
10
|
+
|
11
|
+
data("fluent.conf", "fluent.conf")
|
12
|
+
data("td-agent.conf", "td-agent.conf")
|
13
|
+
def test_guess(filename)
|
14
|
+
actual = Rouge::Lexer.guess(filename: filename)
|
15
|
+
assert_equal Rouge::Lexers::Fluentd, actual
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_lex
|
19
|
+
tokens = @lexer.lex(@demo)
|
20
|
+
stack = tokens.collect {|token, value|
|
21
|
+
[token.qualname, value]
|
22
|
+
}
|
23
|
+
assert_equal @demo_stack, stack
|
24
|
+
end
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rouge-lexers-fluentd
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- KITAITI Makoto
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rouge
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.11'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: test-unit
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: test-unit-notify
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.10'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.10'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '10.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '10.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubygems-tasks
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.2'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.2'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: yard
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.8'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.8'
|
111
|
+
description: Rouge lexer for fluentd configuration files
|
112
|
+
email: KitaitiMakoto@gmail.com
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- ".document"
|
118
|
+
- ".gitignore"
|
119
|
+
- ".yardopts"
|
120
|
+
- ChangeLog.md
|
121
|
+
- Gemfile
|
122
|
+
- LICENSE.txt
|
123
|
+
- README.md
|
124
|
+
- Rakefile
|
125
|
+
- lib/rouge/demos/fluentd
|
126
|
+
- lib/rouge/lexers/fluentd.rb
|
127
|
+
- rouge-lexers-fluentd.gemspec
|
128
|
+
- test/demo-stack.yaml
|
129
|
+
- test/helper.rb
|
130
|
+
- test/test_rouge-lexers-fluentd.rb
|
131
|
+
homepage: https://rubygems.org/gems/rouge-lexers-fluentd
|
132
|
+
licenses:
|
133
|
+
- MIT
|
134
|
+
metadata: {}
|
135
|
+
post_install_message:
|
136
|
+
rdoc_options: []
|
137
|
+
require_paths:
|
138
|
+
- lib
|
139
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
requirements: []
|
150
|
+
rubyforge_project:
|
151
|
+
rubygems_version: 2.5.1
|
152
|
+
signing_key:
|
153
|
+
specification_version: 4
|
154
|
+
summary: Rouge lexer for fluentd configuration files
|
155
|
+
test_files:
|
156
|
+
- test/demo-stack.yaml
|
157
|
+
- test/helper.rb
|
158
|
+
- test/test_rouge-lexers-fluentd.rb
|