Skip to content

Instantly share code, notes, and snippets.

@annacruz
Last active October 15, 2019 13:41
Show Gist options
  • Save annacruz/6d8123904bf801f2a0608d7d8e827c41 to your computer and use it in GitHub Desktop.
Save annacruz/6d8123904bf801f2a0608d7d8e827c41 to your computer and use it in GitHub Desktop.
#! /usr/bin/env ruby
require 'json'
require 'date'
file = File.open(ARGV[0])
file_data = file.read
timesheet = JSON.parse(file_data)
with_converted_data = []
timesheet.each do |worklog|
converted = Time.at(worklog['timestamp'].to_i).to_datetime.strftime('%Y-%m-%d')
with_converted_data << { "timestamp": worklog['timestamp'], "converted_data": converted, "message": worklog['message']}
end
grouped = with_converted_data.group_by { |i| i[:converted_data] }
worked_hours_month = []
grouped.each do |item|
timestamps = item[1].map { |i| Time.at(i[:timestamp].to_i) }
next if timestamps.size == 1 || (timestamps.size % 2).odd?
worked_hours_day = 0
workhours = timestamps.sort
workhours.each_with_index do |workhour, index|
next if index.zero?
worked_hours_day += (workhour - workhours[index - 1])
end
worked_hours_day = (worked_hours_day / 3600).round(2)
print "Date: #{item[0]} -> Worked hours: #{worked_hours_day} \n"
print "Messages: \n"
item[1].each do |i|
print i[:message] + "\n"
end
worked_hours_month << worked_hours_day
print "\n\n"
end
total_worked = worked_hours_month.reduce(:+)
print "Total worked in the period: #{total_worked}\n"
#! /usr/bin/env ruby
require 'json'
files = Dir["./2019*.json"]
name_to_search = "Anna Cruz"
filename = name_to_search.downcase.split[0] + '_filtered.json'
new_file_content = []
files.sort.each do |file|
current_file = File.open(file)
file_data = current_file.read
slack_entries = JSON.parse(file_data)
selected = slack_entries.select do |entry|
begin
entry['user_profile']['real_name'] == name_to_search
rescue
next
end
end
only_necessary = []
selected.each do |item|
only_necessary << { timestamp: item['ts'].sub(/\.[0-9]*/, ''), message: item['text'].delete('```')}.to_json
end
new_file_content << only_necessary
end
File.open(filename, 'a+') { |f|
f.write('[')
new_file_content = new_file_content.flatten
new_file_content.each_with_index do |content, index|
f.write(content)
f.puts(',') unless index == new_file_content.size - 1
f.puts if index == new_file_content.size - 1
end
f.write(']')
f.close
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment