lstash 0.2.0 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f41d0f4233ebb92ad410bbc04a55f8b39d7205e576283677ca2de977c24aea5
4
- data.tar.gz: f038956a733448fa7902e9e9c8aaed5a893881ec3154fa39a936c467a58e8e00
3
+ metadata.gz: b595d887abdc37f07322ccb509d627d477b6e4897bc7768c512ba55f45ab4029
4
+ data.tar.gz: 814170a66956839f128b52a31bc56d99578d434a73e1194c0fa45ecd686f9b40
5
5
  SHA512:
6
- metadata.gz: d0a803e99283cf78ccceb1f24ab266cb2ac6b650574c9272f2a13a760a9ea021a3c7be54de3e6c68c5ffa9b9ec22a1afc5aa262502c2a45f98b8aaf1eced27a2
7
- data.tar.gz: 68209058f27b409c9d2804431cbf7e7426445e084854a26c49640aaf7b5a466f7019804458338bf73fb14ccebf1c7302bc4014fa7abe48c9501900fa2ab475d7
6
+ metadata.gz: 308cb925f02b6dc9ae7c67ca9ac3099615c72b82254e3d9dfd8d0fad33d2b1aa2ead526b35023cf4a20c9497960010ea84cadd50d12d8664813fd7a5f96bb06c
7
+ data.tar.gz: 6e3b63eb59aa2c45bd5b1de469dc79c84bfbed514f2ec4a6b4c12bf92475d1c37daae6a07ef900c6c286fe4ac5ef2e8c0efc8898f88efa11ce5c7d16e47dcd73
@@ -0,0 +1,6 @@
1
+ # development only package dependencies
2
+ build-essential
3
+ curl
4
+ jq
5
+ git
6
+ vim
@@ -0,0 +1,44 @@
1
+ ARG RUBY_VERSION=2.4.6
2
+ ARG BUNDLER_VERSION=1.17.3
3
+ ARG DISTRO_NAME=buster
4
+
5
+ FROM ruby:$RUBY_VERSION-slim-$DISTRO_NAME
6
+
7
+ LABEL maintainer="k.j.wierenga@kerkdienstgemist.nl"
8
+
9
+ # Install dependencies specified in Aptfile
10
+ COPY Aptfile /tmp/
11
+ RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get -yq dist-upgrade \
12
+ && mkdir -p /usr/share/man/man1 /usr/share/man/man7 \
13
+ && DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
14
+ $(grep -Evh '^\s*#' /tmp/Aptfile /tmp/Aptfile.dev | xargs) \
15
+ && apt-get autoremove -y \
16
+ && apt-get clean \
17
+ && rm -rf /var/cache/apt/archives/* \
18
+ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
19
+ && truncate -s 0 /var/log/*log
20
+
21
+ # Configure bundler
22
+ # ENV LANG=C.UTF-8 \
23
+ # BUNDLE_JOBS=4 \
24
+ # BUNDLE_RETRY=3 \
25
+ # TZ=Europe/Amsterdam
26
+
27
+ # Store Bundler settings in the project's root
28
+ # ENV BUNDLE_APP_CONFIG=.bundle
29
+
30
+ # Uncomment this line if you want to run binstubs without prefixing with `bin/` or `bundle exec`
31
+ # ENV PATH /gem/bin:$PATH
32
+
33
+ # Upgrade RubyGems and install the latest Bundler version
34
+ ARG BUNDLER_VERSION
35
+ # gem update --system &&
36
+ RUN gem install bundler:$BUNDLER_VERSION
37
+
38
+ ENV TZ="Europe/Amsterdam"
39
+
40
+ # Configure the main working directory. This is the base
41
+ # directory used in any further RUN, COPY, and ENTRYPOINT commands.
42
+ ENV WORKDIR /gem
43
+ RUN mkdir -p $WORKDIR
44
+ WORKDIR $WORKDIR
@@ -0,0 +1,36 @@
1
+ // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
2
+ // https://github.com/microsoft/vscode-dev-containers/tree/v0.245.2/containers/docker-existing-docker-compose
3
+ // If you want to run as a non-root user in the container, see .devcontainer/docker-compose.yml.
4
+ {
5
+ "name": "lstash",
6
+
7
+ // Update the 'dockerComposeFile' list if you have more compose files or use different names.
8
+ // The .devcontainer/docker-compose.yml file contains any overrides you need/want to make.
9
+ "dockerComposeFile": [
10
+ "../docker-compose.yml"
11
+ // "../docker-compose.override.yml"
12
+ ],
13
+
14
+ // The 'service' property is the name of the service for the container that VS Code should
15
+ // use. Update this value and .devcontainer/docker-compose.yml to the real service name.
16
+ "service": "runner",
17
+
18
+ // The optional 'workspaceFolder' property is the path VS Code should open by default when
19
+ // connected. This is typically a file mount in .devcontainer/docker-compose.yml
20
+ "workspaceFolder": "/gem"
21
+
22
+ // Use 'forwardPorts' to make a list of ports inside the container available locally.
23
+ // "forwardPorts": [],
24
+
25
+ // Uncomment the next line if you want start specific services in your Docker Compose config.
26
+ // "runServices": [],
27
+
28
+ // Uncomment the next line if you want to keep your containers running after VS Code shuts down.
29
+ // "shutdownAction": "none",
30
+
31
+ // Uncomment the next line to run commands after the container is created - for example installing curl.
32
+ // "postCreateCommand": "apt-get update && apt-get install -y curl",
33
+
34
+ // Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root.
35
+ // "remoteUser": "vscode"
36
+ }
@@ -0,0 +1,67 @@
1
+ name: Run tests
2
+ on: [push]
3
+
4
+ jobs:
5
+ # This job uses buildx layer caching
6
+ # See https://evilmartians.com/chronicles/build-images-on-github-actions-with-docker-layer-caching#the-cache-dance-off
7
+ test:
8
+ runs-on: ubuntu-latest
9
+ env:
10
+ SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
11
+ steps:
12
+ - name: Checkout code
13
+ uses: actions/checkout@v2
14
+
15
+ - name: Set up Docker Buildx
16
+ id: buildx
17
+ uses: docker/setup-buildx-action@v2
18
+ with:
19
+ install: true # needed to ensure docker compose uses the build cache too
20
+
21
+ - name: Cache Docker layers
22
+ uses: actions/cache@v2
23
+ with:
24
+ path: /tmp/.buildx-cache
25
+ key: ${{ runner.os }}-single-buildx-${{ github.sha }}
26
+ restore-keys: |
27
+ ${{ runner.os }}-single-buildx
28
+
29
+ - name: Build runner image
30
+ uses: docker/build-push-action@v2
31
+ with:
32
+ context: .devcontainer
33
+ builder: ${{ steps.buildx.outputs.name }}
34
+ push: false # This would be set to true in a real world deployment scenario.
35
+ load: true # Needed to ensure image is used in the "Run tests" step
36
+ tags: lstash_runner
37
+ cache-from: type=local,src=/tmp/.buildx-cache
38
+ cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
39
+
40
+ - name: Run tests
41
+ id: test
42
+ env:
43
+ DOCKER_BUILDKIT: 1
44
+ COMPOSE_DOCKER_CLI_BUILD: 1
45
+ run: |
46
+ docker compose run runner bundle install
47
+ docker compose run runner bundle exec rspec
48
+
49
+ # Temp fix
50
+ # https://github.com/docker/build-push-action/issues/252
51
+ # https://github.com/moby/buildkit/issues/1896
52
+ - name: Move cache
53
+ run: |
54
+ rm -rf /tmp/.buildx-cache
55
+ mv /tmp/.buildx-cache-new /tmp/.buildx-cache
56
+
57
+ # Notify via Slack when workflow is not successful
58
+ - uses: act10ns/slack@v1
59
+ with:
60
+ status: ${{ job.status }}
61
+ steps: ${{ toJson(steps) }}
62
+ if: always() # ${{ !success() }}
63
+
64
+ # cancel in progress workflows for the same github ref (e.g. branch)
65
+ concurrency:
66
+ group: ci-tests-${{ github.ref }}-1
67
+ cancel-in-progress: true
data/CHANGELOG.md CHANGED
@@ -1,8 +1,27 @@
1
+ ## Release 1.0.0
2
+
3
+ * BREAKING CHANGE: default options changed
4
+ * Default --from today changed to --from yesterday
5
+ * Default --to now changed to --to today
6
+ * This ensures that by default lstash counts or greps in yesterdays logging.
7
+ * Fixed bug which caused empty range (e.g. --from today --to today) to incorrectly return non-zero count and logging.
8
+ * Upgrade elasticsearch gem from version ~> 0.4 to ~> 7.17.7.
9
+ * Update queries and field selectors to be compatible with Elasticsearch version 7.
10
+ * Increase scroll step size for grep from 2 minutes to 1 hour (current Elasticsearch can handle it).
11
+ * Add --wildcard / --no-wildcard option to use logstash-* wildcard instead of iterating over indices directly.
12
+ * For the count command --wildcard is faster so that's the default for count.
13
+ * For the grep command --no-wildcard is faster so that's the default for grep.
14
+ * Dockerize development and add GitHub action for testing.
15
+ * Moved repo from kdgm/lstash to kdgm/lstash.
16
+ * Rubocop fixes
17
+
1
18
  ## Release 0.2.0
19
+
2
20
  Merge branch 'feature/fix/hashie-warnings' into develop
3
- - [fix] pin faraday to a compatible version
4
- - [enh] upgrade to ruby 2.4(.6)
5
- - [fix] suppress Hashie warnings; it would generate a warning for each log line (on stdout) leading to very large output
21
+
22
+ * [fix] pin faraday to a compatible version
23
+ * [enh] upgrade to ruby 2.4(.6)
24
+ * [fix] suppress Hashie warnings; it would generate a warning for each log line (on stdout) leading to very large output
6
25
 
7
26
  ### 0.1.4 / 2015-05-29
8
27
 
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # lstash
2
2
 
3
- [![Build Status](https://travis-ci.org/kjwierenga/lstash.svg?branch=master)](https://travis-ci.org/kjwierenga/lstash)
3
+ [![Run tests](https://github.com/kdgm/lstash/actions/workflows/test.yml/badge.svg)](https://github.com/kdgm/lstash/actions/workflows/test.yml)
4
4
 
5
5
  Lstash is a gem and command line utility to count or grep log messages in a certain time frame from a Logstash Elasticsearch server.
6
6
 
@@ -8,48 +8,48 @@ Lstash is a gem and command line utility to count or grep log messages in a cert
8
8
 
9
9
  Or install it yourself as:
10
10
 
11
- $ gem install lstash
11
+ gem install lstash
12
12
 
13
13
  ## Running lstash from the command line
14
14
 
15
- $ lstash
16
- Commands:
17
- lstash count QUERY # count number of log messages matching the QUERY
18
- lstash grep QUERY # grep log messages from Logstash
19
- lstash help [COMMAND] # Describe available commands or one specific command
15
+ $ lstash
16
+ Commands:
17
+ lstash count QUERY # count number of log messages matching the QUERY
18
+ lstash grep QUERY # grep log messages from Logstash
19
+ lstash help [COMMAND] # Describe available commands or one specific command
20
20
 
21
21
  ## The `count` command
22
22
 
23
- Usage:
24
- lstash count QUERY
23
+ Usage:
24
+ lstash count QUERY
25
25
 
26
- Description:
27
- Count log messages matching the QUERY from Logstash and output this count to stdout. QUERY can use Apache Lucene query
28
- parser syntax.
26
+ Description:
27
+ Count log messages matching the QUERY from Logstash and output this count to stdout. QUERY can use Apache Lucene query
28
+ parser syntax.
29
29
 
30
- Example to count the number of HAProxy log messages in yesterdays month.
30
+ Example to count the number of HAProxy log messages in yesterdays month.
31
31
 
32
- lstash count 'program:haproxy' --from firstday --to today --anchor yesterday
32
+ lstash count 'program:haproxy' --from firstday --to today --anchor yesterday
33
33
 
34
34
  ## The `grep` command
35
35
 
36
- Usage:
37
- lstash grep QUERY
36
+ Usage:
37
+ lstash grep QUERY
38
38
 
39
- Description:
40
- Grep log messages matching the QUERY from Logstash in ascending timestamp order and output to stdout. QUERY can use Apache Lucene query parser syntax.
39
+ Description:
40
+ Grep log messages matching the QUERY from Logstash in ascending timestamp order and output to stdout. QUERY can use Apache Lucene query parser syntax.
41
41
 
42
- Example to grep HAProxy log messages from the beginning of this month upto now
42
+ Example to grep HAProxy log messages from the beginning of this month upto now
43
43
 
44
- lstash grep 'program:haproxy' --from firstday --to now
44
+ lstash grep 'program:haproxy' --from firstday --to now
45
45
 
46
46
  ## Command line options
47
47
 
48
- Options:
49
- -f, [--from=start of time range] # date/time, 'now', 'today', 'yesterday', or 'firstday'
50
- -t, [--to=end of time range] # date/time, 'now', 'today', 'yesterday', or 'firstday'
51
- -a, [--anchor=anchor date/time] # used as reference date for firstday
52
- -e, [--es-url=Elasticsearch endpoint for Logstash] # or ES_URL environment variable
48
+ Options:
49
+ -f, [--from=start of time range] # date/time, 'now', 'today', 'yesterday', or 'firstday'
50
+ -t, [--to=end of time range] # date/time, 'now', 'today', 'yesterday', or 'firstday'
51
+ -a, [--anchor=anchor date/time] # used as reference date for firstday
52
+ -e, [--es-url=Elasticsearch endpoint for Logstash] # or ES_URL environment variable
53
53
 
54
54
  All times will be relative to the timezone of the machine on which you are running lstash.
55
55
 
@@ -66,7 +66,7 @@ Example
66
66
 
67
67
  Or
68
68
 
69
- lstash count program:haproxy --es-url log.mydomain.com
69
+ lstash count program:haproxy --es-url log.mydomain.com
70
70
 
71
71
  ## Examples
72
72
 
@@ -80,41 +80,41 @@ Grep all haproxy log messages using for one day (Aug 24 1 0:00 am upto and inclu
80
80
 
81
81
  Assuming today is Sep 1 2014. Count all haproxy log messages in the previous month.
82
82
 
83
- lstash count program:haproxy --anchor yesterday --from firstday --to today -d
84
- time range: [2014-08-01 00:00:00 +0200..2014-09-01 00:00:00 +0200]
85
- logstash-2014.07.31: 1
86
- logstash-2014.08.01: 13
87
- logstash-2014.08.02: 14
88
- logstash-2014.08.03: 1654
89
- logstash-2014.08.04: 6
90
- logstash-2014.08.05: 20
91
- logstash-2014.08.06: 219
92
- logstash-2014.08.07: 32
93
- logstash-2014.08.08: 14
94
- logstash-2014.08.09: 28
95
- logstash-2014.08.10: 799
96
- logstash-2014.08.11: 18
97
- logstash-2014.08.12: 8
98
- logstash-2014.08.13: 23
99
- logstash-2014.08.14: 25
100
- logstash-2014.08.15: 69
101
- logstash-2014.08.16: 19
102
- logstash-2014.08.17: 1160
103
- logstash-2014.08.18: 284
104
- logstash-2014.08.19: 61
105
- logstash-2014.08.20: 26
106
- logstash-2014.08.21: 16
107
- logstash-2014.08.22: 145
108
- logstash-2014.08.23: 72
109
- logstash-2014.08.24: 792
110
- logstash-2014.08.25: 31
111
- logstash-2014.08.26: 33
112
- logstash-2014.08.27: 51
113
- logstash-2014.08.28: 8
114
- logstash-2014.08.29: 23
115
- logstash-2014.08.30: 25
116
- logstash-2014.08.31: 69
117
- 5633
83
+ lstash count program:haproxy --anchor yesterday --from firstday --to today -d
84
+ time range: [2014-08-01 00:00:00 +0200..2014-09-01 00:00:00 +0200]
85
+ logstash-2014.07.31: 1
86
+ logstash-2014.08.01: 13
87
+ logstash-2014.08.02: 14
88
+ logstash-2014.08.03: 1654
89
+ logstash-2014.08.04: 6
90
+ logstash-2014.08.05: 20
91
+ logstash-2014.08.06: 219
92
+ logstash-2014.08.07: 32
93
+ logstash-2014.08.08: 14
94
+ logstash-2014.08.09: 28
95
+ logstash-2014.08.10: 799
96
+ logstash-2014.08.11: 18
97
+ logstash-2014.08.12: 8
98
+ logstash-2014.08.13: 23
99
+ logstash-2014.08.14: 25
100
+ logstash-2014.08.15: 69
101
+ logstash-2014.08.16: 19
102
+ logstash-2014.08.17: 1160
103
+ logstash-2014.08.18: 284
104
+ logstash-2014.08.19: 61
105
+ logstash-2014.08.20: 26
106
+ logstash-2014.08.21: 16
107
+ logstash-2014.08.22: 145
108
+ logstash-2014.08.23: 72
109
+ logstash-2014.08.24: 792
110
+ logstash-2014.08.25: 31
111
+ logstash-2014.08.26: 33
112
+ logstash-2014.08.27: 51
113
+ logstash-2014.08.28: 8
114
+ logstash-2014.08.29: 23
115
+ logstash-2014.08.30: 25
116
+ logstash-2014.08.31: 69
117
+ 5633
118
118
 
119
119
  ## Using lstash as a gem in your project
120
120
 
@@ -124,46 +124,46 @@ Add this line to your application's Gemfile:
124
124
 
125
125
  And then execute:
126
126
 
127
- $ bundle
127
+ bundle
128
128
 
129
129
  Usage:
130
130
 
131
- $ bundle console
131
+ bundle console
132
132
 
133
- # connect to elasticsearch and create the Lstash client
134
- elasticsearch = Elasticsearch::Client.new(url: 'log.mydomain.com')
135
- client = Lstash::Client.new(elasticsearch)
133
+ Connect to elasticsearch and create the Lstash client
136
134
 
137
- # create the query
138
- query = Lstash::Query.new('program:haproxy', from: 'today', to: 'now')
135
+ elasticsearch = Elasticsearch::Client.new(url: ENV['ES_URL'])
136
+ client = Lstash::Client.new(elasticsearch, debug: true)
139
137
 
140
- # count
141
- client.count(query)
138
+ Create the query
142
139
 
143
- # grep
144
- client.grep(query) do |message|
145
- puts message
146
- end
140
+ query = Lstash::Query.new('program:haproxy', from: 'today', to: 'now')
141
+
142
+ Count example
143
+
144
+ client.count(query)
145
+
146
+ Grep example
147
+
148
+ client.grep(query) do |message|
149
+ puts message
150
+ end
147
151
 
148
152
  ## Publishing the gem to RubyGems.org
149
153
 
150
154
  1. Build the gem
151
155
 
152
- ```
153
- $ gem build lstash.gem
154
- Successfully built RubyGem
155
- Name: lstash
156
- Version: 0.2.0
157
- File: lstash-0.2.0.gem
158
- ```
156
+ $ gem build lstash
157
+ Successfully built RubyGem
158
+ Name: lstash
159
+ Version: 0.2.0
160
+ File: lstash-0.2.0.gem
159
161
 
160
162
  2. Pushing your gem to RubyGems.org
161
163
 
162
- ```
163
- gem push lstash-0.2.0.gem
164
- Pushing gem to RubyGems.org...
165
- Successfully registered gem: lstash (0.2.0)
166
- ```
164
+ $ gem push lstash-0.2.0.gem
165
+ Pushing gem to RubyGems.org...
166
+ Successfully registered gem: lstash (0.2.0)
167
167
 
168
168
  See [RubyGems.org documention](https://guides.rubygems.org/) for more info.
169
169
 
data/bin/lstash CHANGED
@@ -1,7 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'lstash/cli'
3
+ require "lstash/cli"
4
4
 
5
- # Suppress Hashie warnings
6
- Hashie.logger = Logger.new(nil)
7
5
  Lstash::CLI.start(ARGV)
data/dip.yml ADDED
@@ -0,0 +1,48 @@
1
+ # Required minimum dip version
2
+ version: '6.1'
3
+
4
+ compose:
5
+ files:
6
+ - docker-compose.yml
7
+ - docker-compose.override.yml # platform specific overrides
8
+
9
+ # Specify project name explicitly to avoid name collisions:
10
+ # docker-compose uses the compose file's folder name as the project name by default,
11
+ # which could be the same for different projects (e.g., if you store docker-compose.yml
12
+ # in the .devcontainer/ folder)
13
+
14
+ # NOTE: We deliberately do not set project_name to prevent collissions
15
+ # between git work trees.
16
+ # Let the name be determined automatically from the base directory name.
17
+ # project_name: UNSET DELIBERATELY
18
+
19
+ interaction:
20
+ sh:
21
+ description: Start a Bash shell in the container
22
+ service: runner
23
+ command: /bin/bash
24
+
25
+ bundle:
26
+ description: Run bundler commands
27
+ service: runner
28
+ command: bundle
29
+
30
+ rake:
31
+ description: Run rake commands
32
+ service: runner
33
+ command: bundle exec rake
34
+
35
+ rspec:
36
+ description: Run specs
37
+ service: runner
38
+ command: bundle exec rspec
39
+
40
+ provision:
41
+ # Remove old containers and volumes.
42
+ - dip compose down --volumes --remove-orphans
43
+
44
+ # Build the development container (based on .devcontainer/Dockerfile)
45
+ - dip compose build
46
+
47
+ # Install gem dependencies
48
+ - dip bundle install
@@ -0,0 +1,28 @@
1
+ x-base: &base
2
+ # NOTE: We deliberately do not set the image name to prevent
3
+ # collissions between images built in different git work trees (directories)
4
+ # image: LEFT UNSET DELIBERATELY
5
+ build:
6
+ context: .devcontainer
7
+ tmpfs:
8
+ - /tmp
9
+ volumes:
10
+ - .:/gem:cached
11
+ - bundle:/usr/local/bundle
12
+ - history:/usr/local/hist
13
+ stdin_open: true
14
+ tty: true
15
+ environment:
16
+ HISTFILE: /usr/local/hist/.bash_history
17
+ IRB_HISTFILE: /usr/local/hist/.irb_history
18
+ EDITOR: ${EDITOR:-vi}
19
+ ES_URL: http://host.docker.internal:9200
20
+
21
+ services:
22
+ runner:
23
+ <<: *base
24
+ command: /bin/bash
25
+
26
+ volumes:
27
+ bundle:
28
+ history:
data/lib/lstash/cli.rb CHANGED
@@ -1,24 +1,30 @@
1
1
  # external dependencies
2
- require 'thor'
3
- require 'uri'
4
- require 'elasticsearch'
2
+ require "thor"
3
+ require "uri"
4
+ require "elasticsearch"
5
5
 
6
6
  # local files we need
7
- require 'lstash/query'
8
- require 'lstash/client'
7
+ require "lstash/query"
8
+ require "lstash/client"
9
+ require "lstash/version"
9
10
 
10
11
  module Lstash
12
+ TRANSPORT_REQUEST_TIMEOUT = 120 # 2 minute request timeout
13
+
14
+ class CLIBase < Thor
15
+ class << self
16
+ def shared_options
17
+ method_option :anchor, banner: "YYYY-mm-dd", aliases: "-a", desc: "The 'firstday' is relative to this anchor date", default: "today"
18
+ method_option :from, banner: "YYYY-mm-dd [HH:MM:SS]", aliases: "-f", desc: "Start date/time, 'now', 'today', 'yesterday', or 'firstday'", default: "yesterday"
19
+ method_option :to, banner: "YYYY-mm-dd [HH:MM:SS]", aliases: "-t", desc: "End date/time, 'now', 'today', 'yesterday', or 'firstday'", default: "today"
20
+ method_option :es_url, banner: "http://localhost:9200", aliases: "-e", desc: "Elasticsearch URL or set ES_URL environment variable"
21
+ method_option :debug, desc: "Log debugging info to stderr", aliases: "-d", type: :boolean, default: false
22
+ method_option :wildcard, desc: "Use index wildcard to query all logstash-* indices (fast for count, slow for grep)", type: :boolean
23
+ end
24
+ end
25
+ end
11
26
 
12
- TRANSPORT_REQUEST_TIMEOUT = 120.freeze # 2 minute request timeout
13
-
14
- class CLI < Thor
15
-
16
- class_option :from, :banner => 'start of time range', :aliases => '-f', :desc => "date/time, 'now', 'today', 'yesterday', or 'firstday'"
17
- class_option :to, :banner => 'end of time range', :aliases => '-t', :desc => "date/time, 'now', 'today', 'yesterday', or 'firstday'"
18
- class_option :anchor, :banner => 'anchor date/time', :aliases => '-a', :desc => "used as reference date for firstday"
19
- class_option :es_url, :banner => 'Elasticsearch endpoint for Logstash', :aliases => '-e', :desc => "or ES_URL environment variable"
20
- class_option :debug, :banner => 'debug log to stderr', :aliases => '-d', :type => :boolean
21
-
27
+ class CLI < CLIBase
22
28
  long_desc <<-LONGDESC
23
29
  Grep log messages matching the QUERY from Logstash in ascending timestamp order
24
30
  and output to stdout. QUERY can use Apache Lucene query parser syntax.
@@ -27,7 +33,8 @@ module Lstash
27
33
 
28
34
  lstash grep 'program:haproxy' --from firstday --to now
29
35
  LONGDESC
30
- desc "grep QUERY", "grep log messages from Logstash"
36
+ desc "grep QUERY", "Grep log messages from Logstash"
37
+ shared_options
31
38
  def grep(query_string)
32
39
  run_command(query_string) do |es_client, query|
33
40
  Lstash::Client.new(es_client, options).grep(query) do |message|
@@ -44,7 +51,8 @@ module Lstash
44
51
 
45
52
  lstash count 'program:haproxy' --from firstday --to today --anchor yesterday
46
53
  LONGDESC
47
- desc "count QUERY", "count number of log messages matching the QUERY"
54
+ desc "count QUERY", "Count number of log messages matching the QUERY"
55
+ shared_options
48
56
  def count(query_string)
49
57
  run_command(query_string) do |es_client, query|
50
58
  count = Lstash::Client.new(es_client, options).count(query)
@@ -52,29 +60,34 @@ module Lstash
52
60
  end
53
61
  end
54
62
 
63
+ long_desc "Print the lstash version"
64
+ desc "version", "print lstash version"
65
+ def version
66
+ puts Lstash::VERSION
67
+ end
68
+
55
69
  private
56
70
 
57
71
  def run_command(query_string)
58
72
  es_client = ::Elasticsearch::Client.new(
59
- url: options[:es_url] || ENV['ES_URL'] || 'localhost',
60
- log: !!ENV['DEBUG'],
61
- transport_options: { request: { timeout: TRANSPORT_REQUEST_TIMEOUT } }
73
+ url: options[:es_url] || ENV["ES_URL"] || "http://localhost:9200",
74
+ log: ENV["DEBUG"] == "true",
75
+ transport_options: {request: {timeout: TRANSPORT_REQUEST_TIMEOUT}}
62
76
  )
63
- query = Lstash::Query.new(query_string, options)
77
+ query = Lstash::Query.new(query_string, options)
64
78
 
65
79
  yield es_client, query
66
-
67
- rescue Exception => e
80
+ rescue => e
68
81
  options[:debug] ? raise(e) : raise(Thor::Error.new(e.message))
69
82
  end
70
83
 
71
- protected
72
-
73
84
  # Make sure we exit on failure with an error code
74
- def self.exit_on_failure?
75
- true
76
- end
85
+ class << self
86
+ protected
77
87
 
88
+ def exit_on_failure?
89
+ true
90
+ end
91
+ end
78
92
  end
79
-
80
93
  end