kaya 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +26 -0
  3. data/CHANGELOG +52 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/NOTAS +19 -0
  7. data/README.md +279 -0
  8. data/Rakefile +1 -0
  9. data/bin/kaya +4 -0
  10. data/documentation/api.md +47 -0
  11. data/documentation/api_execution_data.md +47 -0
  12. data/documentation/configuration.md +13 -0
  13. data/documentation/custom_parameters.md +117 -0
  14. data/documentation/document_kaya.md +122 -0
  15. data/documentation/link.md +12 -0
  16. data/documentation/results.md +119 -0
  17. data/documentation/start.md +19 -0
  18. data/documentation/suites.md +60 -0
  19. data/documentation/test_suite_information.md +9 -0
  20. data/kaya.gemspec +42 -0
  21. data/lib/generators/task_rack.rb +160 -0
  22. data/lib/generators/templates/Gemfile.tt +2 -0
  23. data/lib/generators/templates/config.ru.tt +2 -0
  24. data/lib/generators/templates/kaya_conf.tt +49 -0
  25. data/lib/generators/templates/kaya_log.tt +0 -0
  26. data/lib/generators/templates/sidekiq_log.tt +0 -0
  27. data/lib/generators/templates/tasks.kaya.tt +10 -0
  28. data/lib/generators/templates/unicorn.rb.tt +21 -0
  29. data/lib/kaya/API/error.rb +17 -0
  30. data/lib/kaya/API/execution.rb +141 -0
  31. data/lib/kaya/API/result.rb +49 -0
  32. data/lib/kaya/API/results.rb +31 -0
  33. data/lib/kaya/API/suite.rb +42 -0
  34. data/lib/kaya/API/suites.rb +36 -0
  35. data/lib/kaya/background_jobs/sidekiq.rb +35 -0
  36. data/lib/kaya/background_jobs/workers/execution_checker.rb +20 -0
  37. data/lib/kaya/background_jobs/workers/garbage_cleaner.rb +31 -0
  38. data/lib/kaya/commands/bye.rb +12 -0
  39. data/lib/kaya/commands/help.rb +13 -0
  40. data/lib/kaya/commands/install.rb +27 -0
  41. data/lib/kaya/commands/reset.rb +39 -0
  42. data/lib/kaya/commands/reset_suites.rb +40 -0
  43. data/lib/kaya/commands/restart.rb +9 -0
  44. data/lib/kaya/commands/start.rb +104 -0
  45. data/lib/kaya/commands/stop.rb +53 -0
  46. data/lib/kaya/cuba.rb +287 -0
  47. data/lib/kaya/cucumber/features.rb +15 -0
  48. data/lib/kaya/cucumber/task.rb +64 -0
  49. data/lib/kaya/custom/execution_data.rb +50 -0
  50. data/lib/kaya/custom/params.rb +34 -0
  51. data/lib/kaya/database/mongo_connector.rb +285 -0
  52. data/lib/kaya/error/errors.rb +55 -0
  53. data/lib/kaya/execution.rb +57 -0
  54. data/lib/kaya/results/result.rb +493 -0
  55. data/lib/kaya/results/results.rb +47 -0
  56. data/lib/kaya/suites/custom/params.rb +151 -0
  57. data/lib/kaya/suites/suite.rb +177 -0
  58. data/lib/kaya/suites/suites.rb +130 -0
  59. data/lib/kaya/support/clean.rb +12 -0
  60. data/lib/kaya/support/configuration.rb +254 -0
  61. data/lib/kaya/support/console.rb +11 -0
  62. data/lib/kaya/support/documentation.rb +34 -0
  63. data/lib/kaya/support/error_handler_helper.rb +24 -0
  64. data/lib/kaya/support/files_cleanner.rb +136 -0
  65. data/lib/kaya/support/git.rb +161 -0
  66. data/lib/kaya/support/if_config.rb +14 -0
  67. data/lib/kaya/support/logo.rb +23 -0
  68. data/lib/kaya/support/logs.rb +37 -0
  69. data/lib/kaya/support/notification.rb +127 -0
  70. data/lib/kaya/support/processes.rb +96 -0
  71. data/lib/kaya/support/query_string.rb +22 -0
  72. data/lib/kaya/support/request.rb +32 -0
  73. data/lib/kaya/support/risk.rb +9 -0
  74. data/lib/kaya/support/time_helper.rb +11 -0
  75. data/lib/kaya/support/update.rb +65 -0
  76. data/lib/kaya/version.rb +3 -0
  77. data/lib/kaya/view/body.mote +60 -0
  78. data/lib/kaya/view/custom/params/select_list.mote +14 -0
  79. data/lib/kaya/view/custom/params/text.mote +9 -0
  80. data/lib/kaya/view/custom/params.mote +9 -0
  81. data/lib/kaya/view/error_handler.mote +40 -0
  82. data/lib/kaya/view/features/feature.mote +14 -0
  83. data/lib/kaya/view/features/features_list.mote +10 -0
  84. data/lib/kaya/view/features.mote +57 -0
  85. data/lib/kaya/view/footer.mote +10 -0
  86. data/lib/kaya/view/git_information.mote +21 -0
  87. data/lib/kaya/view/help/main.mote +21 -0
  88. data/lib/kaya/view/help/page.mote +2 -0
  89. data/lib/kaya/view/help/search_result.mote +29 -0
  90. data/lib/kaya/view/help.mote +72 -0
  91. data/lib/kaya/view/javascript.mote +96 -0
  92. data/lib/kaya/view/logs/log.mote +3 -0
  93. data/lib/kaya/view/modals.mote +31 -0
  94. data/lib/kaya/view/navigation_bar.mote +48 -0
  95. data/lib/kaya/view/not_found.mote +40 -0
  96. data/lib/kaya/view/parser.rb +79 -0
  97. data/lib/kaya/view/results/all.mote +59 -0
  98. data/lib/kaya/view/results/console.mote +106 -0
  99. data/lib/kaya/view/results/detailed_info.mote +112 -0
  100. data/lib/kaya/view/results/report.mote +1 -0
  101. data/lib/kaya/view/results/result.mote +23 -0
  102. data/lib/kaya/view/results/results.mote +52 -0
  103. data/lib/kaya/view/screenshot.mote +42 -0
  104. data/lib/kaya/view/sections.rb +25 -0
  105. data/lib/kaya/view/styles.mote +58 -0
  106. data/lib/kaya/view/suites/suite.mote +73 -0
  107. data/lib/kaya/view/suites/suites.mote +9 -0
  108. data/lib/kaya/view/view.rb +72 -0
  109. data/lib/kaya.rb +175 -0
  110. data/test/features/install.feature +18 -0
  111. data/test/features/support/env.rb +3 -0
  112. metadata +395 -0
