fluent-plugin-logdna 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +126 -0
- data/.gitignore +5 -4
- data/.rubocop.yml +136 -0
- data/CONTRIBUTING.md +15 -0
- data/Gemfile +3 -1
- data/LICENSE +2 -2
- data/README.md +56 -47
- data/Rakefile +15 -9
- data/fluent-plugin-logdna.gemspec +16 -15
- data/lib/fluent/plugin/out_logdna.rb +27 -23
- data/test/helper.rb +3 -1
- data/test/plugin/test_out_logdna.rb +72 -73
- metadata +38 -24
- data/.ruby-version +0 -1
- data/Gemfile.lock +0 -70
- data/Makefile +0 -62
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3c61cb20aee4655e2214d113b957d810e9347f48faed5c0e25d11b17756f619
|
4
|
+
data.tar.gz: 0ee054acb8ecffe663aee5e30ad56602d79b2020d9e7fd6762b084bb05cad303
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b78ca28b43d342694fa585c7fe3dbafdb993bacc8db24701c5ae955adb3291c0d12a8e83a84e082a74d2d2c2e2cf77df951975a80c912ce5f429cec7126a26a
|
7
|
+
data.tar.gz: 75898267356efe81538acfb82abeacefc566e7bd667c1bb263b84b113d4838e0d9f828a8105d183a1c655171638d74cc2ecebd913f2b2a59a3060ff5403f8441
|
@@ -0,0 +1,126 @@
|
|
1
|
+
version: 2.1
|
2
|
+
tagged_build_filters: &tagged_build_filters
|
3
|
+
branches:
|
4
|
+
ignore: /.*/
|
5
|
+
tags:
|
6
|
+
only: /v[0-9]+\.[0-9]+\.[0-9]+/
|
7
|
+
test_build_filters: &test_build_filters
|
8
|
+
branches:
|
9
|
+
only: /.*/
|
10
|
+
tags:
|
11
|
+
ignore: /v[0-9]+\.[0-9]+\.[0-9]+/
|
12
|
+
executors:
|
13
|
+
releaser:
|
14
|
+
docker:
|
15
|
+
- image: circleci/golang:1.12
|
16
|
+
ruby265:
|
17
|
+
docker:
|
18
|
+
- image: circleci/ruby:2.6.5
|
19
|
+
ruby23:
|
20
|
+
docker:
|
21
|
+
- image: circleci/ruby:2.3
|
22
|
+
jobs:
|
23
|
+
test:
|
24
|
+
parameters:
|
25
|
+
ruby:
|
26
|
+
type: executor
|
27
|
+
executor: << parameters.ruby >>
|
28
|
+
steps:
|
29
|
+
- checkout
|
30
|
+
- run: bundle install
|
31
|
+
- run: rubocop -c .rubocop.yml
|
32
|
+
- run: rake test
|
33
|
+
build:
|
34
|
+
executor: ruby265
|
35
|
+
steps:
|
36
|
+
- checkout
|
37
|
+
- run:
|
38
|
+
name: Check Tagged Push
|
39
|
+
command: |
|
40
|
+
PKG_VERSION=$(cat fluent-plugin-logdna.gemspec | grep "\.version" | cut -d'"' -f2)
|
41
|
+
if [[ "${CIRCLE_TAG}" != "v${PKG_VERSION}" ]]; then
|
42
|
+
echo "There is mismatch:"
|
43
|
+
echo " TAG_VERSION: ${CIRCLE_TAG}"
|
44
|
+
echo " PKG_VERSION: v${PKG_VERSION}"
|
45
|
+
exit 1
|
46
|
+
fi
|
47
|
+
- run: gem build fluent-plugin-logdna.gemspec
|
48
|
+
- persist_to_workspace:
|
49
|
+
root: .
|
50
|
+
paths:
|
51
|
+
- ./fluent-plugin-logdna-*.gem
|
52
|
+
release:
|
53
|
+
executor: releaser
|
54
|
+
steps:
|
55
|
+
- attach_workspace:
|
56
|
+
at: .
|
57
|
+
- run: go get -u github.com/tcnksm/ghr
|
58
|
+
- run:
|
59
|
+
name: Create a Release
|
60
|
+
command: |
|
61
|
+
ghr \
|
62
|
+
-n "LogDNA Ruby Logger ${CIRCLE_TAG}" \
|
63
|
+
-t ${GITHUB_TOKEN} \
|
64
|
+
-u ${CIRCLE_PROJECT_USERNAME} \
|
65
|
+
-r ${CIRCLE_PROJECT_REPONAME} \
|
66
|
+
-draft ${CIRCLE_TAG} ./
|
67
|
+
- persist_to_workspace:
|
68
|
+
root: .
|
69
|
+
paths:
|
70
|
+
- ./fluent-plugin-logdna-*.gem
|
71
|
+
approve:
|
72
|
+
machine: true
|
73
|
+
steps:
|
74
|
+
- attach_workspace:
|
75
|
+
at: .
|
76
|
+
- persist_to_workspace:
|
77
|
+
root: .
|
78
|
+
paths:
|
79
|
+
- ./fluent-plugin-logdna-*.gem
|
80
|
+
publish:
|
81
|
+
executor: ruby265
|
82
|
+
steps:
|
83
|
+
- attach_workspace:
|
84
|
+
at: .
|
85
|
+
- run:
|
86
|
+
name: Setup gem credentials
|
87
|
+
command: |
|
88
|
+
mkdir -p ~/.gem
|
89
|
+
cat \<<EOF > ~/.gem/credentials
|
90
|
+
---
|
91
|
+
:rubygems_api_key: ${RUBYGEMS_API_KEY}
|
92
|
+
EOF
|
93
|
+
chmod 0600 ~/.gem/credentials
|
94
|
+
- run: gem push *.gem
|
95
|
+
workflows:
|
96
|
+
update:
|
97
|
+
jobs:
|
98
|
+
- test:
|
99
|
+
matrix:
|
100
|
+
parameters:
|
101
|
+
ruby: [ruby23, ruby265]
|
102
|
+
filters: *tagged_build_filters
|
103
|
+
- build:
|
104
|
+
requires:
|
105
|
+
- test
|
106
|
+
filters: *tagged_build_filters
|
107
|
+
- release:
|
108
|
+
requires:
|
109
|
+
- build
|
110
|
+
filters: *tagged_build_filters
|
111
|
+
- approve:
|
112
|
+
type: approval
|
113
|
+
requires:
|
114
|
+
- release
|
115
|
+
filters: *tagged_build_filters
|
116
|
+
- publish:
|
117
|
+
requires:
|
118
|
+
- approve
|
119
|
+
filters: *tagged_build_filters
|
120
|
+
test:
|
121
|
+
jobs:
|
122
|
+
- test:
|
123
|
+
matrix:
|
124
|
+
parameters:
|
125
|
+
ruby: [ruby23, ruby265]
|
126
|
+
filters: *test_build_filters
|
data/.gitignore
CHANGED
@@ -42,11 +42,12 @@ build-iPhoneSimulator/
|
|
42
42
|
|
43
43
|
# for a library or gem, you might want to ignore these files since the code is
|
44
44
|
# intended to run in multiple environments; otherwise, check them in:
|
45
|
-
|
46
|
-
|
47
|
-
|
45
|
+
Gemfile.lock
|
46
|
+
.ruby-version
|
47
|
+
.ruby-gemset
|
48
48
|
|
49
49
|
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
50
50
|
.rvmrc
|
51
51
|
|
52
|
-
.DS_Store
|
52
|
+
.DS_Store
|
53
|
+
Makefile
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
# Too short methods lead to extraction of single-use methods, which can make
|
2
|
+
# the code easier to read (by naming things), but can also clutter the class
|
3
|
+
Metrics/MethodLength:
|
4
|
+
Max: 100
|
5
|
+
|
6
|
+
# The guiding principle of classes is SRP, SRP can't be accurately measured by LoC
|
7
|
+
Metrics/ClassLength:
|
8
|
+
Max: 1500
|
9
|
+
|
10
|
+
Metrics/AbcSize:
|
11
|
+
Max: 40
|
12
|
+
|
13
|
+
Metrics/CyclomaticComplexity:
|
14
|
+
Max: 40
|
15
|
+
|
16
|
+
Metrics/PerceivedComplexity:
|
17
|
+
Max: 40
|
18
|
+
|
19
|
+
# Commonly used screens these days easily fit more than 80 characters.
|
20
|
+
Layout/LineLength:
|
21
|
+
Max: 120
|
22
|
+
|
23
|
+
# Single quotes being faster is hardly measurable and only affects parse time.
|
24
|
+
# Enforcing double quotes reduces the times where you need to change them
|
25
|
+
# when introducing an interpolation. Use single quotes only if their semantics
|
26
|
+
# are needed.
|
27
|
+
Style/StringLiterals:
|
28
|
+
EnforcedStyle: double_quotes
|
29
|
+
|
30
|
+
# We do not need to support Ruby 1.9, so this is good to use.
|
31
|
+
Style/SymbolArray:
|
32
|
+
Enabled: true
|
33
|
+
|
34
|
+
# Mixing the styles looks just silly.
|
35
|
+
Style/HashSyntax:
|
36
|
+
EnforcedStyle: ruby19_no_mixed_keys
|
37
|
+
|
38
|
+
# has_key? and has_value? are far more readable than key? and value?
|
39
|
+
Style/PreferredHashMethods:
|
40
|
+
Enabled: false
|
41
|
+
|
42
|
+
# String#% is by far the least verbose and only object oriented variant.
|
43
|
+
Style/FormatString:
|
44
|
+
EnforcedStyle: percent
|
45
|
+
|
46
|
+
Style/CollectionMethods:
|
47
|
+
Enabled: true
|
48
|
+
PreferredMethods:
|
49
|
+
# inject seems more common in the community.
|
50
|
+
reduce: "inject"
|
51
|
+
|
52
|
+
Style/RescueStandardError:
|
53
|
+
Enabled: false
|
54
|
+
|
55
|
+
# Either allow this style or don't. Marking it as safe with parenthesis
|
56
|
+
# is silly. Let's try to live without them for now.
|
57
|
+
Style/ParenthesesAroundCondition:
|
58
|
+
AllowSafeAssignment: false
|
59
|
+
|
60
|
+
# A specialized exception class will take one or more arguments and construct the message from it.
|
61
|
+
# So both variants make sense.
|
62
|
+
Style/RaiseArgs:
|
63
|
+
Enabled: false
|
64
|
+
|
65
|
+
# Fail is an alias of raise. Avoid aliases, it's more cognitive load for no gain.
|
66
|
+
# The argument that fail should be used to abort the program is wrong too,
|
67
|
+
# there's Kernel#abort for that.
|
68
|
+
Style/SignalException:
|
69
|
+
EnforcedStyle: only_raise
|
70
|
+
|
71
|
+
Style/GuardClause:
|
72
|
+
Enabled: false
|
73
|
+
|
74
|
+
# { ... } for multi-line blocks is okay, follow Weirichs rule instead:
|
75
|
+
# https://web.archive.org/web/20140221124509/http://onestepback.org/index.cgi/Tech/Ruby/BraceVsDoEnd.rdoc
|
76
|
+
Style/BlockDelimiters:
|
77
|
+
Enabled: false
|
78
|
+
|
79
|
+
# do / end blocks should be used for side effects,
|
80
|
+
# methods that run a block for side effects and have
|
81
|
+
# a useful return value are rare, assign the return
|
82
|
+
# value to a local variable for those cases.
|
83
|
+
Style/MethodCalledOnDoEndBlock:
|
84
|
+
Enabled: true
|
85
|
+
|
86
|
+
# Enforcing the names of variables? To single letter ones? Just no.
|
87
|
+
Style/SingleLineBlockParams:
|
88
|
+
Enabled: false
|
89
|
+
|
90
|
+
# Shadowing outer local variables with block parameters is often useful
|
91
|
+
# to not reinvent a new name for the same thing, it highlights the relation
|
92
|
+
# between the outer variable and the parameter. The cases where it's actually
|
93
|
+
# confusing are rare, and usually bad for other reasons already, for example
|
94
|
+
# because the method is too long.
|
95
|
+
Lint/ShadowingOuterLocalVariable:
|
96
|
+
Enabled: false
|
97
|
+
|
98
|
+
Lint/AssignmentInCondition:
|
99
|
+
Enabled: false
|
100
|
+
|
101
|
+
# Check with yard instead.
|
102
|
+
Style/Documentation:
|
103
|
+
Enabled: false
|
104
|
+
|
105
|
+
# This is just silly. Calling the argument `other` in all cases makes no sense.
|
106
|
+
Naming/BinaryOperatorParameterName:
|
107
|
+
Enabled: false
|
108
|
+
|
109
|
+
# There are valid cases, for example debugging Cucumber steps,
|
110
|
+
# also they'll fail CI anyway
|
111
|
+
Lint/Debugger:
|
112
|
+
Enabled: false
|
113
|
+
|
114
|
+
Security/Eval:
|
115
|
+
Enabled: false
|
116
|
+
# Style preference
|
117
|
+
Style/MethodDefParentheses:
|
118
|
+
Enabled: false
|
119
|
+
|
120
|
+
Style/TrailingCommaInHashLiteral:
|
121
|
+
Enabled: false
|
122
|
+
|
123
|
+
Style/IfUnlessModifier:
|
124
|
+
Enabled: false
|
125
|
+
|
126
|
+
Lint/DuplicateMethods:
|
127
|
+
Enabled: true
|
128
|
+
|
129
|
+
Style/RedundantSelf:
|
130
|
+
Enabled: false
|
131
|
+
|
132
|
+
Style/NegatedIf:
|
133
|
+
Enabled: false
|
134
|
+
|
135
|
+
Style/SafeNavigation:
|
136
|
+
Enabled: false
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
## Github Workflow
|
4
|
+
|
5
|
+
Contributions are always welcome! Be sure to follow the [github workflow](https://guides.github.com/introduction/flow/) when contributing to this project:
|
6
|
+
|
7
|
+
* Create an issue, or comment on an issue to indicate what you are working on. This avoids work duplication.
|
8
|
+
* Fork the repository and clone to your local machine
|
9
|
+
* You should already be on the default branch `master` - if not, check it out (`git checkout master`)
|
10
|
+
* Create a new branch for your feature/fix `git checkout -b my-new-feature`)
|
11
|
+
* Write your feature/fix
|
12
|
+
* Stage the changed files for a commit (`git add .`)
|
13
|
+
* Commit your files with a *useful* commit message ([example](https://github.com/Azure/azure-quickstart-templates/commit/53699fed9983d4adead63d9182566dec4b8430d4)) (`git commit`)
|
14
|
+
* Push your new branch to your GitHub Fork (`git push origin my-new-feature`)
|
15
|
+
* Visit this repository in GitHub and create a Pull Request.
|
data/Gemfile
CHANGED
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -6,75 +6,84 @@ Using fluent-plugin-logdna, you can send the logs you collect with Fluentd to Lo
|
|
6
6
|
|
7
7
|
## Instructions
|
8
8
|
|
9
|
-
*
|
10
|
-
*
|
11
|
-
*
|
12
|
-
*
|
9
|
+
* Requirements:
|
10
|
+
* `ruby >= 2.3`
|
11
|
+
* `fluentd < 2.0`
|
12
|
+
* Install Fluentd
|
13
|
+
* [Download here](http://www.fluentd.org/download)
|
14
|
+
* If using fluentd package manager (td-agent): `td-agent-gem install fluent-plugin-logdna`
|
15
|
+
* To install without td-agent: `gem install fluent-plugin-logdna`
|
16
|
+
* Add the config below to `/etc/fluent/fluent.conf`. For `td-agent`, `/etc/td-agent/td-agent.conf`:
|
17
|
+
|
18
|
+
## Configuration
|
19
|
+
|
20
|
+
### Configuration Parameters
|
21
|
+
- `api_key`: [Ingestion Key](https://docs.logdna.com/docs/ingestion-key), *Required*
|
22
|
+
- `hostname`: Hostname, *Required*
|
23
|
+
- `app`: App Name, *Optional*
|
24
|
+
- `mac`: MAC Address, *Optional*
|
25
|
+
- `ip`: IP Address, *Optional*
|
26
|
+
- `tags`: Comma-Separated List of Tags, *Optional*
|
27
|
+
- `request_timeout`: HTTPS POST Request Timeout, *Optional*
|
28
|
+
- **Note**: Supports `s` and `ms` Suffices
|
29
|
+
- **Default**: `30 s`
|
30
|
+
- `ingester_domain`: Custom Ingester URL, *Optional*
|
31
|
+
- **Default**: `htttps://logs.logdna.com`
|
32
|
+
- `ingester_endpoint`: Custom Ingester Endpoint, *Optional*
|
33
|
+
- **Default**: `/logs/ingest`
|
34
|
+
|
35
|
+
### Sample Configuration
|
13
36
|
|
14
37
|
~~~~~configuration
|
15
38
|
<match **>
|
16
39
|
@type logdna
|
17
|
-
api_key xxxxxxxxxxxxxxxxxxxxxxxxxxx
|
18
|
-
hostname "#{Socket.gethostname}"
|
19
|
-
app my_app
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
request_timeout 30000 ms
|
24
|
-
|
25
|
-
flush_at_shutdown true # only needed with file buffer
|
40
|
+
api_key xxxxxxxxxxxxxxxxxxxxxxxxxxx
|
41
|
+
hostname "#{Socket.gethostname}"
|
42
|
+
app my_app
|
43
|
+
mac C0:FF:EE:C0:FF:EE
|
44
|
+
ip 127.0.0.1
|
45
|
+
tags web,dev
|
46
|
+
request_timeout 30000 ms
|
47
|
+
ingester_domain https://logs.logdna.com
|
26
48
|
</match>
|
27
49
|
~~~~~
|
28
50
|
|
29
|
-
|
30
|
-
* `sudo /etc/init.d/td-agent stop`
|
31
|
-
* `sudo /etc/init.d/td-agent start`
|
51
|
+
## Line Parameters
|
32
52
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
* Default is 60s. We recommend keeping this well above 5s.
|
41
|
-
* retry_wait, max_retry_wait, retry_limit, disable_retry_limit
|
42
|
-
* We recommend increasing these values if you are encountering problems.
|
43
|
-
|
44
|
-
### Options
|
45
|
-
|
46
|
-
* App name and log level can also be provided on a line-by-line basis over JSON:
|
47
|
-
* `_app` and `level` will override the config
|
48
|
-
|
49
|
-
If you don't have a LogDNA account, you can create one on [https://logdna.com](https://logdna.com) or if you're on macOS w/[Homebrew](https://brew.sh) installed:
|
50
|
-
|
51
|
-
~~~~~bash
|
52
|
-
brew cask install logdna-cli
|
53
|
-
logdna register <email>
|
54
|
-
# now paste the api key above
|
55
|
-
~~~~~
|
53
|
+
The following line parameters can be set to the information coming from each `record` object:
|
54
|
+
- `level`: [Level](https://github.com/logdna/logger-node#supported-log-levels): `record['level']` or `record['severity']` or the last `tag` given in each `record`
|
55
|
+
- `file`: File Name: set to `file` given in each `record`
|
56
|
+
- `app`: App Name: set to either `_app` or `app` given in each `record`
|
57
|
+
- **Default**: `app` given in the configuration
|
58
|
+
- `env`: Environment Name: set to `env` given in each `record`
|
59
|
+
- `meta`: Meta Object: set to `meta` given in each `record`
|
56
60
|
|
57
61
|
### LogDNA Pay-per-gig Pricing
|
58
62
|
|
59
|
-
Our [paid plans](https://logdna.com
|
63
|
+
Our [paid plans](https://logdna.com/pricing/) start at $1.25/GB per month, and it's based only on usage. There are no fixed data buckets and all paid plans include all features.
|
60
64
|
|
61
65
|
## Building a debian package for td-agent
|
62
66
|
|
63
|
-
If you use td-agent you can build a debian package instead of installing via
|
64
|
-
td-agent-gem. This requires that td-agent is already installed and that you've
|
65
|
-
installed [fpm](http://fpm.readthedocs.io/en/latest/index.html). Then just run
|
66
|
-
`make` in your git directory.
|
67
|
+
If you use td-agent you can build a debian package instead of installing via `td-agent-gem`. This requires that td-agent is already installed and that you've installed [fpm](http://fpm.readthedocs.io/en/latest/index.html). Then run `make` in your git directory.
|
67
68
|
|
68
69
|
~~~~~bash
|
69
|
-
gem install --no-
|
70
|
+
gem install --no-document fpm
|
70
71
|
git clone https://github.com/logdna/fluent-plugin-logdna
|
71
72
|
cd fluent-plugin-logdna
|
72
|
-
|
73
|
+
gem build fluent-plugin-logdna.gemspec
|
74
|
+
fpm --input-type gem --output-type deb \
|
75
|
+
--no-auto-depends \
|
76
|
+
--no-gem-fix-name \
|
77
|
+
--depends 'td-agent > 2' \
|
78
|
+
--deb-build-depends 'td-agent > 2' \
|
79
|
+
fluent-plugin-logdna-*.gem
|
73
80
|
sudo dpkg -i fluent-plugin-logdna*.deb
|
74
81
|
~~~~~
|
75
82
|
|
76
83
|
## Additional Options
|
77
84
|
|
78
|
-
For advanced configuration options, please refer to the [buffered output parameters documentation.](
|
85
|
+
For advanced configuration options, please refer to the [buffered output parameters documentation.](https://docs.fluentd.org/v/0.12/output#buffered-output-parameters)
|
79
86
|
|
80
87
|
Questions or concerns? Contact [support@logdna.com](mailto:support@logdna.com).
|
88
|
+
|
89
|
+
Contributions are always welcome. See the [contributing guide](/CONTRIBUTING.md) to learn how you can help.
|
data/Rakefile
CHANGED
@@ -1,8 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "set"
|
4
|
+
require "rake/clean"
|
5
|
+
require "rake/testtask"
|
2
6
|
|
3
7
|
# Directory to place gems to bundle with our main gem
|
4
8
|
PACKAGE_DIR = "pkg"
|
5
|
-
require "rake/clean"
|
6
9
|
CLOBBER.include PACKAGE_DIR
|
7
10
|
|
8
11
|
desc "Copies gem dependencies to the #{PACKAGE_DIR} folder"
|
@@ -12,14 +15,14 @@ end
|
|
12
15
|
|
13
16
|
desc "Copies gem dependencies which don't overlap with td-agent to the #{PACKAGE_DIR} folder"
|
14
17
|
task "gemdep:minimal" do
|
15
|
-
MINIMAL_GEMS = %
|
18
|
+
MINIMAL_GEMS = %w[
|
16
19
|
unf_ext
|
17
20
|
unf
|
18
21
|
domain_name
|
19
22
|
http-cookie
|
20
23
|
http-form_data
|
21
24
|
http
|
22
|
-
]
|
25
|
+
].freeze
|
23
26
|
gem_copy gen_gem_list MINIMAL_GEMS
|
24
27
|
end
|
25
28
|
|
@@ -28,12 +31,11 @@ def gen_gem_list(subset = [])
|
|
28
31
|
to_pull = Set[]
|
29
32
|
Bundler.locked_gems.specs.each do |spec|
|
30
33
|
next if spec.name == myself.name
|
34
|
+
|
31
35
|
if subset.empty?
|
32
36
|
to_pull.add(spec)
|
33
|
-
|
34
|
-
|
35
|
-
to_pull.add(spec)
|
36
|
-
end
|
37
|
+
elsif subset.include? spec.name
|
38
|
+
to_pull.add(spec)
|
37
39
|
end
|
38
40
|
end
|
39
41
|
to_pull
|
@@ -43,6 +45,10 @@ end
|
|
43
45
|
# Bundler.app_cache with the gems of dependencies).
|
44
46
|
def gem_copy(specs)
|
45
47
|
Bundler.mkdir_p PACKAGE_DIR
|
46
|
-
sources = specs.
|
47
|
-
FileUtils.cp sources, PACKAGE_DIR, :
|
48
|
+
sources = specs.map { |s| Bundler.app_cache.join "#{s.full_name}.gem" }
|
49
|
+
FileUtils.cp sources, PACKAGE_DIR, verbose: true
|
50
|
+
end
|
51
|
+
|
52
|
+
Rake::TestTask.new do |task|
|
53
|
+
task.pattern = "test/**/*.rb"
|
48
54
|
end
|
@@ -1,23 +1,24 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "date"
|
3
4
|
|
4
5
|
Gem::Specification.new do |s|
|
5
|
-
s.name =
|
6
|
-
s.version =
|
6
|
+
s.name = "fluent-plugin-logdna"
|
7
|
+
s.version = "0.4.0"
|
7
8
|
s.date = Date.today.to_s
|
8
|
-
s.summary =
|
9
|
-
s.description =
|
10
|
-
s.authors = [
|
11
|
-
s.email =
|
12
|
-
s.
|
13
|
-
s.
|
14
|
-
s.license = 'MIT'
|
9
|
+
s.summary = "LogDNA Plugin for Fluentd"
|
10
|
+
s.description = "Fluentd Plugin for Supplying Output to LogDNA."
|
11
|
+
s.authors = ["LogDNA, Inc."]
|
12
|
+
s.email = "help@logdna.com"
|
13
|
+
s.homepage = "https://github.com/logdna/fluent-plugin-logdna"
|
14
|
+
s.license = "MIT"
|
15
15
|
|
16
|
-
s.require_paths = [
|
16
|
+
s.require_paths = ["lib"]
|
17
17
|
s.files = `git ls-files -z`.split("\x0")
|
18
18
|
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
-
s.required_ruby_version = Gem::Requirement.new(
|
19
|
+
s.required_ruby_version = Gem::Requirement.new(">= 2.3")
|
20
|
+
s.add_runtime_dependency "fluentd", ">= 0.12.0", "< 2"
|
21
|
+
s.add_runtime_dependency "http", "~> 2.0", ">= 2.0.3"
|
20
22
|
s.add_development_dependency "bundler", "~> 1.16"
|
21
|
-
s.
|
22
|
-
s.add_runtime_dependency 'http', '~> 2.0', '>= 2.0.3'
|
23
|
+
s.add_development_dependency "rubocop", "~> 0.78"
|
23
24
|
end
|
@@ -1,8 +1,10 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "fluent/output"
|
2
4
|
|
3
5
|
module Fluent
|
4
6
|
class LogDNAOutput < Fluent::BufferedOutput
|
5
|
-
Fluent::Plugin.register_output(
|
7
|
+
Fluent::Plugin.register_output("logdna", self)
|
6
8
|
|
7
9
|
MAX_RETRIES = 5
|
8
10
|
|
@@ -13,20 +15,21 @@ module Fluent
|
|
13
15
|
config_param :ip, :string, default: nil
|
14
16
|
config_param :app, :string, default: nil
|
15
17
|
config_param :file, :string, default: nil
|
16
|
-
config_param :ingester_domain, :string, default:
|
17
|
-
config_param :
|
18
|
+
config_param :ingester_domain, :string, default: "https://logs.logdna.com"
|
19
|
+
config_param :ingester_endpoint, :string, default: "/logs/ingest"
|
20
|
+
config_param :request_timeout, :string, default: "30"
|
18
21
|
|
19
22
|
def configure(conf)
|
20
23
|
super
|
21
|
-
@host = conf[
|
24
|
+
@host = conf["hostname"]
|
22
25
|
|
23
26
|
# make these two variables globals
|
24
|
-
timeout_unit_map = { s: 1.0, ms: 0.001
|
25
|
-
timeout_regex = Regexp.new("^([0-9]+)\s*(#{timeout_unit_map.keys.join(
|
27
|
+
timeout_unit_map = { s: 1.0, ms: 0.001 }
|
28
|
+
timeout_regex = Regexp.new("^([0-9]+)\s*(#{timeout_unit_map.keys.join('|')})$")
|
26
29
|
|
27
30
|
# this section goes into this part of the code
|
28
31
|
num_component = 30.0
|
29
|
-
unit_component =
|
32
|
+
unit_component = "s"
|
30
33
|
|
31
34
|
timeout_regex.match(@request_timeout) do |match|
|
32
35
|
num_component = match[1].to_f
|
@@ -38,10 +41,10 @@ module Fluent
|
|
38
41
|
|
39
42
|
def start
|
40
43
|
super
|
41
|
-
require
|
42
|
-
require
|
43
|
-
require
|
44
|
-
HTTP.default_options = { :
|
44
|
+
require "json"
|
45
|
+
require "base64"
|
46
|
+
require "http"
|
47
|
+
HTTP.default_options = { keep_alive_timeout: 60 }
|
45
48
|
@ingester = HTTP.persistent @ingester_domain
|
46
49
|
@requests = Queue.new
|
47
50
|
end
|
@@ -58,7 +61,8 @@ module Fluent
|
|
58
61
|
def write(chunk)
|
59
62
|
body = chunk_to_body(chunk)
|
60
63
|
response = send_request(body)
|
61
|
-
raise
|
64
|
+
raise "Encountered server error" if response.code >= 400
|
65
|
+
|
62
66
|
response.flush
|
63
67
|
end
|
64
68
|
|
@@ -77,31 +81,31 @@ module Fluent
|
|
77
81
|
|
78
82
|
def gather_line_data(tag, time, record)
|
79
83
|
line = {
|
80
|
-
level: record[
|
84
|
+
level: record["level"] || record["severity"] || tag.split(".").last,
|
81
85
|
timestamp: time,
|
82
86
|
line: record.to_json
|
83
87
|
}
|
84
88
|
# At least one of "file" or "app" is required.
|
85
|
-
line[:file] = record[
|
89
|
+
line[:file] = record["file"]
|
86
90
|
line[:file] ||= @file if @file
|
87
91
|
line.delete(:file) if line[:file].nil?
|
88
|
-
line[:app] = record[
|
92
|
+
line[:app] = record["_app"] || record["app"]
|
89
93
|
line[:app] ||= @app if @app
|
90
94
|
line.delete(:app) if line[:app].nil?
|
91
|
-
line[:env] = record[
|
95
|
+
line[:env] = record["env"]
|
92
96
|
line.delete(:env) if line[:env].nil?
|
93
|
-
line[:meta] = record[
|
97
|
+
line[:meta] = record["meta"]
|
94
98
|
line.delete(:meta) if line[:meta].nil?
|
95
99
|
line
|
96
100
|
end
|
97
101
|
|
98
102
|
def send_request(body)
|
99
103
|
now = Time.now.to_i
|
100
|
-
url = "
|
101
|
-
@ingester.headers(
|
102
|
-
|
103
|
-
|
104
|
-
|
104
|
+
url = "#{@ingester_endpoint}?hostname=#{@host}&mac=#{@mac}&ip=#{@ip}&now=#{now}&tags=#{@tags}"
|
105
|
+
@ingester.headers("apikey" => @api_key,
|
106
|
+
"content-type" => "application/json")
|
107
|
+
.timeout(connect: @request_timeout, write: @request_timeout, read: @request_timeout)
|
108
|
+
.post(url, json: body)
|
105
109
|
end
|
106
110
|
end
|
107
111
|
end
|
data/test/helper.rb
CHANGED
@@ -1,110 +1,109 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# https://docs.fluentd.org/plugin-development/api-plugin-output#how-to-write-tests
|
2
4
|
|
3
|
-
require_relative
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
include WebMock::API
|
5
|
+
require_relative "../helper"
|
6
|
+
require "fluent/test/driver/output"
|
7
|
+
require "fluent/plugin/out_stdout"
|
8
|
+
require "fluent/plugin/input"
|
9
|
+
require "webmock/test_unit"
|
9
10
|
|
10
|
-
require
|
11
|
+
require "lib/fluent/plugin/out_logdna.rb"
|
11
12
|
|
12
13
|
class LogdnaOutputTest < Test::Unit::TestCase
|
14
|
+
include WebMock::API
|
15
|
+
|
13
16
|
def setup
|
14
17
|
Fluent::Test.setup
|
15
18
|
|
16
|
-
stub_request(:post,
|
19
|
+
stub_request(:post, %r{logs.logdna.com/logs/ingest})
|
17
20
|
end
|
18
21
|
|
19
22
|
# default configuration for tests
|
20
|
-
CONFIG = %
|
23
|
+
CONFIG = %(
|
21
24
|
api_key this-is-my-key
|
22
25
|
hostname "localhost"
|
23
26
|
app my_app
|
24
27
|
mac C0:FF:EE:C0:FF:EE
|
25
28
|
ip 127.0.0.1
|
26
29
|
tags "my-tag"
|
27
|
-
|
30
|
+
)
|
28
31
|
|
29
32
|
def create_driver(conf = CONFIG)
|
30
33
|
Fluent::Test::Driver::Output.new(Fluent::LogDNAOutput).configure(conf)
|
31
34
|
end
|
32
35
|
|
33
|
-
|
34
|
-
|
35
|
-
d = create_driver
|
36
|
-
time = event_time
|
37
|
-
|
38
|
-
# check defaults
|
39
|
-
assert_equal 'https://logs.logdna.com', d.instance.ingester_domain
|
40
|
-
assert_equal 30, d.instance.request_timeout
|
41
|
-
end
|
42
|
-
|
43
|
-
test 'instantiate the plugin and check setting config values' do
|
44
|
-
conf = %[
|
45
|
-
api_key this-is-my-key
|
46
|
-
hostname "localhost"
|
47
|
-
app my_app
|
48
|
-
mac C0:FF:EE:C0:FF:EE
|
49
|
-
ip 127.0.0.1
|
50
|
-
tags "my-tag"
|
51
|
-
request_timeout 17s
|
52
|
-
]
|
53
|
-
|
54
|
-
d = create_driver(conf)
|
55
|
-
|
56
|
-
# check set config values
|
57
|
-
assert_equal 'my-tag', d.instance.tags
|
58
|
-
assert_equal 17, d.instance.request_timeout
|
59
|
-
end
|
60
|
-
|
61
|
-
test 'instantiate the plugin with ms request_timeout value' do
|
62
|
-
|
63
|
-
conf = %[
|
64
|
-
api_key this-is-my-key
|
65
|
-
hostname "localhost"
|
66
|
-
app my_app
|
67
|
-
mac C0:FF:EE:C0:FF:EE
|
68
|
-
ip 127.0.0.1
|
69
|
-
tags "my-tag"
|
70
|
-
request_timeout 17000 ms
|
71
|
-
]
|
72
|
-
|
73
|
-
d = create_driver(conf)
|
74
|
-
|
75
|
-
# check set config values
|
76
|
-
assert_equal 17, d.instance.request_timeout
|
77
|
-
end
|
36
|
+
test "instantiate the plugin and check default config values" do
|
37
|
+
d = create_driver
|
78
38
|
|
79
|
-
|
39
|
+
# check defaults
|
40
|
+
assert_equal "https://logs.logdna.com", d.instance.ingester_domain
|
41
|
+
assert_equal 30, d.instance.request_timeout
|
42
|
+
end
|
80
43
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
44
|
+
test "instantiate the plugin and check setting config values" do
|
45
|
+
conf = %(
|
46
|
+
api_key this-is-my-key
|
47
|
+
hostname "localhost"
|
48
|
+
app my_app
|
49
|
+
mac C0:FF:EE:C0:FF:EE
|
50
|
+
ip 127.0.0.1
|
51
|
+
tags "my-tag"
|
52
|
+
request_timeout 17s
|
53
|
+
ingester_endpoint this/is/my/alternate/endpoint
|
54
|
+
)
|
55
|
+
|
56
|
+
d = create_driver(conf)
|
57
|
+
|
58
|
+
# check set config values
|
59
|
+
assert_equal "my-tag", d.instance.tags
|
60
|
+
assert_equal 17, d.instance.request_timeout
|
61
|
+
assert_equal "this/is/my/alternate/endpoint", d.instance.ingester_endpoint
|
62
|
+
end
|
90
63
|
|
91
|
-
|
64
|
+
test "instantiate the plugin with ms request_timeout value" do
|
65
|
+
conf = %(
|
66
|
+
api_key this-is-my-key
|
67
|
+
hostname "localhost"
|
68
|
+
app my_app
|
69
|
+
mac C0:FF:EE:C0:FF:EE
|
70
|
+
ip 127.0.0.1
|
71
|
+
tags "my-tag"
|
72
|
+
request_timeout 17000 ms
|
73
|
+
)
|
74
|
+
|
75
|
+
d = create_driver(conf)
|
76
|
+
|
77
|
+
# check set config values
|
78
|
+
assert_equal 17, d.instance.request_timeout
|
79
|
+
end
|
92
80
|
|
93
|
-
|
94
|
-
|
95
|
-
|
81
|
+
test "instantiate the plugin with nonesense request_timeout value" do
|
82
|
+
conf = %(
|
83
|
+
api_key this-is-my-key
|
84
|
+
hostname "localhost"
|
85
|
+
app my_app
|
86
|
+
mac C0:FF:EE:C0:FF:EE
|
87
|
+
ip 127.0.0.1
|
88
|
+
tags "my-tag"
|
89
|
+
request_timeout "asdf ms"
|
90
|
+
)
|
91
|
+
|
92
|
+
d = create_driver(conf)
|
93
|
+
|
94
|
+
# check set config values
|
95
|
+
assert_equal 30, d.instance.request_timeout
|
96
96
|
end
|
97
97
|
|
98
|
-
test
|
98
|
+
test "simple #write" do
|
99
99
|
d = create_driver
|
100
100
|
time = event_time
|
101
101
|
|
102
102
|
d.run do
|
103
|
-
|
104
|
-
|
103
|
+
d.feed("output.test", time, { "foo" => "bar", "message" => "myLine" })
|
104
|
+
d.feed("output.test", time, { "foo" => "bar", "message" => "myLine" })
|
105
105
|
end
|
106
106
|
|
107
107
|
assert_equal(2, d.formatted.size)
|
108
108
|
end
|
109
|
-
|
110
109
|
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-logdna
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- LogDNA, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.16'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.16'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: fluentd
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -64,18 +50,46 @@ dependencies:
|
|
64
50
|
- - ">="
|
65
51
|
- !ruby/object:Gem::Version
|
66
52
|
version: 2.0.3
|
67
|
-
|
68
|
-
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: bundler
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.16'
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '1.16'
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: rubocop
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0.78'
|
74
|
+
type: :development
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0.78'
|
81
|
+
description: Fluentd Plugin for Supplying Output to LogDNA.
|
82
|
+
email: help@logdna.com
|
69
83
|
executables: []
|
70
84
|
extensions: []
|
71
85
|
extra_rdoc_files: []
|
72
86
|
files:
|
87
|
+
- ".circleci/config.yml"
|
73
88
|
- ".gitignore"
|
74
|
-
- ".
|
89
|
+
- ".rubocop.yml"
|
90
|
+
- CONTRIBUTING.md
|
75
91
|
- Gemfile
|
76
|
-
- Gemfile.lock
|
77
92
|
- LICENSE
|
78
|
-
- Makefile
|
79
93
|
- README.md
|
80
94
|
- Rakefile
|
81
95
|
- fluent-plugin-logdna.gemspec
|
@@ -94,7 +108,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
108
|
requirements:
|
95
109
|
- - ">="
|
96
110
|
- !ruby/object:Gem::Version
|
97
|
-
version: 2.
|
111
|
+
version: '2.3'
|
98
112
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
113
|
requirements:
|
100
114
|
- - ">="
|
@@ -104,5 +118,5 @@ requirements: []
|
|
104
118
|
rubygems_version: 3.0.3
|
105
119
|
signing_key:
|
106
120
|
specification_version: 4
|
107
|
-
summary: LogDNA
|
121
|
+
summary: LogDNA Plugin for Fluentd
|
108
122
|
test_files: []
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.3.1
|
data/Gemfile.lock
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
fluent-plugin-logdna (0.3.1)
|
5
|
-
fluentd (>= 0.12.0, < 2)
|
6
|
-
http (~> 2.0, >= 2.0.3)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
addressable (2.7.0)
|
12
|
-
public_suffix (>= 2.0.2, < 5.0)
|
13
|
-
concurrent-ruby (1.1.6)
|
14
|
-
cool.io (1.6.0)
|
15
|
-
crack (0.4.3)
|
16
|
-
safe_yaml (~> 1.0.0)
|
17
|
-
domain_name (0.5.20190701)
|
18
|
-
unf (>= 0.0.5, < 1.0.0)
|
19
|
-
fluentd (1.11.1)
|
20
|
-
cool.io (>= 1.4.5, < 2.0.0)
|
21
|
-
http_parser.rb (>= 0.5.1, < 0.7.0)
|
22
|
-
msgpack (>= 1.3.1, < 2.0.0)
|
23
|
-
serverengine (>= 2.0.4, < 3.0.0)
|
24
|
-
sigdump (~> 0.2.2)
|
25
|
-
strptime (>= 0.2.2, < 1.0.0)
|
26
|
-
tzinfo (>= 1.0, < 3.0)
|
27
|
-
tzinfo-data (~> 1.0)
|
28
|
-
yajl-ruby (~> 1.0)
|
29
|
-
hashdiff (1.0.1)
|
30
|
-
http (2.2.2)
|
31
|
-
addressable (~> 2.3)
|
32
|
-
http-cookie (~> 1.0)
|
33
|
-
http-form_data (~> 1.0.1)
|
34
|
-
http_parser.rb (~> 0.6.0)
|
35
|
-
http-cookie (1.0.3)
|
36
|
-
domain_name (~> 0.5)
|
37
|
-
http-form_data (1.0.3)
|
38
|
-
http_parser.rb (0.6.0)
|
39
|
-
msgpack (1.3.3)
|
40
|
-
public_suffix (4.0.3)
|
41
|
-
rake (12.3.3)
|
42
|
-
safe_yaml (1.0.5)
|
43
|
-
serverengine (2.2.1)
|
44
|
-
sigdump (~> 0.2.2)
|
45
|
-
sigdump (0.2.4)
|
46
|
-
strptime (0.2.4)
|
47
|
-
tzinfo (2.0.2)
|
48
|
-
concurrent-ruby (~> 1.0)
|
49
|
-
tzinfo-data (1.2020.1)
|
50
|
-
tzinfo (>= 1.0.0)
|
51
|
-
unf (0.1.4)
|
52
|
-
unf_ext
|
53
|
-
unf_ext (0.0.7.7)
|
54
|
-
webmock (3.8.3)
|
55
|
-
addressable (>= 2.3.6)
|
56
|
-
crack (>= 0.3.2)
|
57
|
-
hashdiff (>= 0.4.0, < 2.0.0)
|
58
|
-
yajl-ruby (1.4.1)
|
59
|
-
|
60
|
-
PLATFORMS
|
61
|
-
ruby
|
62
|
-
|
63
|
-
DEPENDENCIES
|
64
|
-
bundler (~> 1.16)
|
65
|
-
fluent-plugin-logdna!
|
66
|
-
rake (~> 12.3)
|
67
|
-
webmock
|
68
|
-
|
69
|
-
BUNDLED WITH
|
70
|
-
1.17.2
|
data/Makefile
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
# Generate a debian package for fluent-plugin-logdna
|
2
|
-
#
|
3
|
-
# This assumes that you have the td-agent package already installed
|
4
|
-
# https://docs.fluentd.org/v1.0/articles/install-by-deb
|
5
|
-
#
|
6
|
-
# The package is created with fpm (it does not necessarily need to be
|
7
|
-
# installed into the td-agent embedded ruby). To install fpm run:
|
8
|
-
# $ sudo gem install --no-ri --no-rdoc fpm
|
9
|
-
#
|
10
|
-
# The td-agent package installs an embedded ruby distribution in
|
11
|
-
# /opt/td-agent/embedded which has its own list of gems. Our built package
|
12
|
-
# cannot conflict with those gems so we will elect to bundle a subset of gems
|
13
|
-
# with our package. This may conflict with other packages and this package is
|
14
|
-
# not intended to be a general purpose package.
|
15
|
-
|
16
|
-
# Paths to td-agent specific versions of bundle and gem
|
17
|
-
BUNDLE=/opt/td-agent/embedded/bin/bundle
|
18
|
-
GEM=/opt/td-agent/embedded/bin/gem
|
19
|
-
RUBY=/opt/td-agent/embedded/bin/ruby
|
20
|
-
RAKE=/opt/td-agent/embedded/bin/rake
|
21
|
-
FPM=fpm
|
22
|
-
|
23
|
-
# Bundle will unpack gems into the bundle directory
|
24
|
-
BUNDLE_DIR=./vendor/bundle
|
25
|
-
# Bundle will save gems in the cache directory
|
26
|
-
CACHE_DIR=./vendor/cache
|
27
|
-
PKG_DIR=pkg
|
28
|
-
# Bundle will store settings and locks in the dot_bundle directory
|
29
|
-
DOT_BUNDLE=./.bundle
|
30
|
-
|
31
|
-
GEMSPEC := ${wildcard *.gemspec}
|
32
|
-
NAME := ${shell $(RUBY) -e 'puts Gem::Specification::load("$(GEMSPEC)").name'}
|
33
|
-
VERSION := ${shell $(RUBY) -e 'puts Gem::Specification::load("$(GEMSPEC)").version.to_s'}
|
34
|
-
GEMFILE := ${shell $(RUBY) -e 'puts Gem::Specification::load("$(GEMSPEC)").file_name'}
|
35
|
-
DEBFILE := $(NAME)_$(VERSION)_all.deb
|
36
|
-
|
37
|
-
all: $(DEBFILE)
|
38
|
-
|
39
|
-
$(BUNDLE_DIR): Gemfile.lock
|
40
|
-
$(BUNDLE) install --frozen --path $(BUNDLE_DIR)
|
41
|
-
|
42
|
-
$(CACHE_DIR): $(BUNDLE_DIR) Gemfile.lock
|
43
|
-
$(BUNDLE) package --no-install
|
44
|
-
|
45
|
-
$(GEMFILE): $(BUNDLE_DIR)
|
46
|
-
$(BUNDLE) exec $(GEM) build -V $(GEMSPEC)
|
47
|
-
|
48
|
-
$(DEBFILE): $(GEMFILE) $(CACHE_DIR)
|
49
|
-
$(BUNDLE) exec $(RAKE) gemdep:minimal
|
50
|
-
$(FPM) --input-type gem --output-type deb \
|
51
|
-
--no-auto-depends \
|
52
|
-
--no-gem-fix-name \
|
53
|
-
--gem-gem $(GEM) \
|
54
|
-
--depends 'td-agent > 2' \
|
55
|
-
--deb-build-depends 'td-agent > 2' \
|
56
|
-
pkg/*.gem $(GEMFILE)
|
57
|
-
|
58
|
-
clean:
|
59
|
-
-$(BUNDLE) exec $(RAKE) clobber
|
60
|
-
rm -rf $(BUNDLE_DIR) $(CACHE_DIR) $(DOT_BUNDLE) $(GEMFILE) $(DEBFILE)
|
61
|
-
|
62
|
-
.PHONY: all clean
|