Add read_logs.rb scripts
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,2 +1,3 @@ | |||||||
| /dist-newstyle/ | /dist-newstyle/ | ||||||
| /config.toml | /config.toml | ||||||
|  | /log/ | ||||||
|   | |||||||
							
								
								
									
										25
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								README.md
									
									
									
									
									
								
							| @@ -25,4 +25,29 @@ and in another session: | |||||||
| curl localhost:8082 | curl localhost:8082 | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | ## read\_logs.rb | ||||||
|  |  | ||||||
|  | read\_logs.rb looks in the `log/` directory for files ending with `.log`, | ||||||
|  | `.log.1`, `.log.2.gz`, `.log.3.gz` and so forth. It filters out lines starting | ||||||
|  | with a timestamp, `yyyy-mm-ddThh:mm:ss`, followed by random characters and a | ||||||
|  | custom string provided as the only command line parameter. Finally | ||||||
|  | it outputs all matched content after the provided string along with the date. | ||||||
|  |  | ||||||
|  | The log files are read in the order based on the number in the filename. | ||||||
|  |  | ||||||
|  | For example calling the script as | ||||||
|  |  | ||||||
|  | ```sh | ||||||
|  | ./bin/read_logs.rb 'doctrine.INFO:' | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | on a log file containing | ||||||
|  | `[2025-02-04T19:51:49.356093+01:00] doctrine.INFO: Disconnecting [] []` | ||||||
|  |  | ||||||
|  | will print: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | 2025-02-04 (Disconnecting []) | ||||||
|  | ``` | ||||||
|  |  | ||||||
| ## tea-cleaner | ## tea-cleaner | ||||||
|   | |||||||
							
								
								
									
										59
									
								
								bin/read_logs.rb
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										59
									
								
								bin/read_logs.rb
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,59 @@ | |||||||
|  | #!/usr/bin/env ruby | ||||||
|  |  | ||||||
|  | require 'date' | ||||||
|  | require 'zlib' | ||||||
|  | require 'pathname' | ||||||
|  |  | ||||||
|  | class Visit | ||||||
|  |   attr_accessor :page, :date | ||||||
|  |  | ||||||
|  |   def initialize(match_data) | ||||||
|  |     @date = Date.iso8601 match_data[1] | ||||||
|  |     @page = match_data[2].strip | ||||||
|  |   end | ||||||
|  | end | ||||||
|  |  | ||||||
|  | def numeric_extension(filename) | ||||||
|  |   if filename.extname == '.gz' | ||||||
|  |     filename.sub_ext('').extname[1..-1].to_i | ||||||
|  |   elsif filename.extname == '.log' | ||||||
|  |     0 | ||||||
|  |   else | ||||||
|  |     filename.extname[1..-1].to_i | ||||||
|  |   end | ||||||
|  | end | ||||||
|  |  | ||||||
|  | entries = Dir.new('log') | ||||||
|  |   .entries | ||||||
|  |   .reject { |entry| entry.start_with? '.' } | ||||||
|  |   .map { |entry| Pathname.new entry } | ||||||
|  |   .sort { |a, b| numeric_extension(b) <=> numeric_extension(a) } | ||||||
|  |  | ||||||
|  | def read_lines(stream) | ||||||
|  |   if ARGV.length > 0 | ||||||
|  |     regex = /([0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}).+#{ARGV[0]}(.+) / | ||||||
|  |   else | ||||||
|  |     regex = /([0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2})(.+) / | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   stream | ||||||
|  |     .map { |line| line.match regex } | ||||||
|  |     .reject { |line| line.nil? } | ||||||
|  |     .map { |match_data| Visit.new match_data } | ||||||
|  | end | ||||||
|  |  | ||||||
|  | lines_in_all_files = entries.flat_map do |log| | ||||||
|  |   log_path = Pathname.new('log') + log | ||||||
|  |  | ||||||
|  |   if log_path.extname == '.gz' | ||||||
|  |     File.open log_path.to_s do |file| | ||||||
|  |       read_lines Zlib::GzipReader.new(file).readlines | ||||||
|  |     end | ||||||
|  |   else | ||||||
|  |     read_lines File.readlines(log_path.to_s) | ||||||
|  |   end | ||||||
|  | end | ||||||
|  |  | ||||||
|  | lines_in_all_files.each do |visit| | ||||||
|  |   puts "#{visit.date.strftime} (#{visit.page})" | ||||||
|  | end | ||||||
		Reference in New Issue
	
	Block a user