@@ -0,0 +1,136 @@
1
+ require 'fileutils'
2
+
3
+ module Kaya
4
+ module Support
5
+ class FilesCleanner
6
+
7
+ # Delete all kaya_reports html files
8
+ def self.start!
9
+ begin
10
+ self.delete_kaya_reports_dir
11
+ rescue
12
+ false
13
+ end
14
+
15
+ end
16
+
17
+ def self.delete_file file_name
18
+ begin
19
+ File.delete("#{file_name}") and true
20
+ rescue
21
+ false
22
+ end
23
+ end
24
+
25
+ def self.delete_kaya_reports_dir
26
+ location = "#{Dir.pwd}/kaya/kaya_reports"
27
+ FileUtils.rm_rf(location)
28
+ Dir.mkdir(location)
29
+ end
30
+
31
+ def self.delete_report_which_has text
32
+ text = text.to_s if text.respond_to? :to_s
33
+ report = all_kaya_reports.select do |file|
34
+ file.include? text
35
+ end.first
36
+
37
+ delete_file(report)
38
+ end
39
+
40
+ def self.delete_html_report_for result_id
41
+ file = all_kaya_reports.select do |file|
42
+ file.include? result_id
43
+ end.first
44
+ delete_file(file) if file
45
+ end
46
+
47
+ def self.all_kaya_reports
48
+ Dir["#{Dir.pwd}/kaya/temp/*.*"].select do |file|
49
+ !file.scan(/kaya_report_\d+\.html/).empty?
50
+ end
51
+ end
52
+
53
+ # Deletes all kaya html reports
54
+ def self.delete_kaya_reports
55
+ # Get all html report files
56
+ (Kaya::Support::Git.reset_hard and Kaya::Support::Git.pull) if Kaya::Support::Configuration.use_git?
57
+ begin
58
+ self.delete_all_kaya_reports
59
+ rescue
60
+ false
61
+ end
62
+ end
63
+
64
+ # Deletes all kaya html reports files
65
+ # @return [Boolean] if has deleted reports
66
+ def self.delete_all_kaya_reports
67
+ not all_kaya_reports.each do |file|
68
+ self.delete_file(file)
69
+ end.empty?
70
+
71
+ end
72
+
73
+ # Deletes kaya execution output files
74
+ # @return [Boolean] for success
75
+ def self.delete_console_outputs_files
76
+ (Kaya::Support::Git.reset_hard and Kaya::Support::Git.pull) if Kaya::Support::Configuration.use_git?
77
+ begin
78
+ self.delete_all_console_output_files
79
+ true
80
+ rescue
81
+ false
82
+ end
83
+ end
84
+
85
+ # Deletes all kaya execution output files
86
+ # @return [Boolean] if has deleted files
87
+ def self.delete_all_console_output_files
88
+ not all_console_output_reports.each do |file|
89
+ delete_file(file)
90
+ end.empty?
91
+ end
92
+
93
+ def self.all_console_output_reports
94
+ Dir["#{Dir.pwd}/kaya/temp/*.*"].select do |file|
95
+ !file.scan(/kaya_co_\d+\.out/).empty?
96
+ end
97
+ end
98
+
99
+ def self.delete_console_output_for result_id
100
+ file=all_console_output_reports.select do |file|
101
+ file.include? result_id
102
+ end.first
103
+ delete_file(file) if file
104
+ end
105
+
106
+ def self.clear_sidekiq_log
107
+ sidekiq_file_path = "#{Dir.pwd}/kaya/sidekiq_log"
108
+ if File.exist? sidekiq_file_path
109
+ File.delete(sidekiq_file_path)
110
+ File.open(sidekiq_file_path, "a+"){}
111
+ end
112
+ end
113
+
114
+ def self.clear_kaya_log
115
+ kaya_log_file_path = "#{Dir.pwd}/kaya/kaya_log"
116
+ if File.exist? kaya_log_file_path
117
+ File.delete(kaya_log_file_path)
118
+ File.open(kaya_log_file_path, "a+"){}
119
+ end
120
+ end
121
+
122
+ # Deletes kaya folder. Used by 'bye command'
123
+ # @return [Boolean] for success
124
+ def self.delete_kaya_folder
125
+ begin
126
+ location = "#{Dir.pwd}/kaya"
127
+ FileUtils.rm_rf(location)
128
+ true
129
+ rescue
130
+ false
131
+ end
132
+ end
133
+
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,161 @@
1
+ # require "git"
2
+
3
+ module Kaya
4
+ module Support
5
+ class Git
6
+
7
+ def self.branch_list
8
+ self.remote_branches.map do |branch|
9
+ branch.gsub("*","").gsub(" ","").gsub("origin/","")
10
+ end.select do |branch|
11
+ not (branch.include? "HEAD" or branch.include? "/")
12
+ end
13
+ end
14
+
15
+ def self.remote_branches
16
+ Kaya::Support::Console.execute("git branch -r").split("\n")
17
+ end
18
+
19
+ def self.fetch
20
+ Kaya::Support::Console.execute("git fetch")
21
+ end
22
+
23
+ def self.branch
24
+ self.branches.select{|branch| branch.include? "*"}.first.gsub("*","").gsub(" ","")
25
+ end
26
+
27
+ def self.actual_branch; self.branch; end
28
+
29
+ def self.branches
30
+ Kaya::Support::Console.execute("git branch").split("\n")
31
+ end
32
+
33
+ def self.git_add_commit msg=nil
34
+ self.add_all
35
+ self.commit msg
36
+ end
37
+
38
+ def self.add_all
39
+ Kaya::Support::Console.execute("git add .")
40
+ end
41
+
42
+ def self.add_file filename
43
+ Kaya::Support::Console.execute("git add #{filename}")
44
+ end
45
+
46
+ def self.push
47
+ Kaya::Support::Console.execute("git push")
48
+ end
49
+
50
+ def self.git_push_origin_to branch_name=nil
51
+ branch_name = self.branch if branch_name.nil?
52
+ Kaya::Support::Console.execute("git push origin #{branch_name}")
53
+ end
54
+
55
+ def self.reset_hard
56
+ Kaya::Support::Console.execute("git reset --hard")
57
+ end
58
+
59
+ def self.git_push_origin_to_actual_branch
60
+ branch_name = self.branch
61
+ self.git_push_origin_to branch_name
62
+ end
63
+
64
+ def self.git_push_origin_to_actual_branch
65
+ git_push_origin_to(self.actual_branch)
66
+ end
67
+
68
+ def self.commit msg = nil
69
+ # self.ensure_being_at_kaya_branch
70
+ msg = "KAYA COMMIT #{Time.new.strftime('%d %m %Y %H:%M:%S')}" if msg.nil?
71
+ Kaya::Support::Console.execute"git commit -m '#{msg}'"
72
+ end
73
+
74
+ def self.create_branch_and_checkout branch
75
+ Kaya::Support::Console.execute("git checkout -b #{branch}")
76
+ end
77
+
78
+ def self.delete_branch branch
79
+ checkout_to "master"
80
+ Kaya::Support::Console.execute("git branch -D #{branch}")
81
+ end
82
+
83
+ # Performs pull from actual branc
84
+ def self.pull
85
+ self.pull_from(self.actual_branch)
86
+ end
87
+
88
+ def self.pull_from(branch_name=nil)
89
+ branch_name = self.branch if branch_name.nil?
90
+ Kaya::Support::Console.execute("git pull origin #{branch_name}")
91
+ end
92
+
93
+ def self.return_to_branch branch
94
+ self.checkout_to branch
95
+ end
96
+
97
+ def self.checkout_to branch
98
+ Kaya::Support::Console.execute("git checkout #{branch}") unless self.actual_branch == branch
99
+ end
100
+
101
+ def self.checkout_and_pull_from branch_name=nil
102
+ self.checkout_to(branch_name) if branch_name
103
+ branch_name = self.branch if branch_name.nil?
104
+ self.pull_from branch_name
105
+ end
106
+
107
+ # Returns las commit id.
108
+ # This method is used by Execution class to verify changes before each execution
109
+ # @param [String] the name of the project (folder project)
110
+ # @return [String] the id for the las commit
111
+ def self.get_last_commit_id
112
+ self.commits_ids.map do |commit|
113
+ commit.gsub("commit ","")
114
+ end.first
115
+ end
116
+
117
+ def self.commits_ids
118
+ self.log.split("\n").select do |line|
119
+ self.is_commit_id? line
120
+ end
121
+ end
122
+
123
+ def self.commits
124
+ self.log.split("commit")[1..-1]
125
+ end
126
+
127
+ def self.is_commit_id? line
128
+ line.start_with? "commit "
129
+ end
130
+
131
+ def self.log
132
+ Kaya::Support::Console.execute "git log"
133
+ end
134
+
135
+ def self.log_last_commit
136
+ "Commit: #{self.commits.first}"
137
+ end
138
+
139
+ def self.is_there_commit_id_diff? obtained_commit
140
+ obtained_commit != self.last_commit_id
141
+ end
142
+
143
+ def self.remote_url
144
+
145
+ res = Kaya::Support::Console.execute("git config --get remote.origin.url").gsub(":","/").gsub("git@", 'http://').chop
146
+ res[0..-5] if res.end_with? ".git"
147
+ end
148
+
149
+ # Returns an Array with the existing files on .gitignore
150
+ # @param [Array]
151
+ def self.get_actual_lines
152
+ f = File.open("#{Dir.pwd}/.gitignore","r")
153
+ files_list = []
154
+ f.each_line do |line|
155
+ files_list << line.gsub("\n","").gsub(" ","")
156
+ end
157
+ files_list
158
+ end
159
+ end
160
+ end
161
+ end
@@ -0,0 +1,14 @@
1
+ module Kaya
2
+ module Support
3
+ module IfConfig
4
+ def self.ip
5
+ begin
6
+ if_config_output = `ifconfig`
7
+ if_config_output.scan(/:(\d+\.\d+\.\d+\.\d+)/).first.first
8
+ rescue
9
+ nil
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ module Kaya
4
+ module Support
5
+ module Logo
6
+ def self.show
7
+ puts self.logo
8
+ end
9
+
10
+ def self.logo
11
+ "
12
+ ██╗ ██╗ █████╗ ██╗ ██╗ █████╗
13
+ ██║ ██╔╝██╔══██╗╚██╗ ██╔╝██╔══██╗
14
+ █████╔╝ ███████║ ╚████╔╝ ███████║
15
+ ██╔═██╗ ██╔══██║ ╚██╔╝ ██╔══██║
16
+ ██║ ██╗██║ ██║ ██║ ██║ ██║
17
+ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝
18
+ Version #{Kaya::VERSION}
19
+ "
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,37 @@
1
+ module Kaya
2
+ module Support
3
+ module Logs
4
+
5
+ def self.path
6
+ "#{Dir.pwd}/kaya/"
7
+ end
8
+
9
+ def self.all
10
+ logs = Hash.new
11
+ Dir.glob(path + '*_log') do |log_file|
12
+ name = log_file.split("/").last.gsub('.log','')
13
+ text = File.read(log_file)
14
+ logs[name] = text
15
+ end
16
+ logs
17
+ end
18
+
19
+ def self.read_log_file_content_for log=nil
20
+ path = "#{Dir.pwd}/kaya/#{log}"
21
+ if File.exist?("#{path}")
22
+ FileUtils.cp(path, "#{path}~")
23
+ all_content = IO.read("#{path}~")
24
+ content = if all_content.split("\n").size > 500
25
+ all_content.split("\n")[-500..-1].join("<br>")
26
+ else
27
+ all_content.gsub("\n","<br>")
28
+ end
29
+ File.delete("#{path}~")
30
+ else
31
+ content = ""
32
+ end
33
+ content
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,127 @@
1
+ require 'gmail'
2
+
3
+ module Kaya
4
+ module Support
5
+ class Notification
6
+
7
+ include Gmail
8
+
9
+ def initialize project_name, base_url=nil
10
+ @project_name = project_name
11
+ @base_url = base_url
12
+ @subject_prefix = "[Kaya] [#{@project_name}] "
13
+ if Kaya::Support::Configuration.notification?
14
+ begin
15
+ @email = Gmail.connect!(Kaya::Support::Configuration.notification_username,Kaya::Support::Configuration.notification_password)
16
+ $K_LOG.debug "Notification: Login to Gmail Succesfully"
17
+ $K_LOG.debug "Notification: USING NOTIFICATION TO #{Kaya::Support::Configuration.recipients}"
18
+ rescue => e
19
+ $K_LOG.error "Notification: ERROR TO CONNECT TO GMAIL #{e}".red
20
+ $K_LOG.error "Notification: Connecting to GMail error => #{e}"
21
+ @email = NoEmail.new
22
+ end
23
+ else
24
+ @email = NoEmail.new
25
+ end
26
+
27
+ end
28
+
29
+ def notificate subject, body
30
+ send_email subject, body, Kaya::Support::Configuration.notifications_to
31
+ end
32
+
33
+ def send_email message_subject, message_body, path_to_file=nil
34
+ message_subject = "#{@subject_prefix} #{message_subject}"
35
+ begin
36
+ email = @email.compose do
37
+ to Kaya::Support::Configuration.recipients
38
+ subject message_subject
39
+ text_part do
40
+ body message_body
41
+ end
42
+ html_part do
43
+ $K_LOG.debug "Notification: Attaching report file (#{path_to_file})"
44
+ content_type 'text/html; charset=UTF-8'
45
+ body "<p>#{message_body}</p>"
46
+ end
47
+ add_file path_to_file
48
+ end
49
+ email.deliver!
50
+ $K_LOG.debug "Notification: Email sent to (#{Kaya::Support::Configuration.recipients}) | Subject: '#{message_subject}' | Message: #{message_body}" if $K_LOG
51
+ rescue => e
52
+ $K_LOG.error "Notification: Could not sent email to (#{Kaya::Support::Configuration.recipients}) | Subject: '#{message_subject}' | Message: #{message_body} | #{e}\n #{e.backtrace}" if $K_LOG
53
+ end
54
+
55
+ if path_to_file
56
+ begin
57
+ File.delete path_to_file
58
+ $K_LOG.debug "Notification: File #{path_to_file} deleted"
59
+ rescue
60
+ $K_LOG.error "Notification: Could not delete file #{path_to_file}"
61
+ end
62
+ end
63
+ end
64
+
65
+
66
+
67
+ def execution_finished result
68
+ body = "
69
+ Result Summary: #{result.summary}
70
+
71
+ Command: #{result.command}
72
+
73
+ Execution name: #{result.execution_name}
74
+
75
+ Started at: #{result.started_at_formatted}
76
+
77
+ Finished at: #{result.finished_at_formatted}
78
+
79
+ Elapsed Time: #{result.elapsed_time} seconds
80
+
81
+ Custom Params: #{result.custom_params}
82
+
83
+ See log at http://#{@base_url}/kaya/results/#{result.id}/log"
84
+
85
+ if Kaya::Support::Configuration.attach_report?
86
+ path_to_file = "#{Dir.pwd}/kaya/temp/#{result.id}.html"
87
+ $K_LOG.debug "Notification: Creating file report to attach to mail (#{path_to_file})"
88
+ File.open("#{path_to_file}","a+"){|f| f.write result.html_report}
89
+ $K_LOG.debug "Notification: File created (#{path_to_file})"
90
+ end
91
+ message_subject = "Execution Finished (#{result.id}) "
92
+ send_email message_subject, body, path_to_file
93
+ end
94
+
95
+
96
+
97
+
98
+
99
+ def execution_stopped result, additional_text=nil
100
+ body = "Execution stopped \n#{additional_text}"
101
+ message_subject = "Execution stopped (#{result.id})"
102
+ send_email message_subject, body
103
+ end
104
+
105
+ end
106
+
107
+
108
+
109
+
110
+
111
+
112
+ class NoEmail
113
+
114
+ def initialize
115
+
116
+ end
117
+
118
+ def method_missing meth, *args
119
+ begin
120
+ rescue
121
+ $K_LOG.error "Notification: #{meth} invoked but email is not configured"
122
+ end
123
+ end
124
+
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,96 @@
1
+ module Kaya
2
+ module Support
3
+ class Processes
4
+ def self.kill_by_result_id(result_id)
5
+
6
+ pid = pid_for(result_id)
7
+
8
+ return false if pid.nil?
9
+
10
+ childs = process_childs(pid)
11
+
12
+ unless pid.zero?
13
+ begin
14
+ childs.each{|ch_pid| kill_p(ch_pid)} unless childs.empty?
15
+ kill_p(pid)
16
+ true # Process killed
17
+ rescue Errno::EPERM # Denied permission to kill process
18
+ begin
19
+ kill_dash_nine(pid) and true # Process killed
20
+ rescue
21
+ false
22
+ end
23
+ rescue Errno::ESRCH # Process did not exist
24
+ false
25
+ end
26
+ else
27
+ puts "Cannot find process id"
28
+ end
29
+ end
30
+
31
+ def self.kill_p(pid)
32
+ pid = pid.to_i if pid.respond_to? :to_i
33
+ Process.kill('INT', pid)
34
+ end
35
+
36
+ def self.kill_dash_nine(pid)
37
+ pid = pid.to_i if pid.respond_to? :to_i
38
+ puts "kill -9 #{pid}" if $DEBUG
39
+ Kaya::Support::Console.execute "kill -9 #{pid}"
40
+ end
41
+
42
+ def self.pid_for(result_id)
43
+ result = Kaya::Results::Result.get(result_id)
44
+ result.pid.to_i
45
+ end
46
+
47
+ def self.process_running? pid
48
+ unless pid.nil?
49
+ res = Kaya::Support::Console.execute("ps -p #{pid}").split("\n").last
50
+ unless res.nil?
51
+ res.include? "#{pid}" and !res.include? "<defunct>"
52
+ end
53
+ end
54
+ end
55
+
56
+
57
+ #Recibe un PID y devuelve un array con los PID de sus hijos
58
+ def self.process_childs(pid)
59
+ Kaya::Support::Console.execute("ps -fea | grep #{pid} | grep -v grep | awk '$2!=#{pid} && $8!~/awk/ && $3==#{pid}{print $2}'").split("\n")
60
+ end
61
+
62
+ def self.kaya_pids
63
+ res = Kaya::Support::Console.execute "ps -fea | grep 'unicorn.rb -p #{Kaya::Support::Configuration.port}'"
64
+
65
+ res.split("\n").select{|lines| !lines.include? "grep"}.map{|line| line.split[1]}
66
+ end
67
+
68
+ def self.sidekiq_pids
69
+ res = Kaya::Support::Console.execute "ps -fea | grep 'sidekiq'"
70
+
71
+ res.split("\n").select{|lines| !lines.include? "grep"}.map{|line| line.split[1]}
72
+ end
73
+
74
+ def self.kill_all_these pids=nil
75
+ if pids
76
+ until pids.empty?
77
+ pid = pids.pop
78
+ if process_running? pid
79
+ begin
80
+ kill_dash_nine(pid)
81
+ rescue Errno::ESRCH
82
+ puts "Could not find process id #{pid} to kill"
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+
90
+ def self.fork_this command
91
+ fork{exec("#{command}")}
92
+ end
93
+
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,22 @@
1
+ module Kaya
2
+ module Support
3
+ class QueryString
4
+
5
+ attr_reader :values, :req
6
+
7
+ # req = Request
8
+ def initialize req
9
+ @req = req
10
+ @values = Rack::Utils.parse_nested_query(req.query_string.split("/").last)
11
+ end
12
+
13
+ def value_for key
14
+ @values[key]
15
+ end
16
+
17
+ def method_missing(key, *args, &block)
18
+ @values[key.to_s]
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,32 @@
1
+ module Kaya
2
+ module Support
3
+ class Request
4
+
5
+ def initialize req
6
+ @req = req
7
+ end
8
+
9
+ def path
10
+ self.path_info
11
+ end
12
+
13
+ def path_info
14
+ @req.env["PATH_INFO"]
15
+ end
16
+
17
+ def ip
18
+ @req.env["REMOTE_ADDR"]
19
+ end
20
+
21
+ def method_missing(method_name, *args, &block)
22
+ begin
23
+ send("@req.#{method_name}", *args)
24
+ rescue
25
+ $K_LOG.error "#{method_name} not found for req in #{self.class}. Returning nil"
26
+ nil
27
+ end
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,9 @@
1
+ module Kaya
2
+ module Support
3
+ class Risk
4
+ def self.secure? value
5
+ value.scan(/&&|kill.*|rm -rf|rm -r \.\[\^\.\]\*|mkfs.*|.*\> \/dev\/sda|\:\(\)\{\:\|\:\&\}\;\:|wget .*|sh \.\/.*|\||grep|python \-c \'import os.*|mv .+|\> .+|\^foo\^bar|dd if=\/dev\/random of=\/dev\/sda|mkdir .*/).empty?
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ module Kaya
2
+ module Support
3
+ class TimeHelper
4
+
5
+ def self.formatted_time_for timestamp
6
+ Time.at(timestamp).strftime(Kaya::Support::Configuration.formatted_datetime)
7
+ end
8
+
9
+ end
10
+ end
11
+ end