Add read_logs.rb scripts
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,2 +1,3 @@ | ||||
| /dist-newstyle/ | ||||
| /config.toml | ||||
| /log/ | ||||
|   | ||||
							
								
								
									
										25
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								README.md
									
									
									
									
									
								
							| @@ -25,4 +25,29 @@ and in another session: | ||||
| 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 | ||||
|   | ||||
							
								
								
									
										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