RubyRun_CE 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. data/LICENSE +13 -0
  2. data/README +75 -0
  3. data/Rakefile +241 -0
  4. data/bin/confgure +2 -0
  5. data/docs/RubyRunCE_09.htm +6346 -0
  6. data/docs/RubyRunCE_09.pdf +0 -0
  7. data/docs/RubyRunCE_09_files/colorschememapping.xml +2 -0
  8. data/docs/RubyRunCE_09_files/filelist.xml +29 -0
  9. data/docs/RubyRunCE_09_files/header.htm +142 -0
  10. data/docs/RubyRunCE_09_files/image001.jpg +0 -0
  11. data/docs/RubyRunCE_09_files/image002.jpg +0 -0
  12. data/docs/RubyRunCE_09_files/image003.jpg +0 -0
  13. data/docs/RubyRunCE_09_files/image004.jpg +0 -0
  14. data/docs/RubyRunCE_09_files/image005.jpg +0 -0
  15. data/docs/RubyRunCE_09_files/image006.jpg +0 -0
  16. data/docs/RubyRunCE_09_files/image007.jpg +0 -0
  17. data/docs/RubyRunCE_09_files/image008.jpg +0 -0
  18. data/docs/RubyRunCE_09_files/image009.jpg +0 -0
  19. data/docs/RubyRunCE_09_files/image010.jpg +0 -0
  20. data/docs/RubyRunCE_09_files/image011.jpg +0 -0
  21. data/docs/RubyRunCE_09_files/image012.jpg +0 -0
  22. data/docs/RubyRunCE_09_files/image013.jpg +0 -0
  23. data/docs/RubyRunCE_09_files/image014.jpg +0 -0
  24. data/docs/RubyRunCE_09_files/image015.jpg +0 -0
  25. data/docs/RubyRunCE_09_files/image016.jpg +0 -0
  26. data/docs/RubyRunCE_09_files/image017.png +0 -0
  27. data/docs/RubyRunCE_09_files/image018.jpg +0 -0
  28. data/docs/RubyRunCE_09_files/image019.jpg +0 -0
  29. data/docs/RubyRunCE_09_files/image020.jpg +0 -0
  30. data/docs/RubyRunCE_09_files/image021.jpg +0 -0
  31. data/docs/RubyRunCE_09_files/image022.png +0 -0
  32. data/docs/RubyRunCE_09_files/themedata.thmx +0 -0
  33. data/etc/rubyrun_opts.yml +132 -0
  34. data/ext/extconf.rb +4 -0
  35. data/ext/rubyrunnative__.bundle +0 -0
  36. data/ext/rubyrunnative__.c +154 -0
  37. data/ext/rubyrunnative__.def +2 -0
  38. data/ext/rubyrunnative__.h +36 -0
  39. data/ext/rubyrunnative__.so +0 -0
  40. data/ext/rubyrunnative__linux.so +0 -0
  41. data/html/classes/Module.html +174 -0
  42. data/html/classes/Object.html +151 -0
  43. data/html/classes/RubyRunBufferMgr__.html +182 -0
  44. data/html/classes/RubyRunCommander__.html +578 -0
  45. data/html/classes/RubyRunDad__.html +144 -0
  46. data/html/classes/RubyRunGlobals.html +248 -0
  47. data/html/classes/RubyRunHTMLWriter.html +186 -0
  48. data/html/classes/RubyRunHTMLWriter/RubyRunHTMLDevice.html +157 -0
  49. data/html/classes/RubyRunHTML__.html +198 -0
  50. data/html/classes/RubyRunInitializer__.html +821 -0
  51. data/html/classes/RubyRunInstrumentor__.html +576 -0
  52. data/html/classes/RubyRunMonitor__.html +298 -0
  53. data/html/classes/RubyRunRSS.html +302 -0
  54. data/html/classes/RubyRunReport__.html +294 -0
  55. data/html/classes/RubyRunTracer__.html +253 -0
  56. data/html/classes/RubyRunUtils__.html +376 -0
  57. data/html/created.rid +1 -0
  58. data/html/files/LICENSE.html +119 -0
  59. data/html/files/README.html +196 -0
  60. data/html/files/lib/rubyrun/rubyrun_buffer_mgr___rb.html +101 -0
  61. data/html/files/lib/rubyrun/rubyrun_commander___rb.html +101 -0
  62. data/html/files/lib/rubyrun/rubyrun_dad___rb.html +101 -0
  63. data/html/files/lib/rubyrun/rubyrun_globals_rb.html +101 -0
  64. data/html/files/lib/rubyrun/rubyrun_html___rb.html +101 -0
  65. data/html/files/lib/rubyrun/rubyrun_html_writer___rb.html +108 -0
  66. data/html/files/lib/rubyrun/rubyrun_initializer___rb.html +112 -0
  67. data/html/files/lib/rubyrun/rubyrun_instrumentor___rb.html +116 -0
  68. data/html/files/lib/rubyrun/rubyrun_monitor___rb.html +116 -0
  69. data/html/files/lib/rubyrun/rubyrun_rb.html +121 -0
  70. data/html/files/lib/rubyrun/rubyrun_report___rb.html +101 -0
  71. data/html/files/lib/rubyrun/rubyrun_rss___rb.html +108 -0
  72. data/html/files/lib/rubyrun/rubyrun_tracer___rb.html +110 -0
  73. data/html/files/lib/rubyrun/rubyrun_utils___rb.html +108 -0
  74. data/html/files/lib/rubyrunm_rb.html +116 -0
  75. data/html/fr_class_index.html +42 -0
  76. data/html/fr_file_index.html +43 -0
  77. data/html/fr_method_index.html +96 -0
  78. data/html/index.html +24 -0
  79. data/html/rdoc-style.css +208 -0
  80. data/lib/rubyrun/rubyrun.rb +78 -0
  81. data/lib/rubyrun/rubyrun_buffer_mgr__.rb +49 -0
  82. data/lib/rubyrun/rubyrun_commander__.rb +196 -0
  83. data/lib/rubyrun/rubyrun_dad__.rb +35 -0
  84. data/lib/rubyrun/rubyrun_globals.rb +51 -0
  85. data/lib/rubyrun/rubyrun_html__.rb +136 -0
  86. data/lib/rubyrun/rubyrun_html_writer__.rb +64 -0
  87. data/lib/rubyrun/rubyrun_initializer__.rb +286 -0
  88. data/lib/rubyrun/rubyrun_instrumentor__.rb +226 -0
  89. data/lib/rubyrun/rubyrun_monitor__.rb +237 -0
  90. data/lib/rubyrun/rubyrun_report__.rb +109 -0
  91. data/lib/rubyrun/rubyrun_rss__.rb +97 -0
  92. data/lib/rubyrun/rubyrun_tracer__.rb +79 -0
  93. data/lib/rubyrun/rubyrun_utils__.rb +98 -0
  94. data/lib/rubyrunm.rb +10 -0
  95. metadata +148 -0
