Commit 7b48c627 authored by Ryan Cobb's avatar Ryan Cobb

Add ability to provide only start or end time

This makes it so it is not necessary to provide both start and end
times. Instead you can provide either the start or end time.
parent 44cebfe7
...@@ -74,10 +74,8 @@ class PodLogsService < ::BaseService ...@@ -74,10 +74,8 @@ class PodLogsService < ::BaseService
end end
def check_times(result) def check_times(result)
if params['start'] && params['end'] Time.iso8601(params['start']) if params['start']
Time.iso8601(params['start']) Time.iso8601(params['end']) if params['end']
Time.iso8601(params['end'])
end
success(result) success(result)
rescue ArgumentError rescue ArgumentError
......
...@@ -89,16 +89,14 @@ module Gitlab ...@@ -89,16 +89,14 @@ module Gitlab
end end
def filter_times(query, start_time, end_time) def filter_times(query, start_time, end_time)
return unless start_time && end_time return unless start_time || end_time
query[:bool][:filter] = [ time_range = { range: { :@timestamp => {} } }.tap do |tr|
range: { tr[:range][:@timestamp][:gte] = start_time if start_time
:@timestamp => { tr[:range][:@timestamp][:lt] = end_time if end_time
gte: start_time, end
lt: end_time
} query[:bool][:filter] = [time_range]
}
]
end end
def format_response(response) def format_response(response)
......
{
"query": {
"bool": {
"must": [
{
"match_phrase": {
"kubernetes.pod.name": {
"query": "production-6866bc8974-m4sk4"
}
}
},
{
"match_phrase": {
"kubernetes.namespace": {
"query": "autodevops-deploy-9-production"
}
}
}
],
"filter": [
{
"range": {
"@timestamp": {
"lt": "2019-12-13T14:35:34.034Z"
}
}
}
]
}
},
"sort": [
{
"@timestamp": {
"order": "desc"
}
},
{
"offset": {
"order": "desc"
}
}
],
"_source": [
"@timestamp",
"message"
],
"size": 500
}
{
"query": {
"bool": {
"must": [
{
"match_phrase": {
"kubernetes.pod.name": {
"query": "production-6866bc8974-m4sk4"
}
}
},
{
"match_phrase": {
"kubernetes.namespace": {
"query": "autodevops-deploy-9-production"
}
}
}
],
"filter": [
{
"range": {
"@timestamp": {
"gte": "2019-12-13T14:35:34.034Z"
}
}
}
]
}
},
"sort": [
{
"@timestamp": {
"order": "desc"
}
},
{
"offset": {
"order": "desc"
}
}
],
"_source": [
"@timestamp",
"message"
],
"size": 500
}
...@@ -25,6 +25,8 @@ describe Gitlab::Elasticsearch::Logs do ...@@ -25,6 +25,8 @@ describe Gitlab::Elasticsearch::Logs do
let(:body_with_container) { JSON.parse(fixture_file('lib/elasticsearch/query_with_container.json', dir: 'ee')) } let(:body_with_container) { JSON.parse(fixture_file('lib/elasticsearch/query_with_container.json', dir: 'ee')) }
let(:body_with_search) { JSON.parse(fixture_file('lib/elasticsearch/query_with_search.json', dir: 'ee')) } let(:body_with_search) { JSON.parse(fixture_file('lib/elasticsearch/query_with_search.json', dir: 'ee')) }
let(:body_with_times) { JSON.parse(fixture_file('lib/elasticsearch/query_with_times.json', dir: 'ee')) } let(:body_with_times) { JSON.parse(fixture_file('lib/elasticsearch/query_with_times.json', dir: 'ee')) }
let(:body_with_start_time) { JSON.parse(fixture_file('lib/elasticsearch/query_with_start_time.json', dir: 'ee')) }
let(:body_with_end_time) { JSON.parse(fixture_file('lib/elasticsearch/query_with_end_time.json', dir: 'ee')) }
RSpec::Matchers.define :a_hash_equal_to_json do |expected| RSpec::Matchers.define :a_hash_equal_to_json do |expected|
match do |actual| match do |actual|
...@@ -60,5 +62,19 @@ describe Gitlab::Elasticsearch::Logs do ...@@ -60,5 +62,19 @@ describe Gitlab::Elasticsearch::Logs do
result = subject.pod_logs(namespace, pod_name, nil, nil, start_time, end_time) result = subject.pod_logs(namespace, pod_name, nil, nil, start_time, end_time)
expect(result).to eq([es_message_4, es_message_3, es_message_2, es_message_1]) expect(result).to eq([es_message_4, es_message_3, es_message_2, es_message_1])
end end
it 'can further filter the logs by only start_time' do
expect(client).to receive(:search).with(body: a_hash_equal_to_json(body_with_start_time)).and_return(es_response)
result = subject.pod_logs(namespace, pod_name, nil, nil, start_time)
expect(result).to eq([es_message_4, es_message_3, es_message_2, es_message_1])
end
it 'can further filter the logs by only end_time' do
expect(client).to receive(:search).with(body: a_hash_equal_to_json(body_with_end_time)).and_return(es_response)
result = subject.pod_logs(namespace, pod_name, nil, nil, nil, end_time)
expect(result).to eq([es_message_4, es_message_3, es_message_2, es_message_1])
end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment