forked from ontoportal/ontologies_api
-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feature: Add last 24hours SPARQL Query logs endpoint (#116)
* fix: docker-compose app volume * fix ncbo_ontology_recommender version * add last 24 hours SPARQL queries logging * add last_n_s_query_logs endpoint * add unit tests for the query logging feature * add user query count endpoint
- Loading branch information
1 parent
07290db
commit 3589732
Showing
4 changed files
with
106 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
require 'multi_json' | ||
|
||
module Admin | ||
|
||
class LoggingController < ApplicationController | ||
|
||
namespace "/admin" do | ||
before { | ||
if LinkedData.settings.enable_security && (!env["REMOTE_USER"] || !env["REMOTE_USER"].admin?) | ||
error 403, "Access denied" | ||
end | ||
} | ||
|
||
get '/latest_day_query_logs' do | ||
logs = Goo.logger.get_logs | ||
reply 200, paginate_logs(logs) | ||
end | ||
|
||
get '/last_n_s_query_logs' do | ||
sec = params[:seconds] || 10 | ||
logs = Goo.logger.queries_last_n_seconds(sec.to_i) | ||
reply 200, paginate_logs(logs) | ||
end | ||
|
||
get '/user_query_count' do | ||
counts = Goo.logger.users_query_count | ||
reply 200, counts | ||
end | ||
|
||
def paginate_logs(logs) | ||
page, size = page_params | ||
start = (page - 1) * size | ||
page_end = [start + size - 1, logs.size].min | ||
page_logs = logs[start..page_end] || [] | ||
page_object(page_logs, logs.size) | ||
end | ||
|
||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
require_relative '../test_case' | ||
require "multi_json" | ||
|
||
class TestLoggingController < TestCase | ||
|
||
def setup | ||
Goo.use_cache = true | ||
Goo.redis_client.flushdb | ||
Goo.add_query_logger(enabled: true, file: "./queries.log") | ||
end | ||
|
||
def teardown | ||
Goo.add_query_logger(enabled: false, file: nil) | ||
File.delete("./queries.log") if File.exist?("./queries.log") | ||
Goo.redis_client.flushdb | ||
Goo.use_cache = false | ||
end | ||
|
||
def test_logging_endpoint | ||
(1..10).each do |_i| | ||
LinkedData::Models::Ontology.where.include(:acronym).all | ||
end | ||
|
||
get '/admin/latest_day_query_logs?page=1&pagesize=9' | ||
assert last_response.ok? | ||
logs = MultiJson.load(last_response.body) | ||
assert_equal 9, logs['collection'].size | ||
|
||
get '/admin/latest_day_query_logs?page=2&pagesize=9' | ||
assert last_response.ok? | ||
logs = MultiJson.load(last_response.body) | ||
refute_empty logs['collection'] | ||
|
||
get '/admin/latest_day_query_logs?page=3&pagesize=9' | ||
assert last_response.ok? | ||
logs = MultiJson.load(last_response.body) | ||
assert_empty logs['collection'] | ||
end | ||
|
||
def test_n_last_seconds_logs | ||
Goo.logger.info("Test log") | ||
(1..10).each do |_i| | ||
LinkedData::Models::Ontology.where.include(:acronym).all | ||
end | ||
|
||
Goo.logger.info("Test log") | ||
get '/admin/last_n_s_query_logs?seconds=2&page=1&pagesize=10' | ||
assert last_response.ok? | ||
logs = MultiJson.load(last_response.body) | ||
assert_equal 10, logs['collection'].size | ||
|
||
sleep 1 | ||
LinkedData::Models::Ontology.where.include(:acronym).all | ||
get '/admin/last_n_s_query_logs?seconds=1&page=1&pagesize=10' | ||
assert last_response.ok? | ||
logs = MultiJson.load(last_response.body) | ||
assert_equal 1, logs['collection'].size | ||
end | ||
end |