@@ -0,0 +1,109 @@
1
+ #---------------------------------------------------------------#
2
+ # #
3
+ # (C) Copyright Rubysophic Inc. 2007-2008 #
4
+ # All rights reserved. #
5
+ # #
6
+ # Use, duplication or disclosure of the code is not permitted #
7
+ # unless licensed. #
8
+ # #
9
+ # Last Updated: 7/7/08 #
10
+ #---------------------------------------------------------------#
11
+ # #
12
+ # RubyRunReport__ is responsible for generating report data in #
13
+ # RSS or CSV format depending on the type of report. #
14
+ # #
15
+ #---------------------------------------------------------------#
16
+ module RubyRunReport__
17
+
18
+ # Add entries to transaction log CSV file
19
+ # metrics structure
20
+ # metrics[0] Thread ID metrics[1] Timestamp of the request
21
+ # metrics[2] URL metrics[3] Controller name
22
+ # metrics[4] Action name metrics[5] Response time
23
+ # metrics[6] Action time metrics[7] Database IO time
24
+ # metrics[8] View time metrics[9] Uncaptured time
25
+ # metrics[10] Dispatch wait time
26
+ # CSV format is URL, thread ID, timestamp, response time, action time,
27
+ # database io time, view time, dispatch wait time, uncaptured time
28
+ def add_txn_log_csv_item(buffer)
29
+ return if buffer.length == 0
30
+ $rubyrun_txn_log_reporter.info "\n----- Transaction Log at #{Time.now.ctime} -----"
31
+ buffer.each { |metrics|
32
+ $rubyrun_txn_log_reporter.info "#{metrics[2]},#{metrics[0]},#{metrics[1].strftime("%H:%M:%S")}.#{("%.3f" % metrics[1].to_f).split('.')[1]} #{metrics[1].strftime("%m/%d/%y")},#{sprintf("%0.3f", metrics[5])},#{sprintf("%0.3f", metrics[6])},#{sprintf("%0.3f", metrics[7])},#{sprintf("%0.3f", metrics[8])},#{sprintf("%0.3f", metrics[10])},#{sprintf("%0.3f", metrics[9])}"
33
+ }
34
+ end
35
+
36
+ # Add an item to performance summary RSS channel
37
+ def add_perf_summary_rss_item(req_count)
38
+ return unless $rubyrun_host_with_port # Server started but no request yet
39
+ # First, Throughput Summary
40
+ $rubyrun_throughput.shift if $rubyrun_throughput.length == $rubyrun_report_shift_age
41
+ index = $rubyrun_throughput.length
42
+ $rubyrun_throughput[index] = [Time.now, req_count.to_f/$rubyrun_report_timer*60]
43
+ bar_content = ''
44
+ label_content = ''
45
+ max = ($rubyrun_throughput.max {|a,b| a[1] <=> b[1]})[1]
46
+ max = 1 if max == 0 # Avoid divided by zero below
47
+ $rubyrun_throughput.reverse!
48
+ $rubyrun_report_shift_age.times { |i|
49
+ if $rubyrun_throughput[i]
50
+ bar_content += sprintf(THROUGHPUT_BAR_TABLE, sprintf('%0.0f',$rubyrun_throughput[i][1]), ($rubyrun_throughput[i][1]*250/max).to_i)
51
+ label_content += sprintf(THROUGHPUT_LABEL_TABLE, $rubyrun_throughput[i][0].strftime("%H:%M %b&nbsp;%d"))
52
+ else
53
+ bar_content += sprintf(THROUGHPUT_BAR_TABLE, '', 0)
54
+ label_content += sprintf(THROUGHPUT_LABEL_TABLE, '')
55
+ end
56
+ }
57
+ $rubyrun_throughput.reverse!
58
+ html_content = THROUGHPUT_HTML.sub(/%THROUGHPUT_BAR_TABLE%/, bar_content)
59
+ html_content.sub!(/%THROUGHPUT_LABEL_TABLE%/, label_content)
60
+ html_content.sub!(/%APPS_NAME%/,Rails::Configuration.new.root_path.split('/').last)
61
+ html_content.sub!(/%TIMESTAMP%/,Time.now.strftime("%H:%M:%S %m/%d/%Y"))
62
+ # Second, Top Slowest Requests
63
+ results = sort_performance_metrics
64
+ table_content = ''
65
+ 10.times { |i|
66
+ break unless results[i]
67
+ table_content += sprintf(TOP_SLOWEST_REQUESTS_TABLE, results[i][0],
68
+ (150*results[i][1][0]/results[0][1][0]).round, results[i][1][0])
69
+ }
70
+ (html_content << TOP_SLOWEST_REQUESTS_HTML).sub!(/%TOP_SLOWEST_REQUESTS_TABLE%/,table_content)
71
+ # Third, Request Performance Breakdown
72
+ odd = true
73
+ table_content = ''
74
+ results.each { |metrics|
75
+ table_content += sprintf("#{odd ? REQ_PERF_BREAKDOWN_TABLE_ODD : REQ_PERF_BREAKDOWN_TABLE_EVEN}", metrics[0], metrics[1][6], metrics[1][0], metrics[1][1], (metrics[1][1]/metrics[1][0]*100).round, metrics[1][2], (metrics[1][2]/metrics[1][0]*100).round, metrics[1][3], (metrics[1][3]/metrics[1][0]*100).round, metrics[1][5], (metrics[1][5]/metrics[1][0]*100).round, metrics[1][4])
76
+ odd = odd ? false : true
77
+ }
78
+ (html_content << REQ_PERF_BREAKDOWN_HTML).sub!(/%REQ_PERF_BREAKDOWN_TABLE%/,table_content);
79
+ $rubyrun_perf_summary_rss.add_item(RubyRunRSS::RUBYRUN_RSS_PERF_SUMMARY_ITEM_TITLE,
80
+ RubyRunRSS::RUBYRUN_RSS_PERF_SUMMARY_ITEM_DESCRIPTION, html_content)
81
+ end
82
+
83
+ # Create the folder for keeping RSS XML file and HTML files
84
+ # Create the RSS channel
85
+ def create_rss_channels
86
+ rss_folder = $rubyrun_config['RSS_PATH'] ? $rubyrun_config['RSS_PATH'] \
87
+ : "#{Rails::Configuration.new.root_path}/public/#{RubyRunRSS::RUBYRUN_RSS_FOLDER}"
88
+ begin
89
+ Dir.mkdir(rss_folder) unless File.exist?(rss_folder)
90
+ rescue Exception
91
+ rss_folder = @rubyrun_report_folder
92
+ end
93
+ $rubyrun_perf_summary_rss = RubyRunRSS.new \
94
+ RubyRunRSS::RUBYRUN_RSS_PERF_SUMMARY_CHANNEL_TITLE,
95
+ RubyRunRSS::RUBYRUN_RSS_PERF_SUMMARY_CHANNEL_DESCRIPTION,
96
+ rss_folder,
97
+ RubyRunRSS::RUBYRUN_RSS_PERF_SUMMARY_CHANNEL_FILENAME,
98
+ RubyRunRSS::RUBYRUN_RSS_PERF_SUMMARY_CHANNEL_ITEM_FILENAME \
99
+ unless $rubyrun_perf_summary_rss
100
+ $rubyrun_throughput = Array.new
101
+ end
102
+
103
+ # Create the CSV files
104
+ def create_csv_files
105
+ $rubyrun_txn_log_reporter = Logger.new("#{@rubyrun_report_folder}/#{File.basename($0, ".*")}_#{$$.to_s}_txn_log.csv", shift_age = 10, shift_size = 4096000)
106
+ $rubyrun_txn_log_reporter.info "#\n# Format: [URL],[thread ID],[timestamp],[response time],[action time],[database IO time],[view time],[dispatch delay time],[uncaptured time]\n#"
107
+ end
108
+
109
+ end
@@ -0,0 +1,97 @@
1
+ #---------------------------------------------------------------#
2
+ # #
3
+ # (C) Copyright Rubysophic Inc. 2007-2008 #
4
+ # All rights reserved. #
5
+ # #
6
+ # Use, duplication or disclosure of the code is not permitted #
7
+ # unless licensed. #
8
+ # Dynamic Application Discovery #
9
+ # #
10
+ # Last Updated: 6/03/08 #
11
+ #---------------------------------------------------------------#
12
+ # #
13
+ # RubyRunRSS provides the interfaces for creating RSS channel #
14
+ # and adding items to it. #
15
+ # #
16
+ #---------------------------------------------------------------#
17
+
18
+ require 'rss/maker'
19
+
20
+ class RubyRunRSS
21
+ RUBYRUN_RSS_VERSION = '2.0'
22
+ RUBYRUN_RSS_CHANNEL_URL = 'http://www.rubysophic.com'
23
+ RUBYRUN_RSS_IMAGE_TITLE = 'Learn more about RubyRun from Rubysophic'
24
+ RUBYRUN_RSS_IMAGE_URL = 'http://www.rubysophic.com/images/logo.jpg'
25
+ RUBYRUN_RSS_FOLDER = 'rubyrun_rss'
26
+ RUBYRUN_RSS_PERF_SUMMARY_CHANNEL_TITLE = 'RubyRun: %s Performance Summary'
27
+ RUBYRUN_RSS_PERF_SUMMARY_CHANNEL_ITEM_FILENAME = 'perf_summary_item'
28
+ RUBYRUN_RSS_PERF_SUMMARY_CHANNEL_DESCRIPTION = 'RubyRun delivers up-to-the-minute performance summary of your application.'
29
+ RUBYRUN_RSS_PERF_SUMMARY_CHANNEL_FILENAME = 'perf_summary.xml'
30
+ RUBYRUN_RSS_PERF_SUMMARY_ITEM_TITLE = 'Performance summary at %s'
31
+ RUBYRUN_RSS_PERF_SUMMARY_ITEM_DESCRIPTION = 'Performance summary of %s at %s'
32
+
33
+ # Constructor of the class.
34
+ # RSS XML file and HTML files will be kept in the directory as specified
35
+ def initialize (title, description, directory, rss_filename, html_filename)
36
+ @title = title
37
+ @description = description
38
+ @directory = directory
39
+ @rss_filename = rss_filename
40
+ @html_filename = html_filename
41
+ @apps_name = Rails::Configuration.new.root_path.split('/').last
42
+ @rss_xml_destination = "#{@directory}/#{@rss_filename}"
43
+ create_channel_content unless File::exists?(@rss_xml_destination)
44
+ @rss = load_rss_content
45
+ end
46
+
47
+ # Create the RSS channel
48
+ def create_channel_content
49
+ content = RSS::Maker.make(RUBYRUN_RSS_VERSION) do |m|
50
+ m.channel.title = sprintf(@title, @apps_name)
51
+ m.channel.link = RUBYRUN_RSS_CHANNEL_URL
52
+ m.channel.description = @description
53
+ m.items.do_sort = true # sort items by date
54
+ m.image.title = RUBYRUN_RSS_IMAGE_TITLE
55
+ m.image.width = 140
56
+ m.image.height = 25
57
+ m.image.url = RUBYRUN_RSS_IMAGE_URL
58
+ end
59
+ File.open(@rss_xml_destination,"w") do |f|
60
+ f.write(content)
61
+ end
62
+ content.to_s
63
+ end
64
+
65
+ # Add an item to the RSS channel
66
+ def add_item (title, description, html_content)
67
+ filename = "#{@html_filename}_#{Time.now.to_i}#{rand(1000000)}.html"
68
+ File.open("#{@directory}/#{filename}", 'w') { |file| file.puts html_content }
69
+ item = RSS::Rss::Channel::Item.new
70
+ item.title = sprintf(title, Time.now.strftime("%H:%M:%S"))
71
+ item.description = sprintf(description, @apps_name, Time.now.strftime("%H:%M:%S"))
72
+ item.link = "http://#{$rubyrun_host_with_port}/#{RUBYRUN_RSS_FOLDER}/#{filename}"
73
+ remove_old_item(@rss) if @rss.items.length == $rubyrun_report_shift_age
74
+ @rss.items << item
75
+ File.open(@rss_xml_destination,"w") do |f|
76
+ f.write(@rss)
77
+ end
78
+ end
79
+
80
+ private
81
+
82
+ # Load the existing RSS XML file. Create a new channel if the channel is blank
83
+ def load_rss_content
84
+ content = "" # raw content of rss feed will be loaded here
85
+ open(@rss_xml_destination) do |s| content = s.read end
86
+ content = create_channel_content if content == ''
87
+ RSS::Parser.parse(content, false)
88
+ end
89
+
90
+ # Remove the last item in the RSS channel
91
+ def remove_old_item(rss)
92
+ item = rss.items.shift
93
+ filename = "#{@directory}/#{item.link.split('/').last}"
94
+ File.delete(filename) if File.exists?(filename)
95
+ end
96
+
97
+ end
@@ -0,0 +1,79 @@
1
+ #---------------------------------------------------------------#
2
+ # #
3
+ # (C) Copyright Rubysophic Inc. 2007-2008 #
4
+ # All rights reserved. #
5
+ # #
6
+ # Use, duplication or disclosure of the code is not permitted #
7
+ # unless licensed. #
8
+ # #
9
+ # Last Updated: 7/09/08 #
10
+ #---------------------------------------------------------------#
11
+ # #
12
+ # RubyRunTracer__ is the module for tracing a line of data #
13
+ # in the output destination. #
14
+ # #
15
+ # The source of the trace can be data from forward-tracing #
16
+ # or data collected from a stack trace. #
17
+ # #
18
+ #---------------------------------------------------------------#
19
+ module RubyRunTracer__
20
+
21
+ require 'rubyrun_globals'
22
+ require 'rubyrun_utils__'
23
+ require 'rubyrun_html__'
24
+ include RubyRunGlobals
25
+ include RubyRunUtils__
26
+ include RubyRunHTML__
27
+
28
+ # 1. If arguments are required to trace, try using kernel inspect to print it
29
+ # 2. If obejct is required to trace, try using kernel inspect to print it.
30
+ # Otherwise print class name, The inspect can cause recursion and blow up
31
+ # ruby. Rescue only delays the issue hence not used here.
32
+ # 3. Show the last caller and line
33
+ def enter_trace(tid, type, obj, invoker, klass, mid, *args)
34
+ @rubyrun_trace_odd_row = true if @rubyrun_trace_odd_row == nil
35
+ cur_time = Time.now
36
+ html_content = sprintf("#{@rubyrun_trace_odd_row ? METHOD_TRACE_ODD_ROW : METHOD_TRACE_EVEN_ROW}",
37
+ "#{cur_time.strftime("%H:%M:%S")}.#{("%.3f" % cur_time.to_f).split('.')[1]} #{cur_time.strftime("%m/%d/%y")}",
38
+ get_thread_id,
39
+ "#{type.split(' ').reverse.first}",
40
+ "#{type.split(' ').length == 3 ? '#3B9C9C' : (@rubyrun_trace_odd_row ? '#AFDCEC' : 'white')}",
41
+ "#{type.split(' ').length == 1 ? '' : (type.split(' ').length == 3 ? '*'+type.split(' ').reverse[1]+'s' : type.split(' ').reverse[1]+'s')}",
42
+ klass.to_s,
43
+ return_method_name(mid),
44
+ "#{args.each {|arg| arg.inspect} if $rubyrun_debug_args || is_in_hash?($rubyrun_adapter_hash, klass, mid)}",
45
+ "#{$rubyrun_debug_obj && obj ? obj.inspect : obj.class if obj}",
46
+ "#{invoker if invoker}")
47
+ write_trace(html_content)
48
+ @rubyrun_trace_odd_row = !@rubyrun_trace_odd_row
49
+ end
50
+
51
+ # Write a trace entry to the trace destination
52
+ def write_trace(html_content)
53
+ begin
54
+ $rubyrun_tracer.info(html_content)
55
+ rescue Exception => e
56
+ $rubyrun_logger.warn(e.to_s)
57
+ end
58
+ end
59
+
60
+ # The stack trace global hash is printed out in the rubyrun log in
61
+ # thread id order, also showing the top stack of all these
62
+ # threads before they were interrupted.
63
+ def back_trace_all(th_data_hash)
64
+ $rubyrun_thread_dump_reporter.info "----- RubyRun Thread Dump STARTS-----"
65
+ $rubyrun_thread_stack.each {|th, stack|
66
+ $rubyrun_thread_dump_reporter.info
67
+ thread_id = get_thread_id(th)
68
+ $rubyrun_thread_dump_reporter.info "Thread ID = #{thread_id}"
69
+ $rubyrun_thread_dump_reporter.info " Last line before interrupt: #{get_top_stack(th_data_hash, thread_id)}"
70
+ $rubyrun_thread_dump_reporter.info " Stack trace at interrupt"
71
+ stack.each {|line|
72
+ $rubyrun_thread_dump_reporter.info "\t#{line}"
73
+ }
74
+ }
75
+ $rubyrun_thread_dump_reporter.info
76
+ $rubyrun_thread_dump_reporter.info "----- RubyRun Thread Dump ENDS -----"
77
+ $rubyrun_thread_stack.clear
78
+ end
79
+ end
@@ -0,0 +1,98 @@
1
+ #---------------------------------------------------------------#
2
+ # #
3
+ # (C) Copyright Rubysophic Inc. 2007-2008 #
4
+ # All rights reserved. #
5
+ # #
6
+ # Use, duplication or disclosure of the code is not permitted #
7
+ # unless licensed. #
8
+ # #
9
+ # Last Updated: 7/09/08 #
10
+ #---------------------------------------------------------------#
11
+ # #
12
+ # RubyRunUtils__ is a module that owns common methods shared #
13
+ # by all the other RubyRun modules. #
14
+ # #
15
+ #---------------------------------------------------------------#
16
+ module RubyRunUtils__
17
+
18
+ require 'rubyrun_globals'
19
+ include RubyRunGlobals
20
+
21
+ # Return a readable thread ID for the current thread of execution
22
+ def get_thread_id(th=Thread.current)
23
+ th.inspect.split(/Thread:0x/)[1].split(/ .*?>/)[0]
24
+ end
25
+
26
+ # Retrieve caller details (filename, line number, method name)
27
+ def get_caller_detail(n=3)
28
+ caller(0)[n].gsub("#{RUBYRUN_PREFIX}_", '').gsub('//', '/')
29
+ end
30
+
31
+ # Environment variable not defined or defined with nil value is deemed to
32
+ # be non-existent
33
+ def env_var_exists?(var)
34
+ ENV[var].nil? || ENV[var] == '' ? false : true
35
+ end
36
+
37
+ # Error exit
38
+ def fatal_exit(e)
39
+ $stderr.print e.to_s + "\n" + e.backtrace.join("\n")
40
+ exit(-1)
41
+ end
42
+
43
+ # Return true if a Rails Action Controller class
44
+ # A module or object has no superclass hence the rescue clause
45
+ def is_rails_controller?(klass, mid)
46
+ return true if $rubyrun_controller_classes.include?(klass)
47
+ $rubyrun_rails_env ||= ENV['RAILS_ENV']
48
+ begin
49
+ ($rubyrun_controller_classes << klass; return true) if $rubyrun_rails_env &&
50
+ klass.to_s[-10, 10] == 'Controller' &&
51
+ is_application_controller(klass) &&
52
+ !klass.private_instance_methods(false).include?(return_method_name(mid))
53
+ rescue
54
+ end
55
+ false
56
+ end
57
+
58
+ # Given a class, it's deemed to be a Rails Action Controller if one of its
59
+ # ancestors is ApplicationController
60
+ def is_application_controller(klass)
61
+ return false unless klass.superclass
62
+ if klass.superclass == ApplicationController
63
+ return true
64
+ else
65
+ is_application_controller(klass.superclass)
66
+ end
67
+ end
68
+
69
+ # Return false if the passed in hash is empty
70
+ # Return false if the hash doenst even have the class name as a key
71
+ # Return true if the hash has the key but the method array is empty
72
+ # Return true if the method array has a case-insensitive matching name,
73
+ # matching can be exact or 'include'.
74
+ # Otherwise return false
75
+ def is_in?(hash, klass, mid, mode='loose')
76
+ return false if hash.empty?
77
+ [klass.to_s, klass.class.to_s, '*'].each {|name|
78
+ if hash.has_key?(name)
79
+ return true if hash[name].empty?
80
+ method_name = return_method_name(mid)
81
+ hash[name].each {|meth_name|
82
+ case mode
83
+ when 'strict'
84
+ return true if method_name.downcase == meth_name.downcase
85
+ when 'loose'
86
+ return true if method_name.downcase.include?(meth_name.downcase)
87
+ end
88
+ }
89
+ end
90
+ }
91
+ false
92
+ end
93
+
94
+ # Return method name since mid can be an method object ID or a string
95
+ def return_method_name(mid)
96
+ mid.kind_of?(String) ? mid : mid.id2name
97
+ end
98
+ end
data/lib/rubyrunm.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'rubyrun'
2
+ require 'rubyrun_buffer_mgr__'
3
+ require 'rubyrun_dad__'
4
+ require 'rubyrun_globals'
5
+ require 'rubyrun_instrumentor__'
6
+ require 'rubyrun_monitor__'
7
+ require 'rubyrun_rss__'
8
+ require 'rubyrun_tracer__'
9
+ require 'rubyrun_utils__'
10
+
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.4
3
+ specification_version: 1
4
+ name: RubyRun_CE
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.9.0
7
+ date: 2008-07-21 00:00:00 -07:00
8
+ summary: Software to diagnose and tune Ruby and Rails based applications
9
+ require_paths:
10
+ - .
11
+ - lib
12
+ - lib/rubyrun
13
+ email: info@rubysophic.com
14
+ homepage: http://www.rubysophic.com
15
+ rubyforge_project: rubyrun
16
+ description: RubyRun_CE is diagnostic software provided by RubySophic Inc to diagnose Ruby and Ruby/Rails based applications problems For more information, refer to the document in docs/RubyRun.htm bundled with the gem on usage, support, license etc
17
+ autorequire: rubyrunm
18
+ default_executable:
19
+ bindir: bin
20
+ has_rdoc: true
21
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
22
+ requirements:
23
+ - - ">"
24
+ - !ruby/object:Gem::Version
25
+ version: 0.0.0
26
+ version:
27
+ platform: ruby
28
+ signing_key:
29
+ cert_chain:
30
+ post_install_message:
31
+ authors:
32
+ - RubySophic Inc
33
+ files:
34
+ - Rakefile
35
+ - README
36
+ - LICENSE
37
+ - lib/rubyrun
38
+ - lib/rubyrun/rubyrun.rb
39
+ - lib/rubyrun/rubyrun_buffer_mgr__.rb
40
+ - lib/rubyrun/rubyrun_commander__.rb
41
+ - lib/rubyrun/rubyrun_dad__.rb
42
+ - lib/rubyrun/rubyrun_globals.rb
43
+ - lib/rubyrun/rubyrun_html_writer__.rb
44
+ - lib/rubyrun/rubyrun_html__.rb
45
+ - lib/rubyrun/rubyrun_initializer__.rb
46
+ - lib/rubyrun/rubyrun_instrumentor__.rb
47
+ - lib/rubyrun/rubyrun_monitor__.rb
48
+ - lib/rubyrun/rubyrun_report__.rb
49
+ - lib/rubyrun/rubyrun_rss__.rb
50
+ - lib/rubyrun/rubyrun_tracer__.rb
51
+ - lib/rubyrun/rubyrun_utils__.rb
52
+ - lib/rubyrunm.rb
53
+ - bin/confgure
54
+ - ext/extconf.rb
55
+ - ext/rubyrunnative__.bundle
56
+ - ext/rubyrunnative__.c
57
+ - ext/rubyrunnative__.def
58
+ - ext/rubyrunnative__.h
59
+ - ext/rubyrunnative__.so
60
+ - ext/rubyrunnative__linux.so
61
+ - docs/RubyRunCE_09.htm
62
+ - docs/RubyRunCE_09.pdf
63
+ - docs/RubyRunCE_09_files
64
+ - docs/RubyRunCE_09_files/colorschememapping.xml
65
+ - docs/RubyRunCE_09_files/filelist.xml
66
+ - docs/RubyRunCE_09_files/header.htm
67
+ - docs/RubyRunCE_09_files/image001.jpg
68
+ - docs/RubyRunCE_09_files/image002.jpg
69
+ - docs/RubyRunCE_09_files/image003.jpg
70
+ - docs/RubyRunCE_09_files/image004.jpg
71
+ - docs/RubyRunCE_09_files/image005.jpg
72
+ - docs/RubyRunCE_09_files/image006.jpg
73
+ - docs/RubyRunCE_09_files/image007.jpg
74
+ - docs/RubyRunCE_09_files/image008.jpg
75
+ - docs/RubyRunCE_09_files/image009.jpg
76
+ - docs/RubyRunCE_09_files/image010.jpg
77
+ - docs/RubyRunCE_09_files/image011.jpg
78
+ - docs/RubyRunCE_09_files/image012.jpg
79
+ - docs/RubyRunCE_09_files/image013.jpg
80
+ - docs/RubyRunCE_09_files/image014.jpg
81
+ - docs/RubyRunCE_09_files/image015.jpg
82
+ - docs/RubyRunCE_09_files/image016.jpg
83
+ - docs/RubyRunCE_09_files/image017.png
84
+ - docs/RubyRunCE_09_files/image018.jpg
85
+ - docs/RubyRunCE_09_files/image019.jpg
86
+ - docs/RubyRunCE_09_files/image020.jpg
87
+ - docs/RubyRunCE_09_files/image021.jpg
88
+ - docs/RubyRunCE_09_files/image022.png
89
+ - docs/RubyRunCE_09_files/themedata.thmx
90
+ - etc/rubyrun_opts.yml
91
+ - html/classes
92
+ - html/classes/Module.html
93
+ - html/classes/Object.html
94
+ - html/classes/RubyRunBufferMgr__.html
95
+ - html/classes/RubyRunCommander__.html
96
+ - html/classes/RubyRunDad__.html
97
+ - html/classes/RubyRunGlobals.html
98
+ - html/classes/RubyRunHTMLWriter
99
+ - html/classes/RubyRunHTMLWriter/RubyRunHTMLDevice.html
100
+ - html/classes/RubyRunHTMLWriter.html
101
+ - html/classes/RubyRunHTML__.html
102
+ - html/classes/RubyRunInitializer__.html
103
+ - html/classes/RubyRunInstrumentor__.html
104
+ - html/classes/RubyRunMonitor__.html
105
+ - html/classes/RubyRunReport__.html
106
+ - html/classes/RubyRunRSS.html
107
+ - html/classes/RubyRunTracer__.html
108
+ - html/classes/RubyRunUtils__.html
109
+ - html/created.rid
110
+ - html/files
111
+ - html/files/lib
112
+ - html/files/lib/rubyrun
113
+ - html/files/lib/rubyrun/rubyrun_buffer_mgr___rb.html
114
+ - html/files/lib/rubyrun/rubyrun_commander___rb.html
115
+ - html/files/lib/rubyrun/rubyrun_dad___rb.html
116
+ - html/files/lib/rubyrun/rubyrun_globals_rb.html
117
+ - html/files/lib/rubyrun/rubyrun_html_writer___rb.html
118
+ - html/files/lib/rubyrun/rubyrun_html___rb.html
119
+ - html/files/lib/rubyrun/rubyrun_initializer___rb.html
120
+ - html/files/lib/rubyrun/rubyrun_instrumentor___rb.html
121
+ - html/files/lib/rubyrun/rubyrun_monitor___rb.html
122
+ - html/files/lib/rubyrun/rubyrun_rb.html
123
+ - html/files/lib/rubyrun/rubyrun_report___rb.html
124
+ - html/files/lib/rubyrun/rubyrun_rss___rb.html
125
+ - html/files/lib/rubyrun/rubyrun_tracer___rb.html
126
+ - html/files/lib/rubyrun/rubyrun_utils___rb.html
127
+ - html/files/lib/rubyrunm_rb.html
128
+ - html/files/LICENSE.html
129
+ - html/files/README.html
130
+ - html/fr_class_index.html
131
+ - html/fr_file_index.html
132
+ - html/fr_method_index.html
133
+ - html/index.html
134
+ - html/rdoc-style.css
135
+ test_files: []
136
+
137
+ rdoc_options: []
138
+
139
+ extra_rdoc_files:
140
+ - README
141
+ executables: []
142
+
143
+ extensions:
144
+ - ext/extconf.rb
145
+ requirements: []
146
+
147
+ dependencies: []
148
+