maglev-webtools 0.2.1 → 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (296) hide show
  1. data/README.rdoc +38 -29
  2. data/bin/webtools +22 -1
  3. data/lib/web_tools/code_browser.rb +156 -0
  4. data/lib/web_tools/debugger.rb +96 -199
  5. data/lib/web_tools/info.rb +1 -3
  6. data/lib/web_tools/method_list.rb +67 -0
  7. data/lib/web_tools/middleware/debugger.rb +10 -16
  8. data/lib/web_tools/object_log.rb +24 -0
  9. data/lib/web_tools/session_list.rb +119 -0
  10. data/lib/web_tools/shared_page_cache.rb +30 -0
  11. data/lib/web_tools/stat_process.rb +24 -0
  12. data/lib/web_tools/statistics.rb +14 -0
  13. data/lib/web_tools/support/app_model.rb +66 -101
  14. data/lib/web_tools/support/code_browser.rb +88 -86
  15. data/lib/web_tools/support/debugger.rb +303 -0
  16. data/lib/web_tools/support/error_log.rb +33 -0
  17. data/lib/web_tools/support/ruby.rb +60 -121
  18. data/lib/web_tools/support/service_helper.rb +38 -10
  19. data/lib/web_tools/support/smalltalk_extensions.rb +12 -0
  20. data/lib/web_tools/tool.rb +48 -0
  21. data/lib/web_tools/ui.rb +14 -53
  22. data/lib/web_tools/version_report.rb +29 -0
  23. data/lib/web_tools/workspace.rb +77 -0
  24. data/lib/web_tools.rb +14 -4
  25. data/public/CodeBrowser.html +51 -0
  26. data/public/CodeMirror/LICENSE +19 -0
  27. data/public/CodeMirror/css/codemirror.css +67 -0
  28. data/public/CodeMirror/css/default.css +18 -0
  29. data/public/CodeMirror/js/codemirror.js +2131 -0
  30. data/public/CodeMirror/js/ruby.js +195 -0
  31. data/public/CodeMirror/js/smalltalk.js +139 -0
  32. data/public/Debugger.html +28 -0
  33. data/public/MethodList.html +20 -0
  34. data/public/ObjectLog.html +20 -0
  35. data/public/SessionList.html +31 -0
  36. data/public/SharedPageCache.html +78 -0
  37. data/public/Statistics.html +64 -0
  38. data/public/VersionReport.html +50 -0
  39. data/public/Workspace.html +39 -0
  40. data/public/css/CodeBrowser.css +24 -0
  41. data/public/css/Debugger.css +32 -0
  42. data/public/css/MethodList.css +8 -0
  43. data/public/css/ObjectLog.css +5 -0
  44. data/public/css/SessionList.css +9 -0
  45. data/public/css/Statistics.css +24 -0
  46. data/public/{stylesheets → css}/base/images/ui-anim_basic_16x16.gif +0 -0
  47. data/public/{stylesheets → css}/base/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  48. data/public/{stylesheets → css}/base/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  49. data/public/{stylesheets → css}/base/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  50. data/public/{stylesheets → css}/base/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  51. data/public/{stylesheets → css}/base/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  52. data/public/{stylesheets → css}/base/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  53. data/public/{stylesheets → css}/base/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  54. data/public/{stylesheets → css}/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  55. data/public/{stylesheets → css}/base/images/ui-icons_222222_256x240.png +0 -0
  56. data/public/{stylesheets → css}/base/images/ui-icons_2e83ff_256x240.png +0 -0
  57. data/public/{stylesheets → css}/base/images/ui-icons_454545_256x240.png +0 -0
  58. data/public/{stylesheets → css}/base/images/ui-icons_888888_256x240.png +0 -0
  59. data/public/{stylesheets → css}/base/images/ui-icons_cd0a0a_256x240.png +0 -0
  60. data/public/{stylesheets → css}/base/jquery.ui.accordion.css +0 -0
  61. data/public/{stylesheets → css}/base/jquery.ui.all.css +0 -0
  62. data/public/{stylesheets → css}/base/jquery.ui.autocomplete.css +0 -0
  63. data/public/{stylesheets → css}/base/jquery.ui.base.css +0 -0
  64. data/public/{stylesheets → css}/base/jquery.ui.button.css +0 -0
  65. data/public/{stylesheets → css}/base/jquery.ui.core.css +0 -0
  66. data/public/{stylesheets → css}/base/jquery.ui.datepicker.css +0 -0
  67. data/public/{stylesheets → css}/base/jquery.ui.dialog.css +0 -0
  68. data/public/{stylesheets → css}/base/jquery.ui.progressbar.css +0 -0
  69. data/public/{stylesheets → css}/base/jquery.ui.resizable.css +0 -0
  70. data/public/{stylesheets → css}/base/jquery.ui.selectable.css +0 -0
  71. data/public/{stylesheets → css}/base/jquery.ui.slider.css +0 -0
  72. data/public/{stylesheets → css}/base/jquery.ui.tabs.css +0 -0
  73. data/public/{stylesheets → css}/base/jquery.ui.theme.css +0 -0
  74. data/public/css/editor.css +25 -0
  75. data/public/css/jjmenu.css +33 -0
  76. data/public/css/menuitem.gif +0 -0
  77. data/public/css/more.gif +0 -0
  78. data/public/{stylesheets → css}/reset.css +1 -1
  79. data/public/css/smoothness/images/ui-anim_basic_16x16.gif +0 -0
  80. data/public/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  81. data/public/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  82. data/public/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  83. data/public/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  84. data/public/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  85. data/public/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  86. data/public/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  87. data/public/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  88. data/public/css/smoothness/images/ui-icons_222222_256x240.png +0 -0
  89. data/public/css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  90. data/public/css/smoothness/images/ui-icons_454545_256x240.png +0 -0
  91. data/public/css/smoothness/images/ui-icons_888888_256x240.png +0 -0
  92. data/public/css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  93. data/public/css/smoothness/jquery-ui.css +489 -0
  94. data/public/css/ui-lightness/images/ui-anim_basic_16x16.gif +0 -0
  95. data/public/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  96. data/public/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  97. data/public/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  98. data/public/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  99. data/public/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  100. data/public/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  101. data/public/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  102. data/public/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  103. data/public/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  104. data/public/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  105. data/public/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  106. data/public/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  107. data/public/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  108. data/public/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  109. data/public/css/ui-lightness/jquery-ui.css +489 -0
  110. data/public/css/webtools.css +65 -0
  111. data/public/favicon.ico +0 -0
  112. data/public/flot/API.txt +1201 -0
  113. data/public/flot/FAQ.txt +76 -0
  114. data/public/flot/LICENSE.txt +22 -0
  115. data/public/flot/Makefile +9 -0
  116. data/public/flot/NEWS.txt +508 -0
  117. data/public/flot/PLUGINS.txt +137 -0
  118. data/public/flot/README.txt +90 -0
  119. data/public/flot/examples/ajax.html +143 -0
  120. data/public/flot/examples/annotating.html +75 -0
  121. data/public/flot/examples/arrow-down.gif +0 -0
  122. data/public/flot/examples/arrow-left.gif +0 -0
  123. data/public/flot/examples/arrow-right.gif +0 -0
  124. data/public/flot/examples/arrow-up.gif +0 -0
  125. data/public/flot/examples/basic.html +38 -0
  126. data/public/flot/examples/data-eu-gdp-growth-1.json +4 -0
  127. data/public/flot/examples/data-eu-gdp-growth-2.json +4 -0
  128. data/public/flot/examples/data-eu-gdp-growth-3.json +4 -0
  129. data/public/flot/examples/data-eu-gdp-growth-4.json +4 -0
  130. data/public/flot/examples/data-eu-gdp-growth-5.json +4 -0
  131. data/public/flot/examples/data-eu-gdp-growth.json +4 -0
  132. data/public/flot/examples/data-japan-gdp-growth.json +4 -0
  133. data/public/flot/examples/data-usa-gdp-growth.json +4 -0
  134. data/public/flot/examples/graph-types.html +75 -0
  135. data/public/flot/examples/hs-2004-27-a-large_web.jpg +0 -0
  136. data/public/flot/examples/image.html +45 -0
  137. data/public/flot/examples/index.html +44 -0
  138. data/public/flot/examples/interacting-axes.html +97 -0
  139. data/public/flot/examples/interacting.html +93 -0
  140. data/public/flot/examples/layout.css +6 -0
  141. data/public/flot/examples/multiple-axes.html +60 -0
  142. data/public/flot/examples/navigate.html +118 -0
  143. data/public/flot/examples/percentiles.html +57 -0
  144. data/public/flot/examples/pie.html +756 -0
  145. data/public/flot/examples/realtime.html +83 -0
  146. data/public/flot/examples/resize.html +61 -0
  147. data/public/flot/examples/selection.html +114 -0
  148. data/public/flot/examples/setting-options.html +61 -0
  149. data/public/flot/examples/stacking.html +77 -0
  150. data/public/flot/examples/symbols.html +49 -0
  151. data/public/flot/examples/thresholding.html +54 -0
  152. data/public/flot/examples/time.html +71 -0
  153. data/public/flot/examples/tracking.html +95 -0
  154. data/public/flot/examples/turning-series.html +98 -0
  155. data/public/flot/examples/visitors.html +90 -0
  156. data/public/flot/examples/zooming.html +98 -0
  157. data/public/flot/excanvas.js +1427 -0
  158. data/public/flot/excanvas.min.js +1 -0
  159. data/public/flot/jquery.colorhelpers.js +179 -0
  160. data/public/flot/jquery.colorhelpers.min.js +1 -0
  161. data/public/flot/jquery.flot.crosshair.js +167 -0
  162. data/public/flot/jquery.flot.crosshair.min.js +1 -0
  163. data/public/flot/jquery.flot.fillbetween.js +183 -0
  164. data/public/flot/jquery.flot.fillbetween.min.js +1 -0
  165. data/public/flot/jquery.flot.image.js +238 -0
  166. data/public/flot/jquery.flot.image.min.js +1 -0
  167. data/public/flot/jquery.flot.js +2599 -0
  168. data/public/flot/jquery.flot.min.js +6 -0
  169. data/public/flot/jquery.flot.navigate.js +336 -0
  170. data/public/flot/jquery.flot.navigate.min.js +1 -0
  171. data/public/flot/jquery.flot.pie.js +750 -0
  172. data/public/flot/jquery.flot.pie.min.js +1 -0
  173. data/public/flot/jquery.flot.resize.js +60 -0
  174. data/public/flot/jquery.flot.resize.min.js +1 -0
  175. data/public/flot/jquery.flot.selection.js +344 -0
  176. data/public/flot/jquery.flot.selection.min.js +1 -0
  177. data/public/flot/jquery.flot.stack.js +184 -0
  178. data/public/flot/jquery.flot.stack.min.js +1 -0
  179. data/public/flot/jquery.flot.symbol.js +70 -0
  180. data/public/flot/jquery.flot.symbol.min.js +1 -0
  181. data/public/flot/jquery.flot.threshold.js +103 -0
  182. data/public/flot/jquery.flot.threshold.min.js +1 -0
  183. data/public/flot/jquery.js +8316 -0
  184. data/public/flot/jquery.min.js +23 -0
  185. data/public/genPacking.pl +30 -0
  186. data/public/index.html +28 -0
  187. data/public/install.tpz +66 -0
  188. data/public/installAndRun.tpz +5 -0
  189. data/public/jsTree/jquery.jstree.js +3510 -0
  190. data/public/jsTree/themes/default/d.gif +0 -0
  191. data/public/jsTree/themes/default/d.png +0 -0
  192. data/public/jsTree/themes/default/style.css +73 -0
  193. data/public/jsTree/themes/default/throbber.gif +0 -0
  194. data/public/readMe.txt +9 -0
  195. data/public/scripts/CodeBrowser.js +645 -0
  196. data/public/scripts/Debugger.js +134 -0
  197. data/public/scripts/MethodList.js +72 -0
  198. data/public/scripts/ObjectLog.js +59 -0
  199. data/public/scripts/SessionList.js +164 -0
  200. data/public/scripts/Statistics.js +266 -0
  201. data/public/scripts/editor.js +430 -0
  202. data/public/scripts/jjmenu.js +375 -0
  203. data/public/scripts/jquery-ui.js +1012 -0
  204. data/public/scripts/jquery.js +154 -0
  205. data/public/scripts/webtools.js +374 -0
  206. data/public/src/CodeBrowser.gs +416 -0
  207. data/public/src/Debugger.gs +132 -0
  208. data/public/src/MethodList.gs +130 -0
  209. data/public/src/ObjectLog.gs +73 -0
  210. data/public/src/Server.gs +544 -0
  211. data/public/src/SessionList.gs +172 -0
  212. data/public/src/SharedPageCache.gs +66 -0
  213. data/public/src/StatProcess.gs +280 -0
  214. data/public/src/StatProcessType.gs +242 -0
  215. data/public/src/StatStatistic.gs +381 -0
  216. data/public/src/Statistics.gs +222 -0
  217. data/public/src/Statmonitor.gs +490 -0
  218. data/public/src/Tool.gs +86 -0
  219. data/public/src/VersionReport.gs +52 -0
  220. data/public/src/Workspace.gs +163 -0
  221. data/views/debugger.rhtml +6 -9
  222. metadata +344 -243
  223. data/lib/web_tools/#debugger.rb# +0 -212
  224. data/lib/web_tools/browser.rb +0 -45
  225. data/public/images/favicon.ico +0 -0
  226. data/public/javascript/CodeMirror/LICENSE +0 -23
  227. data/public/javascript/CodeMirror/css/Smalltalk.css +0 -34
  228. data/public/javascript/CodeMirror/js/codemirror.js +0 -582
  229. data/public/javascript/CodeMirror/js/editor.js +0 -1671
  230. data/public/javascript/CodeMirror/js/highlight.js +0 -68
  231. data/public/javascript/CodeMirror/js/parseSmalltalk.js +0 -126
  232. data/public/javascript/CodeMirror/js/parsedummy.js +0 -32
  233. data/public/javascript/CodeMirror/js/select.js +0 -699
  234. data/public/javascript/CodeMirror/js/stringstream.js +0 -159
  235. data/public/javascript/CodeMirror/js/tokenize.js +0 -57
  236. data/public/javascript/CodeMirror/js/undo.js +0 -413
  237. data/public/javascript/CodeMirror/js/util.js +0 -133
  238. data/public/javascript/CodeMirror/testSmalltalkParser.html +0 -116
  239. data/public/javascript/ace/ace-uncompressed.js +0 -17299
  240. data/public/javascript/ace/ace.js +0 -1
  241. data/public/javascript/ace/keybinding-emacs.js +0 -1
  242. data/public/javascript/ace/keybinding-vim.js +0 -1
  243. data/public/javascript/ace/mode-c_cpp.js +0 -1
  244. data/public/javascript/ace/mode-clojure.js +0 -1
  245. data/public/javascript/ace/mode-coffee.js +0 -1
  246. data/public/javascript/ace/mode-csharp.js +0 -1
  247. data/public/javascript/ace/mode-css.js +0 -1
  248. data/public/javascript/ace/mode-groovy.js +0 -1
  249. data/public/javascript/ace/mode-html.js +0 -1
  250. data/public/javascript/ace/mode-java.js +0 -1
  251. data/public/javascript/ace/mode-javascript.js +0 -1
  252. data/public/javascript/ace/mode-json.js +0 -1
  253. data/public/javascript/ace/mode-lua.js +0 -1
  254. data/public/javascript/ace/mode-markdown.js +0 -1
  255. data/public/javascript/ace/mode-ocaml.js +0 -1
  256. data/public/javascript/ace/mode-perl.js +0 -1
  257. data/public/javascript/ace/mode-php.js +0 -1
  258. data/public/javascript/ace/mode-python.js +0 -1
  259. data/public/javascript/ace/mode-ruby.js +0 -1
  260. data/public/javascript/ace/mode-scad.js +0 -1
  261. data/public/javascript/ace/mode-scala.js +0 -1
  262. data/public/javascript/ace/mode-scss.js +0 -1
  263. data/public/javascript/ace/mode-svg.js +0 -1
  264. data/public/javascript/ace/mode-textile.js +0 -1
  265. data/public/javascript/ace/mode-xml.js +0 -1
  266. data/public/javascript/ace/theme-clouds.js +0 -1
  267. data/public/javascript/ace/theme-clouds_midnight.js +0 -1
  268. data/public/javascript/ace/theme-cobalt.js +0 -1
  269. data/public/javascript/ace/theme-crimson_editor.js +0 -1
  270. data/public/javascript/ace/theme-dawn.js +0 -1
  271. data/public/javascript/ace/theme-eclipse.js +0 -1
  272. data/public/javascript/ace/theme-idle_fingers.js +0 -1
  273. data/public/javascript/ace/theme-kr_theme.js +0 -1
  274. data/public/javascript/ace/theme-merbivore.js +0 -1
  275. data/public/javascript/ace/theme-merbivore_soft.js +0 -1
  276. data/public/javascript/ace/theme-mono_industrial.js +0 -1
  277. data/public/javascript/ace/theme-monokai.js +0 -1
  278. data/public/javascript/ace/theme-pastel_on_dark.js +0 -1
  279. data/public/javascript/ace/theme-solarized_dark.js +0 -1
  280. data/public/javascript/ace/theme-solarized_light.js +0 -1
  281. data/public/javascript/ace/theme-textmate.js +0 -1
  282. data/public/javascript/ace/theme-twilight.js +0 -1
  283. data/public/javascript/ace/theme-vibrant_ink.js +0 -1
  284. data/public/javascript/ace/worker-coffee.js +0 -1
  285. data/public/javascript/ace/worker-css.js +0 -1
  286. data/public/javascript/ace/worker-javascript.js +0 -1
  287. data/public/javascript/webtools/browser.js +0 -260
  288. data/public/javascript/webtools/debugger.coffee +0 -286
  289. data/public/javascript/webtools/debugger.js +0 -366
  290. data/public/javascript/webtools/sessions.coffee +0 -17
  291. data/public/javascript/webtools/sessions.js +0 -27
  292. data/public/javascript/webtools/version.coffee +0 -14
  293. data/public/javascript/webtools/version.js +0 -20
  294. data/public/stylesheets/jquery.contextMenu.css +0 -62
  295. data/public/stylesheets/webtools.css +0 -53
  296. data/public/test.html +0 -47
