Commit 190120b4af270bd5d767faf5253c488e216f11b8
1 parent
c11ebee2
Exists in
master
Added zip functionality to reports
Showing
6 changed files
with
112 additions
and
26 deletions
Show diff stats
controllers/myprofile/dialoga_plugin_myprofile_controller.rb
@@ -4,7 +4,7 @@ class DialogaPluginMyprofileController < MyProfileController | @@ -4,7 +4,7 @@ class DialogaPluginMyprofileController < MyProfileController | ||
4 | 4 | ||
5 | def send_report | 5 | def send_report |
6 | path = File.join(Rails.root,'plugins','dialoga','script') | 6 | path = File.join(Rails.root,'plugins','dialoga','script') |
7 | - scripts = ['sent_event_report', 'sent_proposal_report'] | 7 | + scripts = ['exec_scripts'] |
8 | scripts.map do |script| | 8 | scripts.map do |script| |
9 | cmd = File.join(path,script) + ' ' + current_person.email.to_s | 9 | cmd = File.join(path,script) + ' ' + current_person.email.to_s |
10 | fork {IO.popen(cmd).read} | 10 | fork {IO.popen(cmd).read} |
@@ -0,0 +1,40 @@ | @@ -0,0 +1,40 @@ | ||
1 | +#!/usr/bin/env ruby | ||
2 | +# encoding: UTF-8 | ||
3 | +require_relative '../../../config/environment' | ||
4 | +#require 'zip' | ||
5 | +require_relative 'zipfilegenerator' | ||
6 | + | ||
7 | +# The emails to send the report. | ||
8 | +emails = ['leandronunes@gmail.com', 'leandro.santos@serpro.gov.br'] + ARGV | ||
9 | +emails.uniq! | ||
10 | + | ||
11 | +# All reports will go to this path | ||
12 | +reports_dir_path = File.join(Rails.root, "reports_dir") | ||
13 | +if (Dir.exist?(reports_dir_path)) | ||
14 | + FileUtils.rm_rf(reports_dir_path) | ||
15 | +end | ||
16 | +Dir.mkdir(reports_dir_path, 0700) #=> 0 | ||
17 | + | ||
18 | +path = File.join(Rails.root,'plugins','dialoga','script') | ||
19 | +scripts = ['export_ranking_report', 'sent_event_report', 'sent_proposal_report'] | ||
20 | +scripts.map do |script| | ||
21 | + cmd = File.join(path,script) + ' ' + reports_dir_path | ||
22 | + IO.popen(cmd).read | ||
23 | +end | ||
24 | + | ||
25 | +# Compress all files in reports_dir_path to a file named reports_dir.zip | ||
26 | +# in this same directory | ||
27 | +outputFile = File.join(reports_dir_path, "reports_dir.zip") | ||
28 | +zf = ZipFileGenerator.new(reports_dir_path, outputFile) | ||
29 | +zf.write() | ||
30 | + | ||
31 | +ActionMailer::Base.logger = Logger.new(STDOUT) | ||
32 | +class Sender < ActionMailer::Base | ||
33 | + def send_report(to, from, path) | ||
34 | + attachments["reports_dir.zip"] = File.read(path) | ||
35 | + mail to: to, from: from, | ||
36 | + subject: "Relatorio do Dialoga", body: "Segue em anexo os relatorios do Dialoga" | ||
37 | + end | ||
38 | +end | ||
39 | + | ||
40 | +Sender.send_report(emails, 'dialoga@dialoga.gov.br', outputFile).deliver |
@@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
1 | +#!/usr/bin/env ruby | ||
2 | +# encoding: UTF-8 | ||
3 | +require_relative '../../../config/environment' | ||
4 | + | ||
5 | +#discussion = Article.find(402) | ||
6 | +discussion = ProposalsDiscussionPlugin::Discussion.first | ||
7 | +#discussion = Article.find(103358) | ||
8 | + | ||
9 | +articles = discussion.topics | ||
10 | +articles.each do |article| | ||
11 | + ranking = article.ranking | ||
12 | + #file = File.open(File.join(Rails.root, "reports_dir", "ranking_#{article.slug}.csv"), 'w+') | ||
13 | + file = File.open(File.join(ARGV, "ranking_#{article.slug}.csv"), 'w+') | ||
14 | + #CSV.open( "ranking_#{article.slug}.csv", 'w' ) do |csv| | ||
15 | + #print "\nCSV is: #{csv.class}" | ||
16 | + #csv << ['Posição', 'Id', 'Proposta', 'Positivo', 'Negativo', 'Exibições', 'Valor'] | ||
17 | + file.write(['Posição', 'Id', 'Proposta', 'Positivo', 'Negativo', 'Exibições', 'Valor'].join(', ')) | ||
18 | + file.write("\n") | ||
19 | + #file.write(info.map{|i| "'" + i.to_s + "'"}.join(";")) | ||
20 | + #ranking.each_with_index {|r, i| csv << [i+1, r.values].flatten} | ||
21 | + ranking.each_with_index { |r, i| | ||
22 | + file.write([i+1, r.values].flatten.join(', ')) | ||
23 | + file.write("\n") | ||
24 | + } | ||
25 | + file.write("\n") | ||
26 | + file.close | ||
27 | + #end | ||
28 | +end | ||
29 | + |
script/sent_event_report
@@ -2,12 +2,9 @@ | @@ -2,12 +2,9 @@ | ||
2 | # encoding: UTF-8 | 2 | # encoding: UTF-8 |
3 | require_relative '../../../config/environment' | 3 | require_relative '../../../config/environment' |
4 | 4 | ||
5 | -puts 'Iniciando script eventos' | 5 | +puts 'Iniciando script' |
6 | 6 | ||
7 | -directory = File.join(Rails.root,'data') | ||
8 | -Dir.mkdir(directory) unless File.exists?(directory) | ||
9 | - | ||
10 | -file = File.open(File.join(directory,'event.csv'), 'w+') | 7 | +file = File.open(File.join(ARGV, 'event.csv'), 'w+') |
11 | 8 | ||
12 | events = Event.all | 9 | events = Event.all |
13 | events.map do |event| | 10 | events.map do |event| |
script/sent_proposal_report
@@ -2,15 +2,10 @@ | @@ -2,15 +2,10 @@ | ||
2 | # encoding: UTF-8 | 2 | # encoding: UTF-8 |
3 | require_relative '../../../config/environment' | 3 | require_relative '../../../config/environment' |
4 | 4 | ||
5 | -directory = File.join(Rails.root,'data') | ||
6 | -Dir.mkdir(directory) unless File.exists?(directory) | ||
7 | - | ||
8 | -emails = ['leandronunes@gmail.com', 'leandro.santos@serpro.gov.br'] + ARGV | ||
9 | -emails.uniq! | ||
10 | - | ||
11 | puts 'Iniciando script propostas' | 5 | puts 'Iniciando script propostas' |
12 | 6 | ||
13 | -file = File.open(File.join(directory,'data.csv'), 'w+') | 7 | +file = File.open(File.join(ARGV, 'data.csv'), 'w+') |
8 | + | ||
14 | 9 | ||
15 | tasks = ProposalsDiscussionPlugin::ProposalTask.all | 10 | tasks = ProposalsDiscussionPlugin::ProposalTask.all |
16 | count = 0 | 11 | count = 0 |
@@ -42,16 +37,3 @@ end | @@ -42,16 +37,3 @@ end | ||
42 | 37 | ||
43 | file.close | 38 | file.close |
44 | 39 | ||
45 | -ActionMailer::Base.logger = Logger.new(STDOUT) | ||
46 | -class Sender < ActionMailer::Base | ||
47 | - def send_report(to, from) | ||
48 | - directory = File.join(Rails.root,'data') | ||
49 | - attachments["eventos.csv"] = File.read("#{directory}/event.csv") | ||
50 | - attachments["propostas.csv"] = File.read("#{directory}/data.csv") | ||
51 | - mail to: to, from: from, | ||
52 | - subject: "Relatorio do Dialoga", body: "Segue em anexo os relatorios do Dialoga" | ||
53 | - end | ||
54 | - | ||
55 | -end | ||
56 | - | ||
57 | -Sender.send_report(emails, 'dialoga@dialoga.gov.br').deliver |
@@ -0,0 +1,38 @@ | @@ -0,0 +1,38 @@ | ||
1 | +require 'zip' | ||
2 | + | ||
3 | +class ZipFileGenerator | ||
4 | + | ||
5 | + # Initialize with the directory to zip and the location of the output archive. | ||
6 | + def initialize(inputDir, outputFile) | ||
7 | + @inputDir = inputDir | ||
8 | + @outputFile = outputFile | ||
9 | + end | ||
10 | + | ||
11 | + # Zip the input directory. | ||
12 | + def write() | ||
13 | + entries = Dir.entries(@inputDir); entries.delete("."); entries.delete("..") | ||
14 | + io = Zip::File.open(@outputFile, Zip::File::CREATE); | ||
15 | + | ||
16 | + writeEntries(entries, "", io) | ||
17 | + io.close(); | ||
18 | + end | ||
19 | + | ||
20 | + # A helper method to make the recursion work. | ||
21 | + private | ||
22 | + def writeEntries(entries, path, io) | ||
23 | + | ||
24 | + entries.each { |e| | ||
25 | + zipFilePath = path == "" ? e : File.join(path, e) | ||
26 | + diskFilePath = File.join(@inputDir, zipFilePath) | ||
27 | + puts "Deflating " + diskFilePath | ||
28 | + if File.directory?(diskFilePath) | ||
29 | + io.mkdir(zipFilePath) | ||
30 | + subdir =Dir.entries(diskFilePath); subdir.delete("."); subdir.delete("..") | ||
31 | + writeEntries(subdir, zipFilePath, io) | ||
32 | + else | ||
33 | + io.get_output_stream(zipFilePath) { |f| f.puts(File.open(diskFilePath, "rb").read())} | ||
34 | + end | ||
35 | + } | ||
36 | + end | ||
37 | + | ||
38 | +end | ||
0 | \ No newline at end of file | 39 | \ No newline at end of file |