summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOmar Roth <omarroth@hotmail.com>2019-01-23 14:15:19 -0600
committerOmar Roth <omarroth@hotmail.com>2019-01-23 14:15:19 -0600
commitaf449161ff3e390657d4404a428f618c381bdb72 (patch)
tree7c6f2f2f79a29b82113bf0965ccf3a112c06b5e9 /src
parent827e68acf5d79e020bb7a2ac7e6b9d49470aa3d5 (diff)
downloadinvidious-af449161ff3e390657d4404a428f618c381bdb72.tar.gz
invidious-af449161ff3e390657d4404a428f618c381bdb72.tar.bz2
invidious-af449161ff3e390657d4404a428f618c381bdb72.zip
Add -o option for redirecting output
Diffstat (limited to 'src')
-rw-r--r--src/invidious.cr10
-rw-r--r--src/invidious/helpers/logger.cr35
2 files changed, 44 insertions, 1 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index 4bde39ef..7c98735f 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -16,6 +16,7 @@
require "detect_language"
require "digest/md5"
+require "file_utils"
require "kemal"
require "openssl/hmac"
require "option_parser"
@@ -35,6 +36,8 @@ channel_threads = CONFIG.channel_threads
feed_threads = CONFIG.feed_threads
video_threads = CONFIG.video_threads
+logger = Invidious::LogHandler.new
+
Kemal.config.extra_options do |parser|
parser.banner = "Usage: invidious [arguments]"
parser.on("-t THREADS", "--crawl-threads=THREADS", "Number of threads for crawling YouTube (default: #{crawl_threads})") do |number|
@@ -69,6 +72,10 @@ Kemal.config.extra_options do |parser|
exit
end
end
+ parser.on("-o OUTPUT", "--output=OUTPUT", "Redirect output (default: STDOUT)") do |output|
+ FileUtils.mkdir_p(File.dirname(output))
+ logger = Invidious::LogHandler.new(File.open(output, mode: "a"))
+ end
end
Kemal::CLI.new
@@ -295,7 +302,7 @@ get "/watch" do |env|
next env.redirect "/watch?v=#{ex.message}"
rescue ex
error_message = ex.message
- STDOUT << id << " : " << ex.message << "\n"
+ logger.write("#{id} : #{ex.message}\n")
next templated "error"
end
@@ -3849,4 +3856,5 @@ add_handler FilteredCompressHandler.new
add_handler DenyFrame.new
add_context_storage_type(User)
+Kemal.config.logger = logger
Kemal.run
diff --git a/src/invidious/helpers/logger.cr b/src/invidious/helpers/logger.cr
new file mode 100644
index 00000000..5bb1eb40
--- /dev/null
+++ b/src/invidious/helpers/logger.cr
@@ -0,0 +1,35 @@
+require "logger"
+
+class Invidious::LogHandler < Kemal::BaseLogHandler
+ def initialize(@io : IO = STDOUT)
+ end
+
+ def call(context : HTTP::Server::Context)
+ time = Time.now
+ call_next(context)
+ elapsed_text = elapsed_text(Time.now - time)
+
+ @io << time << ' ' << context.response.status_code << ' ' << context.request.method << ' ' << context.request.resource << ' ' << elapsed_text << '\n'
+
+ if @io.is_a? File
+ @io.flush
+ end
+
+ context
+ end
+
+ def write(message : String)
+ @io << message
+
+ if @io.is_a? File
+ @io.flush
+ end
+ end
+
+ private def elapsed_text(elapsed)
+ millis = elapsed.total_milliseconds
+ return "#{millis.round(2)}ms" if millis >= 1
+
+ "#{(millis * 1000).round(2)}µs"
+ end
+end