@@ -0,0 +1,172 @@
1
+ doit
2
+ Tool subclass: 'SessionList'
3
+ instVarNames: #()
4
+ classVars: #()
5
+ classInstVars: #()
6
+ poolDictionaries: #()
7
+ inDictionary: WebTools
8
+ options: #()
9
+
10
+ %
11
+
12
+ ! Remove existing behavior from SessionList
13
+ doit
14
+ SessionList removeAllMethods.
15
+ SessionList class removeAllMethods.
16
+ %
17
+ ! ------------------- Class methods for SessionList
18
+ category: 'other'
19
+ set compile_env: 0
20
+ classmethod: SessionList
21
+ description
22
+
23
+ ^'Information about current sessions and other processes'.
24
+ %
25
+ category: 'other'
26
+ set compile_env: 0
27
+ classmethod: SessionList
28
+ displayName
29
+
30
+ ^'Current Sessions'.
31
+ %
32
+ category: 'other'
33
+ set compile_env: 0
34
+ classmethod: SessionList
35
+ sortOrder
36
+
37
+ ^2.
38
+ %
39
+ ! ------------------- Instance methods for SessionList
40
+ category: 'Public'
41
+ set compile_env: 0
42
+ method: SessionList
43
+ cacheDescription
44
+
45
+ | name cache details |
46
+ name := arguments at: 'name' ifAbsent: [self error: 'Name not provided!'].
47
+ cache := StatStatistic cacheStatDescriptions.
48
+ details := cache
49
+ at: name
50
+ ifAbsent: [Array with: 'No description available for ' , name , '!'].
51
+ ^Dictionary new
52
+ at: 'description' put: details first;
53
+ yourself.
54
+ %
55
+ category: 'Public'
56
+ set compile_env: 0
57
+ method: SessionList
58
+ json
59
+
60
+ ^Dictionary new
61
+ at: 'labels' put: self _sessionListLabels;
62
+ at: 'sessions' put: self _sessionList;
63
+ at: 'other' put: self _nonSessionList;
64
+ yourself.
65
+ %
66
+ category: 'Public'
67
+ set compile_env: 0
68
+ method: SessionList
69
+ statsForSlot
70
+
71
+ | slot descriptions statistics result topFour bytes |
72
+ slot := arguments at: 'slot' ifAbsent: [self error: 'No slot argument!'].
73
+ (statistics := System cacheStatisticsAt: slot asNumber) isNil ifTrue: [self error: 'Process slot not in use (gem has logged out?)!'].
74
+ descriptions := System cacheStatisticsDescriptionForType: (statistics at: 4).
75
+ result := OrderedCollection new.
76
+ bytes := ByteArray new: 8.
77
+ 1 to: descriptions size do: [:i |
78
+ | name metadata |
79
+ name := descriptions at: i.
80
+ metadata := StatStatistic cacheStatDescriptions at: name ifAbsent: [#('' '' '' '' '')].
81
+ result add: (Dictionary new
82
+ at: 'name' put: name;
83
+ at: 'type' put: (metadata at: 2);
84
+ at: 'level' put: (metadata at: 3);
85
+ at: 'units' put: (metadata at: 4);
86
+ at: 'isOs' put: (metadata at: 5);
87
+ at: 'value' put: (statistics at: i);
88
+ yourself).
89
+ ].
90
+ topFour := result copyFrom: 1 to: 4.
91
+ result := result copyFrom: 5 to: descriptions size.
92
+ result := result asSortedCollection: [:a :b | (a at: 'name') <= (b at: 'name')].
93
+ result := topFour , result asArray.
94
+ ^Dictionary new
95
+ at: 'stats' put: result;
96
+ yourself.
97
+ %
98
+ category: 'Private'
99
+ set compile_env: 0
100
+ method: SessionList
101
+ _nonSessionList
102
+
103
+ | slots |
104
+ [
105
+ | sessions slot |
106
+ sessions := System currentSessions.
107
+ slots := OrderedCollection new.
108
+ slot := 0.
109
+ [true] whileTrue: [
110
+ | array |
111
+ array := System cacheStatistics: slot.
112
+ (sessions includes: (array at: 3)) ifFalse: [
113
+ slots add: (Array with: slot with: array first).
114
+ ].
115
+ slot := slot + 1.
116
+ ].
117
+ ] on: Error do: [:ex |
118
+ ^slots.
119
+ ].
120
+ %
121
+ category: 'Private'
122
+ set compile_env: 0
123
+ method: SessionList
124
+ _sessionList
125
+
126
+ | sessions now |
127
+ sessions := System currentSessions collect: [:each | (System descriptionOfSession: each) , (Array with: (System cacheSlotForSessionId: each))].
128
+ sessions := sessions reject: [:each | each isNil].
129
+ now := System timeGmt. "seconds since January 1, 1970"
130
+ sessions := sessions collect: [:list |
131
+ | x |
132
+ list
133
+ at: 1 put: (list at: 1) userId; "UserProfile"
134
+ at: 4 put: ((x := list at: 4) = 0 ifTrue: [''] ifFalse: [x]); "Primitive"
135
+ at: 5 put: (now - (list at: 5)) printString , 's'; "View age"
136
+ at: 7 put: (#('none' 'out' 'in') at: (list at: 7) + 2);
137
+ at: 14 put: (now - (list at: 14)) printString , 's'; "Quiet"
138
+ at: 15 put: (now - (list at: 15)) printString , 's'; "Age"
139
+ yourself.
140
+ ].
141
+ 0 timesRepeat: [sessions := sessions , sessions].
142
+ ^sessions.
143
+ %
144
+ category: 'Private'
145
+ set compile_env: 0
146
+ method: SessionList
147
+ _sessionListLabels
148
+ "See System class>>#'descriptionOfSession:'"
149
+
150
+ ^(Array new: 17)
151
+ at: 1 put: 'User' -> 'The UserProfile of the session, or nil if the UserProfile is recently created and not visible from this session''s transactional view, or the session is no longer active.';
152
+ at: 2 put: 'PID' -> 'The process ID of the Gem process of the session.';
153
+ at: 3 put: 'Host' -> 'The hostname of the machine running the Gem process (a String, limited to 127 bytes).';
154
+ at: 4 put: 'Prim' -> 'Primitive number in which the Gem is executing (if it is executing in a long primitive such as MFC).';
155
+ at: 5 put: 'View Age' -> 'Time since the session''s most recent beginTransaction, commitTransaction, or abortTransaction.';
156
+ at: 6 put: 'State' -> 'The session state (an enum from SesTaskStatusEType in session.ht).';
157
+ at: 7 put: 'Trans' -> 'One of the following: ''none'' if the session is in transactionless mode, ''out'' if it is not in a transaction, and ''in'' if it is in a transaction.';
158
+ at: 8 put: 'Oldest CR' -> 'A Boolean whose value is true if the session is currently referencing the oldest commit record, and false if it is not.';
159
+ at: 9 put: 'Serial' -> 'The session''s serial number. A serial number will not be reused until the stone is restarted.';
160
+ at: 10 put: 'Session' -> ('The session''s sessionId. The configured maximum is ' , System maxSessionId printString , ' for this stone.');
161
+ at: 11 put: 'GCI IP' -> 'A String containing the ip address of host running the GCI process. If the GCI application is linked (using libgcilnk*.so or gcilnk*.dll) this ip address is the address of the machine running the gem process.';
162
+ at: 12 put: 'Priority' -> 'The priority of the session where 0 is lowest, 2 is normal, and 4 is highest. Session priority is used by the stone to order requests for service by sessions.';
163
+ at: 13 put: 'Host ID' -> 'Unique host ID of the host where the session is running.';
164
+ at: 14 put: 'Quiet' -> 'Time since the session''s most recent request to stone.';
165
+ at: 15 put: 'Age' -> 'Time since the session logged in.';
166
+ at: 16 put: 'CRB' -> 'Commit Record Backlog: number of commits which have occurred since the session obtained its view.';
167
+ at: 17 put: 'Slot' -> 'The session''s cache process slot number if it is connected to the same shared page cache as Server. A return of nil indicates the session could not be located (so the gem is likely on another host).';
168
+ yourself.
169
+ %
170
+ doit
171
+ SessionList category: 'WebTools'
172
+ %
@@ -0,0 +1,66 @@
1
+ doit
2
+ Tool subclass: 'SharedPageCache'
3
+ instVarNames: #()
4
+ classVars: #()
5
+ classInstVars: #()
6
+ poolDictionaries: #()
7
+ inDictionary: WebTools
8
+ options: #()
9
+
10
+ %
11
+
12
+ ! Remove existing behavior from SharedPageCache
13
+ doit
14
+ SharedPageCache removeAllMethods.
15
+ SharedPageCache class removeAllMethods.
16
+ %
17
+ ! ------------------- Class methods for SharedPageCache
18
+ category: 'other'
19
+ set compile_env: 0
20
+ classmethod: SharedPageCache
21
+ description
22
+
23
+ ^'Information about the Shared Page Cache'.
24
+ %
25
+ category: 'other'
26
+ set compile_env: 0
27
+ classmethod: SharedPageCache
28
+ displayName
29
+
30
+ ^'Shared Page Cache'.
31
+ %
32
+ category: 'other'
33
+ set compile_env: 0
34
+ classmethod: SharedPageCache
35
+ sortOrder
36
+
37
+ ^7.
38
+ %
39
+ ! ------------------- Instance methods for SharedPageCache
40
+ category: 'other'
41
+ set compile_env: 0
42
+ method: SharedPageCache
43
+ json
44
+
45
+ | names stats size free globalDirty localDirty |
46
+ names := System cacheStatisticsDescriptionForMonitor.
47
+ stats := System sharedPageCacheMonitorCacheStatistics.
48
+ size := stats at: (names indexOf: 'FrameCount').
49
+ free := stats at: (names indexOf: 'FreeFrameCount').
50
+ globalDirty := stats at: (names indexOf: 'GlobalDirtyPageCount').
51
+ localDirty := stats at: (names indexOf: 'LocalDirtyPageCount').
52
+ ^Dictionary new
53
+ at: 'objectTable' put: ((stats at: (names indexOf: 'TotalOtPages' )) / size * 100.0) rounded;
54
+ at: 'bitmap' put: ((stats at: (names indexOf: 'TotalBitmapPages' )) / size * 100.0) rounded;
55
+ at: 'commitRecord' put: ((stats at: (names indexOf: 'TotalCrPages' )) / size * 100.0) rounded;
56
+ at: 'other' put: ((stats at: (names indexOf: 'TotalOtherPages' )) / size * 100.0) rounded;
57
+ at: 'data' put: ((stats at: (names indexOf: 'TotalDataPages' )) / size * 100.0) rounded;
58
+ at: 'free' put: (free / size * 100.0) rounded;
59
+ at: 'globalDirty' put: (globalDirty / size * 100.0) rounded;
60
+ at: 'localDirty' put: (localDirty / size * 100.0) rounded;
61
+ at: 'clean' put: (size - localDirty - localDirty - free / size * 100.0) rounded;
62
+ yourself.
63
+ %
64
+ doit
65
+ SharedPageCache category: 'WebTools'
66
+ %
@@ -0,0 +1,280 @@
1
+ doit
2
+ Object subclass: 'StatProcess'
3
+ instVarNames: #( type name processID
4
+ sessionID stats timeList primitives
5
+ crb)
6
+ classVars: #( PrimitiveMap)
7
+ classInstVars: #()
8
+ poolDictionaries: #()
9
+ inDictionary: WebTools
10
+ options: #()
11
+
12
+ %
13
+
14
+ ! Remove existing behavior from StatProcess
15
+ doit
16
+ StatProcess removeAllMethods.
17
+ StatProcess class removeAllMethods.
18
+ %
19
+ ! ------------------- Class methods for StatProcess
20
+ ! ------------------- Instance methods for StatProcess
21
+ category: 'accessors'
22
+ set compile_env: 0
23
+ method: StatProcess
24
+ beginSeconds
25
+
26
+ ^timeList first.
27
+ %
28
+ category: 'accessors'
29
+ set compile_env: 0
30
+ method: StatProcess
31
+ beginTime
32
+
33
+ ^self statmonitor timeStampFromSeconds: self beginSeconds.
34
+ %
35
+ category: 'accessors'
36
+ set compile_env: 0
37
+ method: StatProcess
38
+ count
39
+
40
+ ^timeList size.
41
+ %
42
+ category: 'accessors'
43
+ set compile_env: 0
44
+ method: StatProcess
45
+ crb
46
+
47
+ ^crb.
48
+ %
49
+ category: 'accessors'
50
+ set compile_env: 0
51
+ method: StatProcess
52
+ endSeconds
53
+
54
+ ^timeList last.
55
+ %
56
+ category: 'accessors'
57
+ set compile_env: 0
58
+ method: StatProcess
59
+ endTime
60
+
61
+ ^self statmonitor timeStampFromSeconds: self endSeconds.
62
+ %
63
+ category: 'accessors'
64
+ set compile_env: 0
65
+ method: StatProcess
66
+ hasAnySelections
67
+
68
+ ^stats anySatisfy: [:each | each isSelected].
69
+ %
70
+ category: 'initialize'
71
+ set compile_env: 0
72
+ method: StatProcess
73
+ initializeFrom: anArray
74
+
75
+ | bytes |
76
+ crb := Array new.
77
+ self initializePrimitiveMap.
78
+ bytes := ByteArray new: 4.
79
+ timeList := OrderedCollection with: (anArray at: 2).
80
+ name := anArray at: 3.
81
+ processID := anArray at: 4.
82
+ bytes unsigned32At: 1 put: (anArray at: 5).
83
+ sessionID := bytes signed32At: 1.
84
+ 1 to: stats size do: [:i |
85
+ (stats at: i)
86
+ process: self;
87
+ initialize: anArray;
88
+ yourself.
89
+ ].
90
+ %
91
+ category: 'initialize'
92
+ set compile_env: 0
93
+ method: StatProcess
94
+ initializePrimitiveMap
95
+
96
+ PrimitiveMap isNil ifTrue: [
97
+ PrimitiveMap := Dictionary new
98
+ at: 392 put: 'audit';
99
+ at: 394 put: 'backup';
100
+ at: 395 put: 'restore';
101
+ at: 876 put: 'MFC';
102
+ at: 896 put: 'list';
103
+ at: 899 put: 'refs';
104
+ yourself.
105
+ ].
106
+ %
107
+ category: 'accessors'
108
+ set compile_env: 0
109
+ method: StatProcess
110
+ maxCRB
111
+
112
+ crb isEmpty ifTrue: [^0].
113
+ ^crb
114
+ inject: crb first value
115
+ into: [:max :each | max max: each value].
116
+ %
117
+ category: 'accessors'
118
+ set compile_env: 0
119
+ method: StatProcess
120
+ name
121
+
122
+ ^name.
123
+ %
124
+ category: 'accessors'
125
+ set compile_env: 0
126
+ method: StatProcess
127
+ name: aString
128
+
129
+ name := aString.
130
+ %
131
+ category: 'accessors'
132
+ set compile_env: 0
133
+ method: StatProcess
134
+ primitives
135
+
136
+ primitives notNil ifTrue: [^primitives].
137
+ primitives := Array new.
138
+ stats do: [:eachStat |
139
+ eachStat name = 'PrimitiveNumber' ifTrue: [
140
+ eachStat data asIdentitySet do: [:each |
141
+ 0 < each ifTrue: [
142
+ primitives add: each.
143
+ ].
144
+ ].
145
+ ].
146
+ ].
147
+ primitives := primitives asSortedCollection asArray collect: [:each |
148
+ PrimitiveMap at: each ifAbsent: [each].
149
+ ].
150
+ ^primitives.
151
+ %
152
+ category: 'other'
153
+ set compile_env: 0
154
+ method: StatProcess
155
+ printOn: aStream
156
+
157
+ | time |
158
+ time := self statmonitor timeStampFromSeconds: timeList first.
159
+ time := time printString.
160
+ time := time copyFrom: 12 to: 16.
161
+ aStream
162
+ nextPutAll: name;
163
+ nextPutAll: ' (';
164
+ nextPutAll: time;
165
+ nextPutAll: ')';
166
+ yourself.
167
+ %
168
+ category: 'accessors'
169
+ set compile_env: 0
170
+ method: StatProcess
171
+ processID
172
+
173
+ ^processID.
174
+ %
175
+ category: 'accessors'
176
+ set compile_env: 0
177
+ method: StatProcess
178
+ samplesSize
179
+
180
+ ^self count.
181
+
182
+ %
183
+ category: 'private'
184
+ set compile_env: 0
185
+ method: StatProcess
186
+ sanitize
187
+
188
+ "timeList := timeList collect: [:each | each + 18000]." "Add five hours to get from ART to PST"
189
+ type name = 'Stn' ifTrue: [
190
+ name := 'gs32stone'.
191
+ ].
192
+ type name = 'SolarisSystem' ifTrue: [
193
+ name := 'hamburg'.
194
+ ].
195
+ %
196
+ category: 'accessors'
197
+ set compile_env: 0
198
+ method: StatProcess
199
+ seconds
200
+
201
+ ^self endSeconds - self beginSeconds + 1.
202
+ %
203
+ category: 'accessors'
204
+ set compile_env: 0
205
+ method: StatProcess
206
+ sessionID
207
+
208
+ ^sessionID.
209
+ %
210
+ category: 'accessors'
211
+ set compile_env: 0
212
+ method: StatProcess
213
+ statistics
214
+ ^stats
215
+ %
216
+ category: 'accessors'
217
+ set compile_env: 0
218
+ method: StatProcess
219
+ statmon
220
+
221
+ ^type statmon.
222
+ %
223
+ category: 'accessors'
224
+ set compile_env: 0
225
+ method: StatProcess
226
+ statmonitor
227
+
228
+ ^type statmon.
229
+ %
230
+ category: 'other'
231
+ set compile_env: 0
232
+ method: StatProcess
233
+ statNamed: aString
234
+
235
+ ^self statistics
236
+ detect: [:each | each name = aString]
237
+ ifNone: [nil].
238
+ %
239
+ category: 'initialize'
240
+ set compile_env: 0
241
+ method: StatProcess
242
+ stats: anObject
243
+ "OrderedCollection of StatSummary instances; copied so each process has its own"
244
+
245
+ stats := anObject
246
+ %
247
+ category: 'accessors'
248
+ set compile_env: 0
249
+ method: StatProcess
250
+ timeList
251
+
252
+ ^timeList.
253
+ %
254
+ category: 'accessors'
255
+ set compile_env: 0
256
+ method: StatProcess
257
+ type
258
+
259
+ ^type.
260
+ %
261
+ category: 'accessors'
262
+ set compile_env: 0
263
+ method: StatProcess
264
+ type: aStatType
265
+
266
+ type := aStatType.
267
+ %
268
+ category: 'initialize'
269
+ set compile_env: 0
270
+ method: StatProcess
271
+ updateFrom: anArray
272
+
273
+ timeList add: (anArray at: 2).
274
+ 1 to: stats size do: [:i |
275
+ (stats at: i) updateFrom: anArray.
276
+ ].
277
+ %
278
+ doit
279
+ StatProcess category: 'Statmonitor'
280
+ %