taskjuggler 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. data/CHANGELOG +2086 -0
  2. data/benchmarks/666tasks.tjp +3183 -0
  3. data/benchmarks/booking.tjp +14 -10
  4. data/doc/AppConfig.html +95 -73
  5. data/doc/Arguments.html +22 -2
  6. data/doc/CHANGELOG.html +2587 -0
  7. data/doc/COPYING.html +21 -1
  8. data/doc/Object.html +161 -122
  9. data/doc/README.html +21 -1
  10. data/doc/RuntimeConfig.html +26 -6
  11. data/doc/String.html +38 -18
  12. data/doc/StringIO.html +579 -0
  13. data/doc/TaskJuggler.html +251 -143
  14. data/doc/TaskJuggler/Account.html +26 -6
  15. data/doc/TaskJuggler/AccountAttribute.html +28 -8
  16. data/doc/TaskJuggler/AccountScenario.html +24 -4
  17. data/doc/TaskJuggler/Allocation.html +30 -10
  18. data/doc/TaskJuggler/AllocationAttribute.html +28 -8
  19. data/doc/TaskJuggler/AttributeBase.html +46 -26
  20. data/doc/TaskJuggler/AttributeDefinition.html +22 -2
  21. data/doc/TaskJuggler/BatchProcessor.html +40 -20
  22. data/doc/TaskJuggler/Booking.html +26 -6
  23. data/doc/TaskJuggler/BookingListAttribute.html +28 -8
  24. data/doc/TaskJuggler/BooleanAttribute.html +28 -8
  25. data/doc/TaskJuggler/CSVFile.html +308 -146
  26. data/doc/TaskJuggler/CellSettingPattern.html +22 -2
  27. data/doc/TaskJuggler/CellSettingPatternList.html +26 -6
  28. data/doc/TaskJuggler/Charge.html +26 -6
  29. data/doc/TaskJuggler/ChargeListAttribute.html +26 -6
  30. data/doc/TaskJuggler/ChargeSet.html +33 -13
  31. data/doc/TaskJuggler/ChargeSetListAttribute.html +28 -8
  32. data/doc/TaskJuggler/ColumnListAttribute.html +26 -6
  33. data/doc/TaskJuggler/ColumnTable.html +24 -4
  34. data/doc/TaskJuggler/Daemon.html +26 -6
  35. data/doc/TaskJuggler/DateAttribute.html +26 -6
  36. data/doc/TaskJuggler/DefinitionListAttribute.html +22 -2
  37. data/doc/TaskJuggler/DependencyListAttribute.html +28 -8
  38. data/doc/TaskJuggler/DurationAttribute.html +28 -8
  39. data/doc/TaskJuggler/FixnumAttribute.html +24 -4
  40. data/doc/TaskJuggler/FlagListAttribute.html +28 -8
  41. data/doc/TaskJuggler/FloatAttribute.html +26 -6
  42. data/doc/TaskJuggler/FormatListAttribute.html +24 -4
  43. data/doc/TaskJuggler/GanttChart.html +147 -126
  44. data/doc/TaskJuggler/GanttContainer.html +34 -14
  45. data/doc/TaskJuggler/GanttHeader.html +28 -8
  46. data/doc/TaskJuggler/GanttHeaderScaleItem.html +24 -4
  47. data/doc/TaskJuggler/GanttLine.html +38 -18
  48. data/doc/TaskJuggler/GanttLoadStack.html +26 -6
  49. data/doc/TaskJuggler/GanttMilestone.html +34 -14
  50. data/doc/TaskJuggler/GanttRouter.html +50 -30
  51. data/doc/TaskJuggler/GanttTaskBar.html +34 -14
  52. data/doc/TaskJuggler/HTMLDocument.html +26 -6
  53. data/doc/TaskJuggler/HTMLGraphics.html +30 -10
  54. data/doc/TaskJuggler/Interval.html +40 -22
  55. data/doc/TaskJuggler/IntervalListAttribute.html +28 -8
  56. data/doc/TaskJuggler/JobInfo.html +24 -4
  57. data/doc/TaskJuggler/Journal.html +226 -147
  58. data/doc/TaskJuggler/JournalEntry.html +22 -2
  59. data/doc/TaskJuggler/JournalEntryList.html +129 -112
  60. data/doc/TaskJuggler/KeywordArray.html +26 -6
  61. data/doc/TaskJuggler/KeywordDocumentation.html +46 -26
  62. data/doc/TaskJuggler/Limits.html +152 -123
  63. data/doc/TaskJuggler/Limits/Limit.html +149 -70
  64. data/doc/TaskJuggler/LimitsAttribute.html +36 -51
  65. data/doc/TaskJuggler/ListAttributeBase.html +24 -4
  66. data/doc/TaskJuggler/Log.html +50 -32
  67. data/doc/TaskJuggler/LogFile.html +37 -17
  68. data/doc/TaskJuggler/LogicalAttribute.html +53 -33
  69. data/doc/TaskJuggler/LogicalExpression.html +26 -6
  70. data/doc/TaskJuggler/LogicalExpressionAttribute.html +32 -12
  71. data/doc/TaskJuggler/LogicalFlag.html +42 -22
  72. data/doc/TaskJuggler/LogicalFunction.html +204 -140
  73. data/doc/TaskJuggler/LogicalOperation.html +135 -111
  74. data/doc/TaskJuggler/Macro.html +22 -2
  75. data/doc/TaskJuggler/MacroParser.html +32 -12
  76. data/doc/TaskJuggler/MacroTable.html +32 -12
  77. data/doc/TaskJuggler/ManagerResponsibilities.html +24 -4
  78. data/doc/TaskJuggler/ManagerStatusRecord.html +24 -4
  79. data/doc/TaskJuggler/Message.html +24 -4
  80. data/doc/TaskJuggler/MessageHandler.html +24 -4
  81. data/doc/TaskJuggler/Navigator.html +104 -71
  82. data/doc/TaskJuggler/NavigatorElement.html +32 -12
  83. data/doc/TaskJuggler/NikuProject.html +22 -2
  84. data/doc/TaskJuggler/NikuReport.html +310 -228
  85. data/doc/TaskJuggler/NikuResource.html +22 -2
  86. data/doc/TaskJuggler/NodeListAttribute.html +615 -0
  87. data/doc/TaskJuggler/OnShiftCache.html +32 -12
  88. data/doc/TaskJuggler/ProcessIntercom.html +205 -78
  89. data/doc/TaskJuggler/ProcessIntercomIface.html +26 -6
  90. data/doc/TaskJuggler/Project.html +708 -660
  91. data/doc/TaskJuggler/ProjectBroker.html +506 -304
  92. data/doc/TaskJuggler/ProjectBrokerIface.html +61 -41
  93. data/doc/TaskJuggler/ProjectFileParser.html +429 -373
  94. data/doc/TaskJuggler/ProjectFileScanner.html +1790 -0
  95. data/doc/TaskJuggler/ProjectRecord.html +80 -60
  96. data/doc/TaskJuggler/ProjectServer.html +312 -237
  97. data/doc/TaskJuggler/ProjectServerIface.html +101 -43
  98. data/doc/TaskJuggler/PropertyAttribute.html +32 -12
  99. data/doc/TaskJuggler/PropertyList.html +166 -145
  100. data/doc/TaskJuggler/PropertySet.html +254 -224
  101. data/doc/TaskJuggler/PropertyTreeNode.html +670 -536
  102. data/doc/TaskJuggler/Query.html +169 -148
  103. data/doc/TaskJuggler/RTFHandlers.html +622 -0
  104. data/doc/TaskJuggler/RTFNavigator.html +28 -8
  105. data/doc/TaskJuggler/RTFQuery.html +40 -20
  106. data/doc/TaskJuggler/RTFReport.html +62 -25
  107. data/doc/TaskJuggler/RTFReportLink.html +765 -0
  108. data/doc/TaskJuggler/RealFormat.html +26 -6
  109. data/doc/TaskJuggler/RealFormatAttribute.html +26 -6
  110. data/doc/TaskJuggler/ReferenceAttribute.html +59 -39
  111. data/doc/TaskJuggler/Report.html +402 -251
  112. data/doc/TaskJuggler/ReportBase.html +162 -137
  113. data/doc/TaskJuggler/ReportContext.html +112 -29
  114. data/doc/TaskJuggler/ReportServer.html +89 -64
  115. data/doc/TaskJuggler/ReportServerIface.html +75 -55
  116. data/doc/TaskJuggler/ReportServerRecord.html +54 -31
  117. data/doc/TaskJuggler/ReportServlet.html +980 -0
  118. data/doc/TaskJuggler/ReportTable.html +41 -21
  119. data/doc/TaskJuggler/ReportTableCell.html +214 -170
  120. data/doc/TaskJuggler/ReportTableColumn.html +30 -10
  121. data/doc/TaskJuggler/ReportTableLegend.html +36 -16
  122. data/doc/TaskJuggler/ReportTableLine.html +32 -12
  123. data/doc/TaskJuggler/Resource.html +99 -87
  124. data/doc/TaskJuggler/ResourceListAttribute.html +59 -39
  125. data/doc/TaskJuggler/ResourceListRE.html +47 -26
  126. data/doc/TaskJuggler/ResourceScenario.html +403 -437
  127. data/doc/TaskJuggler/RichText.html +26 -6
  128. data/doc/TaskJuggler/RichTextAttribute.html +50 -30
  129. data/doc/TaskJuggler/RichTextDocument.html +37 -17
  130. data/doc/TaskJuggler/RichTextElement.html +475 -413
  131. data/doc/TaskJuggler/RichTextException.html +22 -2
  132. data/doc/TaskJuggler/RichTextFunctionExample.html +28 -8
  133. data/doc/TaskJuggler/RichTextFunctionHandler.html +24 -4
  134. data/doc/TaskJuggler/RichTextImage.html +22 -2
  135. data/doc/TaskJuggler/RichTextIntermediate.html +38 -18
  136. data/doc/TaskJuggler/RichTextParser.html +56 -34
  137. data/doc/TaskJuggler/RichTextScanner.html +82 -61
  138. data/doc/TaskJuggler/RichTextSnip.html +34 -14
  139. data/doc/TaskJuggler/RichTextSyntaxRules.html +507 -353
  140. data/doc/TaskJuggler/Scenario.html +22 -2
  141. data/doc/TaskJuggler/ScenarioData.html +30 -46
  142. data/doc/TaskJuggler/ScenarioListAttribute.html +38 -18
  143. data/doc/TaskJuggler/Scoreboard.html +42 -22
  144. data/doc/TaskJuggler/SheetHandlerBase.html +40 -20
  145. data/doc/TaskJuggler/SheetReceiver.html +333 -295
  146. data/doc/TaskJuggler/SheetSender.html +253 -230
  147. data/doc/TaskJuggler/Shift.html +26 -6
  148. data/doc/TaskJuggler/ShiftAssignment.html +89 -73
  149. data/doc/TaskJuggler/ShiftAssignments.html +226 -234
  150. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +39 -54
  151. data/doc/TaskJuggler/ShiftScenario.html +28 -8
  152. data/doc/TaskJuggler/SortListAttribute.html +34 -14
  153. data/doc/TaskJuggler/SourceFileInfo.html +24 -4
  154. data/doc/TaskJuggler/StatusSheetReceiver.html +24 -3
  155. data/doc/TaskJuggler/StatusSheetReport.html +168 -153
  156. data/doc/TaskJuggler/StatusSheetSender.html +24 -3
  157. data/doc/TaskJuggler/StringAttribute.html +38 -18
  158. data/doc/TaskJuggler/SymbolAttribute.html +32 -12
  159. data/doc/TaskJuggler/SyntaxReference.html +40 -20
  160. data/doc/TaskJuggler/TOCEntry.html +26 -6
  161. data/doc/TaskJuggler/TSResourceRecord.html +22 -2
  162. data/doc/TaskJuggler/TSTaskRecord.html +22 -2
  163. data/doc/TaskJuggler/TableColumnDefinition.html +59 -22
  164. data/doc/TaskJuggler/TableOfContents.html +26 -6
  165. data/doc/TaskJuggler/TableReport.html +937 -904
  166. data/doc/TaskJuggler/Task.html +55 -36
  167. data/doc/TaskJuggler/TaskDependency.html +24 -4
  168. data/doc/TaskJuggler/TaskListAttribute.html +50 -30
  169. data/doc/TaskJuggler/TaskListRE.html +27 -7
  170. data/doc/TaskJuggler/TaskScenario.html +1273 -1153
  171. data/doc/TaskJuggler/TextFormatter.html +28 -8
  172. data/doc/TaskJuggler/TextParser.html +585 -338
  173. data/doc/TaskJuggler/TextParser/Pattern.html +54 -34
  174. data/doc/TaskJuggler/TextParser/Rule.html +95 -73
  175. data/doc/TaskJuggler/TextParser/StackElement.html +39 -17
  176. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +24 -4
  177. data/doc/TaskJuggler/TextParser/TokenDoc.html +22 -2
  178. data/doc/TaskJuggler/TextReport.html +28 -8
  179. data/doc/TaskJuggler/TextScanner.html +400 -1404
  180. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +28 -240
  181. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +37 -184
  182. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +682 -0
  183. data/doc/TaskJuggler/TextScanner/StreamHandle.html +342 -67
  184. data/doc/TaskJuggler/TimeSheet.html +48 -28
  185. data/doc/TaskJuggler/TimeSheetReceiver.html +24 -3
  186. data/doc/TaskJuggler/TimeSheetRecord.html +47 -27
  187. data/doc/TaskJuggler/TimeSheetReport.html +154 -133
  188. data/doc/TaskJuggler/TimeSheetSender.html +24 -3
  189. data/doc/TaskJuggler/TimeSheetSummary.html +137 -91
  190. data/doc/TaskJuggler/TimeSheets.html +26 -6
  191. data/doc/TaskJuggler/Tj3AppBase.html +85 -58
  192. data/doc/TaskJuggler/Tj3Client.html +292 -238
  193. data/doc/TaskJuggler/Tj3Daemon.html +159 -74
  194. data/doc/TaskJuggler/Tj3SheetAppBase.html +26 -6
  195. data/doc/TaskJuggler/Tj3SsReceiver.html +26 -6
  196. data/doc/TaskJuggler/Tj3SsSender.html +53 -26
  197. data/doc/TaskJuggler/Tj3TsReceiver.html +28 -7
  198. data/doc/TaskJuggler/Tj3TsSender.html +26 -6
  199. data/doc/TaskJuggler/Tj3TsSummary.html +26 -6
  200. data/doc/TaskJuggler/TjException.html +22 -2
  201. data/doc/TaskJuggler/TjTime.html +216 -160
  202. data/doc/TaskJuggler/TjpExample.html +34 -14
  203. data/doc/TaskJuggler/TjpExportRE.html +403 -407
  204. data/doc/TaskJuggler/TjpSyntaxRules.html +4805 -4408
  205. data/doc/TaskJuggler/URLParameter.html +649 -0
  206. data/doc/TaskJuggler/UserManual.html +42 -22
  207. data/doc/TaskJuggler/WebServer.html +702 -0
  208. data/doc/TaskJuggler/WorkingHours.html +38 -18
  209. data/doc/TaskJuggler/WorkingHoursAttribute.html +61 -41
  210. data/doc/TaskJuggler/XMLBlob.html +24 -4
  211. data/doc/TaskJuggler/XMLComment.html +24 -4
  212. data/doc/TaskJuggler/XMLDocument.html +30 -10
  213. data/doc/TaskJuggler/XMLElement.html +34 -14
  214. data/doc/TaskJuggler/XMLNamedText.html +22 -2
  215. data/doc/TaskJuggler/XMLText.html +24 -4
  216. data/doc/index.html +1841 -1666
  217. data/doc/lib/AccountScenario_rb.html +1 -1
  218. data/doc/lib/Account_rb.html +1 -1
  219. data/doc/lib/Allocation_rb.html +1 -1
  220. data/doc/lib/AppConfig_rb.html +2 -2
  221. data/doc/lib/AttributeBase_rb.html +1 -1
  222. data/doc/lib/AttributeDefinition_rb.html +1 -1
  223. data/doc/lib/Attributes_rb.html +2 -2
  224. data/doc/lib/BatchProcessor_rb.html +1 -1
  225. data/doc/lib/Booking_rb.html +1 -1
  226. data/doc/lib/ChargeSet_rb.html +1 -1
  227. data/doc/lib/Charge_rb.html +1 -1
  228. data/doc/lib/HTMLDocument_rb.html +1 -1
  229. data/doc/lib/Interval_rb.html +1 -1
  230. data/doc/lib/Journal_rb.html +2 -2
  231. data/doc/lib/KeywordArray_rb.html +1 -1
  232. data/doc/lib/KeywordDocumentation_rb.html +1 -1
  233. data/doc/lib/Limits_rb.html +2 -2
  234. data/doc/lib/LogFile_rb.html +2 -2
  235. data/doc/lib/Log_rb.html +1 -1
  236. data/doc/lib/LogicalExpression_rb.html +1 -1
  237. data/doc/lib/LogicalFunction_rb.html +2 -2
  238. data/doc/lib/LogicalOperation_rb.html +2 -2
  239. data/doc/lib/MacroParser_rb.html +1 -1
  240. data/doc/lib/MacroTable_rb.html +1 -1
  241. data/doc/lib/MessageHandler_rb.html +1 -1
  242. data/doc/lib/Message_rb.html +1 -1
  243. data/doc/lib/ProjectFileParser_rb.html +4 -8
  244. data/doc/lib/ProjectFileScanner_rb.html +67 -0
  245. data/doc/lib/Project_rb.html +2 -2
  246. data/doc/lib/PropertyList_rb.html +2 -2
  247. data/doc/lib/PropertySet_rb.html +2 -2
  248. data/doc/lib/PropertyTreeNode_rb.html +2 -2
  249. data/doc/lib/Query_rb.html +2 -2
  250. data/doc/lib/RTFHandlers_rb.html +73 -0
  251. data/doc/lib/RTFNavigator_rb.html +1 -1
  252. data/doc/lib/RTFQuery_rb.html +1 -1
  253. data/doc/lib/RTFReportLink_rb.html +71 -0
  254. data/doc/lib/RTFReport_rb.html +2 -2
  255. data/doc/lib/RealFormat_rb.html +1 -1
  256. data/doc/lib/ResourceScenario_rb.html +2 -2
  257. data/doc/lib/Resource_rb.html +2 -2
  258. data/doc/lib/RichTextDocument_rb.html +1 -1
  259. data/doc/lib/RichTextElement_rb.html +2 -2
  260. data/doc/lib/RichTextFunctionExample_rb.html +1 -1
  261. data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
  262. data/doc/lib/RichTextParser_rb.html +2 -2
  263. data/doc/lib/RichTextScanner_rb.html +2 -2
  264. data/doc/lib/RichTextSnip_rb.html +1 -1
  265. data/doc/lib/RichTextSyntaxRules_rb.html +2 -2
  266. data/doc/lib/RichText_rb.html +1 -1
  267. data/doc/lib/RuntimeConfig_rb.html +1 -1
  268. data/doc/lib/ScenarioData_rb.html +2 -2
  269. data/doc/lib/Scenario_rb.html +1 -1
  270. data/doc/lib/Scoreboard_rb.html +1 -1
  271. data/doc/lib/SheetHandlerBase_rb.html +1 -1
  272. data/doc/lib/SheetReceiver_rb.html +2 -2
  273. data/doc/lib/SheetSender_rb.html +4 -2
  274. data/doc/lib/ShiftAssignments_rb.html +4 -2
  275. data/doc/lib/ShiftScenario_rb.html +1 -1
  276. data/doc/lib/Shift_rb.html +1 -1
  277. data/doc/lib/SourceFileInfo_rb.html +1 -1
  278. data/doc/lib/StatusSheetReceiver_rb.html +2 -2
  279. data/doc/lib/StatusSheetSender_rb.html +2 -2
  280. data/doc/lib/SyntaxReference_rb.html +1 -1
  281. data/doc/lib/TOCEntry_rb.html +1 -1
  282. data/doc/lib/TableColumnDefinition_rb.html +2 -2
  283. data/doc/lib/TableOfContents_rb.html +1 -1
  284. data/doc/lib/TaskDependency_rb.html +1 -1
  285. data/doc/lib/TaskJuggler_rb.html +2 -2
  286. data/doc/lib/TaskScenario_rb.html +2 -2
  287. data/doc/lib/Task_rb.html +2 -2
  288. data/doc/lib/TextFormatter_rb.html +1 -1
  289. data/doc/lib/TextParser/Pattern_rb.html +1 -1
  290. data/doc/lib/TextParser/Rule_rb.html +2 -2
  291. data/doc/lib/TextParser/StackElement_rb.html +2 -2
  292. data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
  293. data/doc/lib/TextParser_rb.html +2 -2
  294. data/doc/lib/TextScanner_rb.html +6 -2
  295. data/doc/lib/TimeSheetReceiver_rb.html +2 -2
  296. data/doc/lib/TimeSheetSender_rb.html +2 -2
  297. data/doc/lib/TimeSheetSummary_rb.html +2 -2
  298. data/doc/lib/TimeSheets_rb.html +2 -2
  299. data/doc/lib/Tj3AppBase_rb.html +2 -2
  300. data/doc/lib/Tj3Config_rb.html +2 -2
  301. data/doc/lib/Tj3SheetAppBase_rb.html +2 -2
  302. data/doc/lib/TjException_rb.html +1 -1
  303. data/doc/lib/TjTime_rb.html +2 -2
  304. data/doc/lib/TjpExample_rb.html +1 -1
  305. data/doc/lib/TjpSyntaxRules_rb.html +2 -2
  306. data/doc/lib/URLParameter_rb.html +67 -0
  307. data/doc/lib/UTF8String_rb.html +1 -1
  308. data/doc/lib/UserManual_rb.html +1 -1
  309. data/doc/lib/WorkingHours_rb.html +1 -1
  310. data/doc/lib/XMLDocument_rb.html +2 -2
  311. data/doc/lib/XMLElement_rb.html +1 -1
  312. data/doc/lib/daemon/Daemon_rb.html +1 -1
  313. data/doc/lib/daemon/ProcessIntercom_rb.html +2 -2
  314. data/doc/lib/daemon/ProjectBroker_rb.html +4 -2
  315. data/doc/lib/daemon/ProjectServer_rb.html +2 -2
  316. data/doc/lib/daemon/ReportServer_rb.html +2 -2
  317. data/doc/lib/daemon/WebServer_rb.html +75 -0
  318. data/doc/lib/deep_copy_rb.html +2 -2
  319. data/doc/lib/reports/CSVFile_rb.html +2 -2
  320. data/doc/lib/reports/ColumnTable_rb.html +1 -1
  321. data/doc/lib/reports/GanttChart_rb.html +2 -2
  322. data/doc/lib/reports/GanttContainer_rb.html +1 -1
  323. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
  324. data/doc/lib/reports/GanttHeader_rb.html +1 -1
  325. data/doc/lib/reports/GanttLine_rb.html +1 -1
  326. data/doc/lib/reports/GanttLoadStack_rb.html +1 -1
  327. data/doc/lib/reports/GanttMilestone_rb.html +1 -1
  328. data/doc/lib/reports/GanttRouter_rb.html +1 -1
  329. data/doc/lib/reports/GanttTaskBar_rb.html +1 -1
  330. data/doc/lib/reports/HTMLGraphics_rb.html +1 -1
  331. data/doc/lib/reports/Navigator_rb.html +2 -2
  332. data/doc/lib/reports/NikuReport_rb.html +2 -2
  333. data/doc/lib/reports/ReportBase_rb.html +2 -2
  334. data/doc/lib/reports/ReportContext_rb.html +2 -2
  335. data/doc/lib/reports/ReportTableCell_rb.html +2 -2
  336. data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
  337. data/doc/lib/reports/ReportTableLegend_rb.html +1 -1
  338. data/doc/lib/reports/ReportTableLine_rb.html +1 -1
  339. data/doc/lib/reports/ReportTable_rb.html +2 -2
  340. data/doc/lib/reports/Report_rb.html +2 -2
  341. data/doc/lib/reports/ResourceListRE_rb.html +2 -2
  342. data/doc/lib/reports/StatusSheetReport_rb.html +2 -2
  343. data/doc/lib/reports/TableReport_rb.html +2 -2
  344. data/doc/lib/reports/TaskListRE_rb.html +2 -2
  345. data/doc/lib/reports/TextReport_rb.html +1 -1
  346. data/doc/lib/reports/TimeSheetReport_rb.html +2 -2
  347. data/doc/lib/reports/TjpExportRE_rb.html +2 -2
  348. data/doc/lib/ruby-signal-bug_rb.html +1 -1
  349. data/doc/lib/taskjuggler3_rb.html +2 -2
  350. data/doc/lib/tj3client_rb.html +2 -2
  351. data/doc/lib/tj3d_rb.html +2 -2
  352. data/doc/lib/tj3man_rb.html +1 -1
  353. data/doc/lib/tj3ss_receiver_rb.html +1 -1
  354. data/doc/lib/tj3ss_sender_rb.html +2 -2
  355. data/doc/lib/tj3ts_receiver_rb.html +2 -2
  356. data/doc/lib/tj3ts_sender_rb.html +1 -1
  357. data/doc/lib/tj3ts_summary_rb.html +1 -1
  358. data/doc/rdoc.css +9 -4
  359. data/examples/tutorial.tjp +17 -15
  360. data/gem_spec.rb +3 -0
  361. data/lib/AppConfig.rb +3 -1
  362. data/lib/Attributes.rb +10 -8
  363. data/lib/Journal.rb +55 -20
  364. data/lib/Limits.rb +72 -46
  365. data/lib/LogFile.rb +3 -3
  366. data/lib/LogicalFunction.rb +19 -6
  367. data/lib/LogicalOperation.rb +5 -1
  368. data/lib/Project.rb +37 -9
  369. data/lib/ProjectFileParser.rb +25 -22
  370. data/lib/ProjectFileScanner.rb +365 -0
  371. data/lib/PropertyList.rb +2 -1
  372. data/lib/PropertySet.rb +14 -4
  373. data/lib/PropertyTreeNode.rb +42 -29
  374. data/lib/Query.rb +3 -1
  375. data/lib/RTFHandlers.rb +35 -0
  376. data/lib/RTFReport.rb +23 -6
  377. data/lib/RTFReportLink.rb +72 -0
  378. data/lib/Resource.rb +8 -16
  379. data/lib/ResourceScenario.rb +1 -22
  380. data/lib/RichTextElement.rb +42 -0
  381. data/lib/RichTextParser.rb +6 -4
  382. data/lib/RichTextScanner.rb +5 -5
  383. data/lib/RichTextSyntaxRules.rb +48 -10
  384. data/lib/ScenarioData.rb +5 -3
  385. data/lib/SheetReceiver.rb +24 -6
  386. data/lib/SheetSender.rb +17 -13
  387. data/lib/ShiftAssignments.rb +56 -52
  388. data/lib/StatusSheetReceiver.rb +1 -0
  389. data/lib/StatusSheetSender.rb +1 -0
  390. data/lib/TableColumnDefinition.rb +4 -2
  391. data/lib/Task.rb +8 -9
  392. data/lib/TaskJuggler.rb +21 -11
  393. data/lib/TaskScenario.rb +61 -26
  394. data/lib/TextParser.rb +268 -106
  395. data/lib/TextParser/Rule.rb +4 -2
  396. data/lib/TextParser/StackElement.rb +6 -4
  397. data/lib/TextScanner.rb +283 -700
  398. data/lib/TimeSheetReceiver.rb +1 -0
  399. data/lib/TimeSheetSender.rb +1 -0
  400. data/lib/TimeSheetSummary.rb +51 -26
  401. data/lib/TimeSheets.rb +1 -1
  402. data/lib/Tj3AppBase.rb +8 -1
  403. data/lib/Tj3Config.rb +1 -1
  404. data/lib/TjTime.rb +5 -0
  405. data/lib/TjpSyntaxRules.rb +360 -144
  406. data/lib/URLParameter.rb +30 -0
  407. data/lib/XMLDocument.rb +2 -2
  408. data/lib/daemon/ProcessIntercom.rb +50 -9
  409. data/lib/daemon/ProjectBroker.rb +63 -10
  410. data/lib/daemon/ProjectServer.rb +47 -16
  411. data/lib/daemon/ReportServer.rb +9 -4
  412. data/lib/daemon/WebServer.rb +204 -0
  413. data/lib/deep_copy.rb +4 -1
  414. data/lib/reports/CSVFile.rb +150 -66
  415. data/lib/reports/GanttChart.rb +2 -1
  416. data/lib/reports/Navigator.rb +18 -5
  417. data/lib/reports/NikuReport.rb +32 -2
  418. data/lib/reports/Report.rb +65 -37
  419. data/lib/reports/ReportBase.rb +14 -9
  420. data/lib/reports/ReportContext.rb +19 -4
  421. data/lib/reports/ReportTable.rb +2 -2
  422. data/lib/reports/ReportTableCell.rb +54 -30
  423. data/lib/reports/ResourceListRE.rb +4 -3
  424. data/lib/reports/StatusSheetReport.rb +8 -13
  425. data/lib/reports/TableReport.rb +47 -32
  426. data/lib/reports/TaskListRE.rb +3 -3
  427. data/lib/reports/TimeSheetReport.rb +14 -5
  428. data/lib/reports/TjpExportRE.rb +14 -19
  429. data/lib/taskjuggler3.rb +15 -0
  430. data/lib/tj3client.rb +9 -7
  431. data/lib/tj3d.rb +38 -10
  432. data/lib/tj3ss_sender.rb +7 -0
  433. data/lib/tj3ts_receiver.rb +1 -0
  434. data/manual/Day_To_Day_Juggling +1 -1
  435. data/manual/Rich_Text_Attributes +8 -0
  436. data/manual/TaskJuggler_2x_Migration +7 -0
  437. data/manual/The_TaskJuggler_Syntax +20 -6
  438. data/prj_cfg.rb +3 -2
  439. data/tasks/changelog.rake +36 -0
  440. data/tasks/csts.rake +2 -3
  441. data/tasks/gem.rake +10 -0
  442. data/tasks/missing.rake +0 -17
  443. data/test/TestSuite/ReportGenerator/Correct/Journal.html +63 -0
  444. data/test/TestSuite/ReportGenerator/Correct/Journal.tjp +14 -0
  445. data/test/TestSuite/{HTML-Reports/LogicalFunctions.tjp → ReportGenerator/Correct/LogicalFunctions1.tjp} +2 -2
  446. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +3 -0
  447. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.tjp +19 -0
  448. data/test/TestSuite/ReportGenerator/Correct/css/tjmanual.css +66 -0
  449. data/test/TestSuite/ReportGenerator/Correct/css/tjreport.css +407 -0
  450. data/test/TestSuite/ReportGenerator/Correct/icons/details.png +0 -0
  451. data/test/TestSuite/ReportGenerator/Correct/icons/flag-green.png +0 -0
  452. data/test/TestSuite/ReportGenerator/Correct/icons/flag-red.png +0 -0
  453. data/test/TestSuite/ReportGenerator/Correct/icons/flag-yellow.png +0 -0
  454. data/test/TestSuite/ReportGenerator/Correct/icons/resource.png +0 -0
  455. data/test/TestSuite/ReportGenerator/Correct/icons/resourcegroup.png +0 -0
  456. data/test/TestSuite/ReportGenerator/Correct/icons/task.png +0 -0
  457. data/test/TestSuite/ReportGenerator/Correct/icons/taskgroup.png +0 -0
  458. data/test/TestSuite/ReportGenerator/Correct/icons/trend-down.png +0 -0
  459. data/test/TestSuite/ReportGenerator/Correct/icons/trend-flat.png +0 -0
  460. data/test/TestSuite/ReportGenerator/Correct/icons/trend-up.png +0 -0
  461. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +2 -0
  462. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +26 -0
  463. data/test/TestSuite/ReportGenerator/Correct/refs/Journal-1.csv +6 -0
  464. data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions1-1.csv +7 -0
  465. data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions2-1.csv +2 -0
  466. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +2 -0
  467. data/test/TestSuite/ReportGenerator/Correct/scripts/wz_tooltip.js +1301 -0
  468. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.tjp +20 -0
  469. data/test/TestSuite/Scheduler/Correct/Container.html +349 -0
  470. data/test/TestSuite/Scheduler/Correct/Limits.tjp +11 -4
  471. data/test/TestSuite/Scheduler/Correct/Shift2.html +464 -150
  472. data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +108 -0
  473. data/test/TestSuite/Scheduler/Correct/TimeSheet2.tjp +7 -0
  474. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +14 -0
  475. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +233 -21
  476. data/test/TestSuite/Scheduler/Correct/scripts/wz_tooltip.js +20 -20
  477. data/test/TestSuite/StatusSheetTemplates/project.tji +35 -0
  478. data/test/TestSuite/StatusSheetTemplates/project.tjp +56 -0
  479. data/test/TestSuite/StatusSheets/run +3 -2
  480. data/test/TestSuite/Syntax/Correct/Include.tjp +1 -1
  481. data/test/TestSuite/Syntax/Correct/Macro-1.tjp +1 -1
  482. data/test/TestSuite/Syntax/Correct/Macro-2.tjp +6 -0
  483. data/test/TestSuite/Syntax/Correct/Macro-3.tjp +14 -0
  484. data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +32 -0
  485. data/test/TestSuite/Syntax/Correct/css/tjmanual.css +66 -0
  486. data/test/TestSuite/Syntax/Correct/css/tjreport.css +407 -0
  487. data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
  488. data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
  489. data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
  490. data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
  491. data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
  492. data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
  493. data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
  494. data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
  495. data/test/TestSuite/Syntax/Correct/icons/trend-down.png +0 -0
  496. data/test/TestSuite/Syntax/Correct/icons/trend-flat.png +0 -0
  497. data/test/TestSuite/Syntax/Correct/icons/trend-up.png +0 -0
  498. data/test/TestSuite/Syntax/Correct/include/dir1/file2.tji +3 -0
  499. data/test/TestSuite/Syntax/Correct/include/dir1/file5.tji +2 -0
  500. data/test/TestSuite/Syntax/Correct/include/dir3/all.tji +3 -0
  501. data/test/TestSuite/Syntax/Correct/include/dir3/file1.tji +2 -0
  502. data/test/TestSuite/Syntax/Correct/include/dir3/file2.tji +1 -0
  503. data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
  504. data/test/TestSuite/Syntax/Correct/tutorial.tjp +13 -13
  505. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
  506. data/test/TestSuite/Syntax/Errors/include_recursion.tjp +1 -0
  507. data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +2 -1
  508. data/test/TestSuite/Syntax/Errors/{eof_in_istring1.tjp → no_token_match1.tjp} +2 -2
  509. data/test/TestSuite/Syntax/Errors/{eof_in_istring2.tjp → no_token_match2.tjp} +2 -2
  510. data/test/TestSuite/Syntax/Errors/{eof_in_istring3.tjp → no_token_match3.tjp} +1 -1
  511. data/test/TestSuite/Syntax/Errors/{eof_in_istring4.tjp → no_token_match4.tjp} +1 -1
  512. data/test/TestSuite/Syntax/Errors/{eof_in_istring5.tjp → no_token_match5.tjp} +1 -1
  513. data/test/TestSuite/Syntax/Errors/not_scheduled.tjp +13 -0
  514. data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +1 -1
  515. data/test/TestSuite/TimeSheets/run +5 -5
  516. data/test/test_CSVFile.rb +75 -0
  517. data/test/test_Limits.rb +63 -5
  518. data/test/test_ProjectFileScanner.rb +163 -0
  519. data/test/test_ReportGenerator.rb +81 -0
  520. data/test/test_RichText.rb +21 -3
  521. data/test/test_Scheduler.rb +1 -1
  522. data/test/test_ShiftAssignments.rb +4 -4
  523. data/test/test_Syntax.rb +1 -1
  524. data/test/test_URLParameter.rb +30 -0
  525. metadata +126 -32
  526. data/test/TestSuite/Scheduler/Errors/not_scheduled.tjp +0 -8
  527. data/test/TestSuite/Syntax/Errors/bad_comment.tjp +0 -7
  528. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/boss_2002-03-01.tji +0 -36
  529. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev1_2002-03-01.tji +0 -48
  530. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev2_2002-03-01.tji +0 -67
  531. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev3_2002-03-01.tji +0 -67
  532. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/doc_2002-03-01.tji +0 -48
  533. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/resources.yml +0 -31
  534. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/test_2002-03-01.tji +0 -36
  535. data/test/TestSuite/TimeSheets/TimeSheetTemplates/acceptable_intervals +0 -1
  536. data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/all.tji +0 -1
  537. data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/dev2_2002-03-01.tji +0 -54
  538. data/test/TestSuite/TimeSheets/TimeSheets/all.tji +0 -2
  539. data/test/TestSuite/TimeSheets/receiver.log +0 -102
  540. data/test/TestSuite/TimeSheets/sender.log +0 -794
  541. data/test/TestSuite/TimeSheets/summary.log +0 -884
  542. data/test/TestSuite/TimeSheets/timesheets.log +0 -45
  543. data/test/TestSuite/TimeSheets/tj3d.log +0 -292
  544. data/test/test_TextScanner.rb +0 -95
@@ -69,13 +69,13 @@
69
69
  <h3 class="section-header">Methods</h3>
70
70
  <ul class="link-list">
71
71
 
72
- <li><a href="#M001547">::new</a></li>
72
+ <li><a href="#method-c-new">::new</a></li>
73
73
 
74
- <li><a href="#M001548">#ping</a></li>
74
+ <li><a href="#method-i-ping">#ping</a></li>
75
75
 
76
- <li><a href="#M001549">#terminateServer</a></li>
76
+ <li><a href="#method-i-terminateServer">#terminateServer</a></li>
77
77
 
78
- <li><a href="#M001550">#to_s</a></li>
78
+ <li><a href="#method-i-to_s">#to_s</a></li>
79
79
 
80
80
  </ul>
81
81
  </div>
@@ -92,6 +92,8 @@
92
92
  <h3 class="section-header">Files</h3>
93
93
  <ul>
94
94
 
95
+ <li class="file"><a href="../CHANGELOG.html">CHANGELOG</a></li>
96
+
95
97
  <li class="file"><a href="../COPYING.html">COPYING</a></li>
96
98
 
97
99
  <li class="file"><a href="../README.html">README</a></li>
@@ -261,6 +263,8 @@
261
263
 
262
264
  <li><a href="../TaskJuggler/NikuResource.html">TaskJuggler::NikuResource</a></li>
263
265
 
266
+ <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
267
+
264
268
  <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
265
269
 
266
270
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
@@ -275,6 +279,8 @@
275
279
 
276
280
  <li><a href="../TaskJuggler/ProjectFileParser.html">TaskJuggler::ProjectFileParser</a></li>
277
281
 
282
+ <li><a href="../TaskJuggler/ProjectFileScanner.html">TaskJuggler::ProjectFileScanner</a></li>
283
+
278
284
  <li><a href="../TaskJuggler/ProjectRecord.html">TaskJuggler::ProjectRecord</a></li>
279
285
 
280
286
  <li><a href="../TaskJuggler/ProjectServer.html">TaskJuggler::ProjectServer</a></li>
@@ -291,12 +297,16 @@
291
297
 
292
298
  <li><a href="../TaskJuggler/Query.html">TaskJuggler::Query</a></li>
293
299
 
300
+ <li><a href="../TaskJuggler/RTFHandlers.html">TaskJuggler::RTFHandlers</a></li>
301
+
294
302
  <li><a href="../TaskJuggler/RTFNavigator.html">TaskJuggler::RTFNavigator</a></li>
295
303
 
296
304
  <li><a href="../TaskJuggler/RTFQuery.html">TaskJuggler::RTFQuery</a></li>
297
305
 
298
306
  <li><a href="../TaskJuggler/RTFReport.html">TaskJuggler::RTFReport</a></li>
299
307
 
308
+ <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
309
+
300
310
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
301
311
 
302
312
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -315,6 +325,8 @@
315
325
 
316
326
  <li><a href="../TaskJuggler/ReportServerRecord.html">TaskJuggler::ReportServerRecord</a></li>
317
327
 
328
+ <li><a href="../TaskJuggler/ReportServlet.html">TaskJuggler::ReportServlet</a></li>
329
+
318
330
  <li><a href="../TaskJuggler/ReportTable.html">TaskJuggler::ReportTable</a></li>
319
331
 
320
332
  <li><a href="../TaskJuggler/ReportTableCell.html">TaskJuggler::ReportTableCell</a></li>
@@ -443,6 +455,8 @@
443
455
 
444
456
  <li><a href="../TaskJuggler/TextScanner/FileStreamHandle.html">TaskJuggler::TextScanner::FileStreamHandle</a></li>
445
457
 
458
+ <li><a href="../TaskJuggler/TextScanner/MacroStackEntry.html">TaskJuggler::TextScanner::MacroStackEntry</a></li>
459
+
446
460
  <li><a href="../TaskJuggler/TextScanner/StreamHandle.html">TaskJuggler::TextScanner::StreamHandle</a></li>
447
461
 
448
462
  <li><a href="../TaskJuggler/TimeSheet.html">TaskJuggler::TimeSheet</a></li>
@@ -487,8 +501,12 @@
487
501
 
488
502
  <li><a href="../TaskJuggler/TjpSyntaxRules.html">TaskJuggler::TjpSyntaxRules</a></li>
489
503
 
504
+ <li><a href="../TaskJuggler/URLParameter.html">TaskJuggler::URLParameter</a></li>
505
+
490
506
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
491
507
 
508
+ <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
509
+
492
510
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
493
511
 
494
512
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -515,6 +533,8 @@
515
533
 
516
534
  <li><a href="../String.html">String</a></li>
517
535
 
536
+ <li><a href="../StringIO.html">StringIO</a></li>
537
+
518
538
  </ul>
519
539
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
520
540
  </div>
@@ -654,7 +674,7 @@ manage the loaded projects. There is one entry for each project in the
654
674
 
655
675
 
656
676
  <div id="new-method" class="method-detail ">
657
- <a name="M001547"></a>
677
+ <a name="method-c-new"></a>
658
678
 
659
679
  <div class="method-heading">
660
680
 
@@ -673,26 +693,26 @@ manage the loaded projects. There is one entry for each project in the
673
693
  <div class="method-source-code"
674
694
  id="new-source">
675
695
  <pre>
676
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 393</span>
677
- 393: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">tag</span>)
678
- 394: <span class="ruby-comment cmt"># Before we know the project ID we use this tag to uniquely identify the</span>
679
- 395: <span class="ruby-comment cmt"># project.</span>
680
- 396: <span class="ruby-ivar">@tag</span> = <span class="ruby-identifier">tag</span>
681
- 397: <span class="ruby-comment cmt"># The authentication key for the ProjectServer process.</span>
682
- 398: <span class="ruby-ivar">@authKey</span> = <span class="ruby-keyword kw">nil</span>
683
- 399: <span class="ruby-comment cmt"># The DRb URI where the ProjectServer process is listening.</span>
684
- 400: <span class="ruby-ivar">@uri</span> = <span class="ruby-keyword kw">nil</span>
685
- 401: <span class="ruby-comment cmt"># The ID of the project.</span>
686
- 402: <span class="ruby-ivar">@id</span> = <span class="ruby-keyword kw">nil</span>
687
- 403: <span class="ruby-comment cmt"># The state of the project. :new, :loading, :ready, :failed</span>
688
- 404: <span class="ruby-comment cmt"># and :obsolete are supported.</span>
689
- 405: <span class="ruby-ivar">@state</span> = <span class="ruby-value">:new</span>
690
- 406: <span class="ruby-comment cmt"># A time stamp when the project became ready for service.</span>
691
- 407: <span class="ruby-ivar">@readySince</span> = <span class="ruby-keyword kw">nil</span>
692
- 408:
693
- 409: <span class="ruby-ivar">@log</span> = <span class="ruby-constant">LogFile</span>.<span class="ruby-identifier">instance</span>
694
- 410: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-keyword kw">nil</span>
695
- 411: <span class="ruby-keyword kw">end</span></pre>
696
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 446</span>
697
+ 446: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">tag</span>)
698
+ 447: <span class="ruby-comment cmt"># Before we know the project ID we use this tag to uniquely identify the</span>
699
+ 448: <span class="ruby-comment cmt"># project.</span>
700
+ 449: <span class="ruby-ivar">@tag</span> = <span class="ruby-identifier">tag</span>
701
+ 450: <span class="ruby-comment cmt"># The authentication key for the ProjectServer process.</span>
702
+ 451: <span class="ruby-ivar">@authKey</span> = <span class="ruby-keyword kw">nil</span>
703
+ 452: <span class="ruby-comment cmt"># The DRb URI where the ProjectServer process is listening.</span>
704
+ 453: <span class="ruby-ivar">@uri</span> = <span class="ruby-keyword kw">nil</span>
705
+ 454: <span class="ruby-comment cmt"># The ID of the project.</span>
706
+ 455: <span class="ruby-ivar">@id</span> = <span class="ruby-keyword kw">nil</span>
707
+ 456: <span class="ruby-comment cmt"># The state of the project. :new, :loading, :ready, :failed</span>
708
+ 457: <span class="ruby-comment cmt"># and :obsolete are supported.</span>
709
+ 458: <span class="ruby-ivar">@state</span> = <span class="ruby-value">:new</span>
710
+ 459: <span class="ruby-comment cmt"># A time stamp when the project became ready for service.</span>
711
+ 460: <span class="ruby-ivar">@readySince</span> = <span class="ruby-keyword kw">nil</span>
712
+ 461:
713
+ 462: <span class="ruby-ivar">@log</span> = <span class="ruby-constant">LogFile</span>.<span class="ruby-identifier">instance</span>
714
+ 463: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-keyword kw">nil</span>
715
+ 464: <span class="ruby-keyword kw">end</span></pre>
696
716
  </div>
697
717
 
698
718
  </div>
@@ -710,7 +730,7 @@ manage the loaded projects. There is one entry for each project in the
710
730
 
711
731
 
712
732
  <div id="ping-method" class="method-detail ">
713
- <a name="M001548"></a>
733
+ <a name="method-i-ping"></a>
714
734
 
715
735
  <div class="method-heading">
716
736
 
@@ -729,20 +749,20 @@ manage the loaded projects. There is one entry for each project in the
729
749
  <div class="method-source-code"
730
750
  id="ping-source">
731
751
  <pre>
732
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 413</span>
733
- 413: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ping</span>
734
- 414: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@uri</span>
735
- 415:
736
- 416: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Sending ping to ProcessServer #{@uri}&quot;</span>)
737
- 417: <span class="ruby-keyword kw">begin</span>
738
- 418: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@uri</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@projectServer</span>
739
- 419: <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">ping</span>(<span class="ruby-ivar">@authKey</span>)
740
- 420: <span class="ruby-keyword kw">rescue</span>
741
- 421: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Ping failed: #{$!}&quot;</span>)
742
- 422: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
743
- 423: <span class="ruby-keyword kw">end</span>
744
- 424: <span class="ruby-keyword kw">true</span>
745
- 425: <span class="ruby-keyword kw">end</span></pre>
752
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 466</span>
753
+ 466: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ping</span>
754
+ 467: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@uri</span>
755
+ 468:
756
+ 469: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Sending ping to ProcessServer #{@uri}&quot;</span>)
757
+ 470: <span class="ruby-keyword kw">begin</span>
758
+ 471: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@uri</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@projectServer</span>
759
+ 472: <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">ping</span>(<span class="ruby-ivar">@authKey</span>)
760
+ 473: <span class="ruby-keyword kw">rescue</span>
761
+ 474: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Ping failed: #{$!}&quot;</span>)
762
+ 475: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
763
+ 476: <span class="ruby-keyword kw">end</span>
764
+ 477: <span class="ruby-keyword kw">true</span>
765
+ 478: <span class="ruby-keyword kw">end</span></pre>
746
766
  </div>
747
767
 
748
768
  </div>
@@ -754,7 +774,7 @@ manage the loaded projects. There is one entry for each project in the
754
774
 
755
775
 
756
776
  <div id="terminate-erver-method" class="method-detail ">
757
- <a name="M001549"></a>
777
+ <a name="method-i-terminateServer"></a>
758
778
 
759
779
  <div class="method-heading">
760
780
 
@@ -776,19 +796,19 @@ href="ProjectServer.html">ProjectServer</a>.
776
796
  <div class="method-source-code"
777
797
  id="terminate-erver-source">
778
798
  <pre>
779
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 428</span>
780
- 428: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">terminateServer</span>
781
- 429: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@uri</span>
782
- 430:
783
- 431: <span class="ruby-keyword kw">begin</span>
784
- 432: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Sending termination request to ProcessServer #{@uri}&quot;</span>)
785
- 433: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@uri</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@projectServer</span>
786
- 434: <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">terminate</span>(<span class="ruby-ivar">@authKey</span>)
787
- 435: <span class="ruby-keyword kw">rescue</span>
788
- 436: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Termination of ProjectServer failed: #{$!}&quot;</span>)
789
- 437: <span class="ruby-keyword kw">end</span>
790
- 438: <span class="ruby-ivar">@uri</span> = <span class="ruby-keyword kw">nil</span>
791
- 439: <span class="ruby-keyword kw">end</span></pre>
799
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 481</span>
800
+ 481: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">terminateServer</span>
801
+ 482: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@uri</span>
802
+ 483:
803
+ 484: <span class="ruby-keyword kw">begin</span>
804
+ 485: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Sending termination request to ProcessServer #{@uri}&quot;</span>)
805
+ 486: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@uri</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@projectServer</span>
806
+ 487: <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">terminate</span>(<span class="ruby-ivar">@authKey</span>)
807
+ 488: <span class="ruby-keyword kw">rescue</span>
808
+ 489: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Termination of ProjectServer failed: #{$!}&quot;</span>)
809
+ 490: <span class="ruby-keyword kw">end</span>
810
+ 491: <span class="ruby-ivar">@uri</span> = <span class="ruby-keyword kw">nil</span>
811
+ 492: <span class="ruby-keyword kw">end</span></pre>
792
812
  </div>
793
813
 
794
814
  </div>
@@ -800,7 +820,7 @@ href="ProjectServer.html">ProjectServer</a>.
800
820
 
801
821
 
802
822
  <div id="to-s-method" class="method-detail ">
803
- <a name="M001550"></a>
823
+ <a name="method-i-to_s"></a>
804
824
 
805
825
  <div class="method-heading">
806
826
 
@@ -821,11 +841,11 @@ This is used to generate the status table.
821
841
  <div class="method-source-code"
822
842
  id="to-s-source">
823
843
  <pre>
824
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 442</span>
825
- 442: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">index</span>)
826
- 443: <span class="ruby-identifier">sprintf</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">index</span>, <span class="ruby-ivar">@id</span>, <span class="ruby-ivar">@state</span>,
827
- 444: <span class="ruby-ivar">@readySince</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@readySince</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-value str">'%Y-%m-%d %H:%M:%S'</span>) <span class="ruby-operator">:</span> <span class="ruby-value str">''</span>)
828
- 445: <span class="ruby-keyword kw">end</span></pre>
844
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 495</span>
845
+ 495: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">index</span>)
846
+ 496: <span class="ruby-identifier">sprintf</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">index</span>, <span class="ruby-ivar">@id</span>, <span class="ruby-ivar">@state</span>,
847
+ 497: <span class="ruby-ivar">@readySince</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@readySince</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-value str">'%Y-%m-%d %H:%M:%S'</span>) <span class="ruby-operator">:</span> <span class="ruby-value str">''</span>)
848
+ 498: <span class="ruby-keyword kw">end</span></pre>
829
849
  </div>
830
850
 
831
851
  </div>
@@ -69,19 +69,21 @@
69
69
  <h3 class="section-header">Methods</h3>
70
70
  <ul class="link-list">
71
71
 
72
- <li><a href="#M001551">::new</a></li>
72
+ <li><a href="#method-c-new">::new</a></li>
73
73
 
74
- <li><a href="#M001554">#dropReportServer</a></li>
74
+ <li><a href="#method-i-getProjectName">#getProjectName</a></li>
75
75
 
76
- <li><a href="#M001553">#getReportServer</a></li>
76
+ <li><a href="#method-i-getReportList">#getReportList</a></li>
77
77
 
78
- <li><a href="#M001552">#loadProject</a></li>
78
+ <li><a href="#method-i-getReportServer">#getReportServer</a></li>
79
79
 
80
- <li><a href="#M001555">#ping</a></li>
80
+ <li><a href="#method-i-loadProject">#loadProject</a></li>
81
81
 
82
- <li><a href="#M001557">#startHousekeeping</a></li>
82
+ <li><a href="#method-i-ping">#ping</a></li>
83
83
 
84
- <li><a href="#M001556">#updateState</a></li>
84
+ <li><a href="#method-i-startHousekeeping">#startHousekeeping</a></li>
85
+
86
+ <li><a href="#method-i-updateState">#updateState</a></li>
85
87
 
86
88
  </ul>
87
89
  </div>
@@ -109,6 +111,8 @@
109
111
  <h3 class="section-header">Files</h3>
110
112
  <ul>
111
113
 
114
+ <li class="file"><a href="../CHANGELOG.html">CHANGELOG</a></li>
115
+
112
116
  <li class="file"><a href="../COPYING.html">COPYING</a></li>
113
117
 
114
118
  <li class="file"><a href="../README.html">README</a></li>
@@ -278,6 +282,8 @@
278
282
 
279
283
  <li><a href="../TaskJuggler/NikuResource.html">TaskJuggler::NikuResource</a></li>
280
284
 
285
+ <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
286
+
281
287
  <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
282
288
 
283
289
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
@@ -292,6 +298,8 @@
292
298
 
293
299
  <li><a href="../TaskJuggler/ProjectFileParser.html">TaskJuggler::ProjectFileParser</a></li>
294
300
 
301
+ <li><a href="../TaskJuggler/ProjectFileScanner.html">TaskJuggler::ProjectFileScanner</a></li>
302
+
295
303
  <li><a href="../TaskJuggler/ProjectRecord.html">TaskJuggler::ProjectRecord</a></li>
296
304
 
297
305
  <li><a href="../TaskJuggler/ProjectServer.html">TaskJuggler::ProjectServer</a></li>
@@ -308,12 +316,16 @@
308
316
 
309
317
  <li><a href="../TaskJuggler/Query.html">TaskJuggler::Query</a></li>
310
318
 
319
+ <li><a href="../TaskJuggler/RTFHandlers.html">TaskJuggler::RTFHandlers</a></li>
320
+
311
321
  <li><a href="../TaskJuggler/RTFNavigator.html">TaskJuggler::RTFNavigator</a></li>
312
322
 
313
323
  <li><a href="../TaskJuggler/RTFQuery.html">TaskJuggler::RTFQuery</a></li>
314
324
 
315
325
  <li><a href="../TaskJuggler/RTFReport.html">TaskJuggler::RTFReport</a></li>
316
326
 
327
+ <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
328
+
317
329
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
318
330
 
319
331
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -332,6 +344,8 @@
332
344
 
333
345
  <li><a href="../TaskJuggler/ReportServerRecord.html">TaskJuggler::ReportServerRecord</a></li>
334
346
 
347
+ <li><a href="../TaskJuggler/ReportServlet.html">TaskJuggler::ReportServlet</a></li>
348
+
335
349
  <li><a href="../TaskJuggler/ReportTable.html">TaskJuggler::ReportTable</a></li>
336
350
 
337
351
  <li><a href="../TaskJuggler/ReportTableCell.html">TaskJuggler::ReportTableCell</a></li>
@@ -460,6 +474,8 @@
460
474
 
461
475
  <li><a href="../TaskJuggler/TextScanner/FileStreamHandle.html">TaskJuggler::TextScanner::FileStreamHandle</a></li>
462
476
 
477
+ <li><a href="../TaskJuggler/TextScanner/MacroStackEntry.html">TaskJuggler::TextScanner::MacroStackEntry</a></li>
478
+
463
479
  <li><a href="../TaskJuggler/TextScanner/StreamHandle.html">TaskJuggler::TextScanner::StreamHandle</a></li>
464
480
 
465
481
  <li><a href="../TaskJuggler/TimeSheet.html">TaskJuggler::TimeSheet</a></li>
@@ -504,8 +520,12 @@
504
520
 
505
521
  <li><a href="../TaskJuggler/TjpSyntaxRules.html">TaskJuggler::TjpSyntaxRules</a></li>
506
522
 
523
+ <li><a href="../TaskJuggler/URLParameter.html">TaskJuggler::URLParameter</a></li>
524
+
507
525
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
508
526
 
527
+ <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
528
+
509
529
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
510
530
 
511
531
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -532,6 +552,8 @@
532
552
 
533
553
  <li><a href="../String.html">String</a></li>
534
554
 
555
+ <li><a href="../StringIO.html">StringIO</a></li>
556
+
535
557
  </ul>
536
558
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
537
559
  </div>
@@ -611,12 +633,12 @@ permit direct access to the <a href="ProjectServer.html">ProjectServer</a>.
611
633
 
612
634
 
613
635
  <div id="new-method" class="method-detail ">
614
- <a name="M001551"></a>
636
+ <a name="method-c-new"></a>
615
637
 
616
638
  <div class="method-heading">
617
639
 
618
640
  <span class="method-name">new</span><span
619
- class="method-args">()</span>
641
+ class="method-args">(projectData = nil)</span>
620
642
  <span class="method-click-advice">click to toggle source</span>
621
643
 
622
644
  </div>
@@ -631,83 +653,84 @@ permit direct access to the <a href="ProjectServer.html">ProjectServer</a>.
631
653
  id="new-source">
632
654
  <pre>
633
655
  <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 40</span>
634
- 40: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>
635
- 41: <span class="ruby-comment cmt"># Since we are still in the ProjectBroker process, the current DRb</span>
636
- 42: <span class="ruby-comment cmt"># server is still the ProjectBroker DRb server.</span>
637
- 43: <span class="ruby-ivar">@daemonURI</span> = <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">current_server</span>.<span class="ruby-identifier">uri</span>
638
- 44: <span class="ruby-comment cmt"># Used later to store the DRbObject of the ProjectBroker.</span>
639
- 45: <span class="ruby-ivar">@daemon</span> = <span class="ruby-keyword kw">nil</span>
640
- 46: <span class="ruby-identifier">initIntercom</span>
641
- 47:
642
- 48: <span class="ruby-ivar">@pid</span> = <span class="ruby-keyword kw">nil</span>
643
- 49: <span class="ruby-ivar">@uri</span> = <span class="ruby-keyword kw">nil</span>
644
- 50:
645
- 51: <span class="ruby-comment cmt"># A reference to the TaskJuggler object that holds the project data.</span>
646
- 52: <span class="ruby-ivar">@tj</span> = <span class="ruby-keyword kw">nil</span>
647
- 53: <span class="ruby-comment cmt"># The current state of the project.</span>
648
- 54: <span class="ruby-ivar">@state</span> = <span class="ruby-value">:new</span>
649
- 55: <span class="ruby-comment cmt"># A time stamp when the last @state update happened.</span>
650
- 56: <span class="ruby-ivar">@stateUpdated</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
651
- 57: <span class="ruby-comment cmt"># A lock to protect access to @state</span>
652
- 58: <span class="ruby-ivar">@stateLock</span> = <span class="ruby-constant">Monitor</span>.<span class="ruby-identifier">new</span>
653
- 59:
654
- 60: <span class="ruby-comment cmt"># A Queue to asynchronously generate new ReportServer objects.</span>
655
- 61: <span class="ruby-ivar">@reportServerRequests</span> = <span class="ruby-constant">Queue</span>.<span class="ruby-identifier">new</span>
656
- 62:
657
- 63: <span class="ruby-comment cmt"># A list of active ReportServer objects</span>
658
- 64: <span class="ruby-ivar">@reportServers</span> = []
659
- 65: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">extend</span>(<span class="ruby-constant">MonitorMixin</span>)
660
- 66:
661
- 67: <span class="ruby-ivar">@lastPing</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
662
- 68:
663
- 69: <span class="ruby-comment cmt"># We've started a DRb server before. This will continue to live somewhat</span>
664
- 70: <span class="ruby-comment cmt"># in the child. All attempts to create a DRb connection from the child</span>
665
- 71: <span class="ruby-comment cmt"># to the parent will end up in the child again. So we use a Pipe to</span>
666
- 72: <span class="ruby-comment cmt"># communicate the URI of the child DRb server to the parent. The</span>
667
- 73: <span class="ruby-comment cmt"># communication from the parent to the child is not affected by the</span>
668
- 74: <span class="ruby-comment cmt"># zombie DRb server in the child process.</span>
669
- 75: <span class="ruby-identifier">rd</span>, <span class="ruby-identifier">wr</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">pipe</span>
670
- 76:
671
- 77: <span class="ruby-keyword kw">if</span> (<span class="ruby-ivar">@pid</span> = <span class="ruby-identifier">fork</span>) <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
672
- 78: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-value str">'ProjectServer fork failed'</span>)
673
- 79: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">nil?</span>
674
- 80: <span class="ruby-comment cmt"># This is the child</span>
675
- 81: <span class="ruby-identifier">$SAFE</span> = <span class="ruby-value">1</span>
676
- 82: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">install_acl</span>(<span class="ruby-constant">ACL</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">] deny all
677
- 83: allow 127.0.0.1 ]</span>))
678
- 84: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">start_service</span>
679
- 85: <span class="ruby-identifier">iFace</span> = <span class="ruby-constant">ProjectServerIface</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
680
- 86: <span class="ruby-keyword kw">begin</span>
681
- 87: <span class="ruby-ivar">@uri</span> = <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">start_service</span>(<span class="ruby-value str">'druby://127.0.0.1:0'</span>, <span class="ruby-identifier">iFace</span>).<span class="ruby-identifier">uri</span>
682
- 88: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Project server is listening on #{@uri}&quot;</span>)
683
- 89: <span class="ruby-keyword kw">rescue</span>
684
- 90: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;ProjectServer can't start DRb: #{$!}&quot;</span>)
685
- 91: <span class="ruby-keyword kw">end</span>
686
- 92:
687
- 93: <span class="ruby-comment cmt"># Send the URI of the newly started DRb server to the parent process.</span>
688
- 94: <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">close</span>
689
- 95: <span class="ruby-identifier">wr</span>.<span class="ruby-identifier">write</span> <span class="ruby-ivar">@uri</span>
690
- 96: <span class="ruby-identifier">wr</span>.<span class="ruby-identifier">close</span>
691
- 97:
692
- 98: <span class="ruby-comment cmt"># Start a Thread that waits for the @terminate flag to be set and does</span>
693
- 99: <span class="ruby-comment cmt"># other background tasks.</span>
694
- 100: <span class="ruby-identifier">startTerminator</span>
695
- 101: <span class="ruby-comment cmt"># Start another Thread that will be used to fork-off ReportServer</span>
696
- 102: <span class="ruby-comment cmt"># processes.</span>
697
- 103: <span class="ruby-identifier">startHousekeeping</span>
698
- 104:
699
- 105: <span class="ruby-comment cmt"># Cleanup the DRb threads</span>
700
- 106: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">thread</span>.<span class="ruby-identifier">join</span>
701
- 107: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">'Project server terminated'</span>)
702
- 108: <span class="ruby-identifier">exit</span> <span class="ruby-value">0</span>
703
- 109: <span class="ruby-keyword kw">else</span>
704
- 110: <span class="ruby-comment cmt"># This is the parent</span>
705
- 111: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">detach</span>(<span class="ruby-ivar">@pid</span>)
706
- 112: <span class="ruby-identifier">wr</span>.<span class="ruby-identifier">close</span>
707
- 113: <span class="ruby-ivar">@uri</span> = <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">read</span>
708
- 114: <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">close</span>
709
- 115: <span class="ruby-keyword kw">end</span>
710
- 116: <span class="ruby-keyword kw">end</span></pre>
656
+ 40: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">projectData</span> = <span class="ruby-keyword kw">nil</span>)
657
+ 41: <span class="ruby-ivar">@projectData</span> = <span class="ruby-identifier">projectData</span>
658
+ 42: <span class="ruby-comment cmt"># Since we are still in the ProjectBroker process, the current DRb</span>
659
+ 43: <span class="ruby-comment cmt"># server is still the ProjectBroker DRb server.</span>
660
+ 44: <span class="ruby-ivar">@daemonURI</span> = <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">current_server</span>.<span class="ruby-identifier">uri</span>
661
+ 45: <span class="ruby-comment cmt"># Used later to store the DRbObject of the ProjectBroker.</span>
662
+ 46: <span class="ruby-ivar">@daemon</span> = <span class="ruby-keyword kw">nil</span>
663
+ 47: <span class="ruby-identifier">initIntercom</span>
664
+ 48:
665
+ 49: <span class="ruby-ivar">@pid</span> = <span class="ruby-keyword kw">nil</span>
666
+ 50: <span class="ruby-ivar">@uri</span> = <span class="ruby-keyword kw">nil</span>
667
+ 51:
668
+ 52: <span class="ruby-comment cmt"># A reference to the TaskJuggler object that holds the project data.</span>
669
+ 53: <span class="ruby-ivar">@tj</span> = <span class="ruby-keyword kw">nil</span>
670
+ 54: <span class="ruby-comment cmt"># The current state of the project.</span>
671
+ 55: <span class="ruby-ivar">@state</span> = <span class="ruby-value">:new</span>
672
+ 56: <span class="ruby-comment cmt"># A time stamp when the last @state update happened.</span>
673
+ 57: <span class="ruby-ivar">@stateUpdated</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
674
+ 58: <span class="ruby-comment cmt"># A lock to protect access to @state</span>
675
+ 59: <span class="ruby-ivar">@stateLock</span> = <span class="ruby-constant">Monitor</span>.<span class="ruby-identifier">new</span>
676
+ 60:
677
+ 61: <span class="ruby-comment cmt"># A Queue to asynchronously generate new ReportServer objects.</span>
678
+ 62: <span class="ruby-ivar">@reportServerRequests</span> = <span class="ruby-constant">Queue</span>.<span class="ruby-identifier">new</span>
679
+ 63:
680
+ 64: <span class="ruby-comment cmt"># A list of active ReportServer objects</span>
681
+ 65: <span class="ruby-ivar">@reportServers</span> = []
682
+ 66: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">extend</span>(<span class="ruby-constant">MonitorMixin</span>)
683
+ 67:
684
+ 68: <span class="ruby-ivar">@lastPing</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
685
+ 69:
686
+ 70: <span class="ruby-comment cmt"># We've started a DRb server before. This will continue to live somewhat</span>
687
+ 71: <span class="ruby-comment cmt"># in the child. All attempts to create a DRb connection from the child</span>
688
+ 72: <span class="ruby-comment cmt"># to the parent will end up in the child again. So we use a Pipe to</span>
689
+ 73: <span class="ruby-comment cmt"># communicate the URI of the child DRb server to the parent. The</span>
690
+ 74: <span class="ruby-comment cmt"># communication from the parent to the child is not affected by the</span>
691
+ 75: <span class="ruby-comment cmt"># zombie DRb server in the child process.</span>
692
+ 76: <span class="ruby-identifier">rd</span>, <span class="ruby-identifier">wr</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">pipe</span>
693
+ 77:
694
+ 78: <span class="ruby-keyword kw">if</span> (<span class="ruby-ivar">@pid</span> = <span class="ruby-identifier">fork</span>) <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
695
+ 79: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-value str">'ProjectServer fork failed'</span>)
696
+ 80: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">nil?</span>
697
+ 81: <span class="ruby-comment cmt"># This is the child</span>
698
+ 82: <span class="ruby-identifier">$SAFE</span> = <span class="ruby-value">1</span>
699
+ 83: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">install_acl</span>(<span class="ruby-constant">ACL</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">] deny all
700
+ 84: allow 127.0.0.1 ]</span>))
701
+ 85: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">start_service</span>
702
+ 86: <span class="ruby-identifier">iFace</span> = <span class="ruby-constant">ProjectServerIface</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
703
+ 87: <span class="ruby-keyword kw">begin</span>
704
+ 88: <span class="ruby-ivar">@uri</span> = <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">start_service</span>(<span class="ruby-value str">'druby://127.0.0.1:0'</span>, <span class="ruby-identifier">iFace</span>).<span class="ruby-identifier">uri</span>
705
+ 89: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Project server is listening on #{@uri}&quot;</span>)
706
+ 90: <span class="ruby-keyword kw">rescue</span>
707
+ 91: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;ProjectServer can't start DRb: #{$!}&quot;</span>)
708
+ 92: <span class="ruby-keyword kw">end</span>
709
+ 93:
710
+ 94: <span class="ruby-comment cmt"># Send the URI of the newly started DRb server to the parent process.</span>
711
+ 95: <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">close</span>
712
+ 96: <span class="ruby-identifier">wr</span>.<span class="ruby-identifier">write</span> <span class="ruby-ivar">@uri</span>
713
+ 97: <span class="ruby-identifier">wr</span>.<span class="ruby-identifier">close</span>
714
+ 98:
715
+ 99: <span class="ruby-comment cmt"># Start a Thread that waits for the @terminate flag to be set and does</span>
716
+ 100: <span class="ruby-comment cmt"># other background tasks.</span>
717
+ 101: <span class="ruby-identifier">startTerminator</span>
718
+ 102: <span class="ruby-comment cmt"># Start another Thread that will be used to fork-off ReportServer</span>
719
+ 103: <span class="ruby-comment cmt"># processes.</span>
720
+ 104: <span class="ruby-identifier">startHousekeeping</span>
721
+ 105:
722
+ 106: <span class="ruby-comment cmt"># Cleanup the DRb threads</span>
723
+ 107: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">thread</span>.<span class="ruby-identifier">join</span>
724
+ 108: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">'Project server terminated'</span>)
725
+ 109: <span class="ruby-identifier">exit</span> <span class="ruby-value">0</span>
726
+ 110: <span class="ruby-keyword kw">else</span>
727
+ 111: <span class="ruby-comment cmt"># This is the parent</span>
728
+ 112: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">detach</span>(<span class="ruby-ivar">@pid</span>)
729
+ 113: <span class="ruby-identifier">wr</span>.<span class="ruby-identifier">close</span>
730
+ 114: <span class="ruby-ivar">@uri</span> = <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">read</span>
731
+ 115: <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">close</span>
732
+ 116: <span class="ruby-keyword kw">end</span>
733
+ 117: <span class="ruby-keyword kw">end</span></pre>
711
734
  </div>
712
735
 
713
736
  </div>
@@ -724,13 +747,51 @@ permit direct access to the <a href="ProjectServer.html">ProjectServer</a>.
724
747
  <h3 class="section-header">Public Instance Methods</h3>
725
748
 
726
749
 
727
- <div id="drop-eport-erver-method" class="method-detail ">
728
- <a name="M001554"></a>
750
+ <div id="get-roject-ame-method" class="method-detail ">
751
+ <a name="method-i-getProjectName"></a>
752
+
753
+ <div class="method-heading">
754
+
755
+ <span class="method-name">getProjectName</span><span
756
+ class="method-args">()</span>
757
+ <span class="method-click-advice">click to toggle source</span>
758
+
759
+ </div>
760
+
761
+ <div class="method-description">
762
+
763
+ <p>
764
+ Return the name of the loaded project or nil.
765
+ </p>
766
+
767
+
768
+
769
+ <div class="method-source-code"
770
+ id="get-roject-ame-source">
771
+ <pre>
772
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 156</span>
773
+ 156: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getProjectName</span>
774
+ 157: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span>
775
+ 158: <span class="ruby-identifier">restartTimer</span>
776
+ 159: <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">projectName</span>
777
+ 160: <span class="ruby-keyword kw">end</span></pre>
778
+ </div>
779
+
780
+ </div>
781
+
782
+
783
+
784
+
785
+ </div>
786
+
787
+
788
+ <div id="get-eport-ist-method" class="method-detail ">
789
+ <a name="method-i-getReportList"></a>
729
790
 
730
791
  <div class="method-heading">
731
792
 
732
- <span class="method-name">dropReportServer</span><span
733
- class="method-args">(uri)</span>
793
+ <span class="method-name">getReportList</span><span
794
+ class="method-args">()</span>
734
795
  <span class="method-click-advice">click to toggle source</span>
735
796
 
736
797
  </div>
@@ -738,21 +799,26 @@ permit direct access to the <a href="ProjectServer.html">ProjectServer</a>.
738
799
  <div class="method-description">
739
800
 
740
801
  <p>
741
- Remove a <a href="ReportServer.html">ReportServer</a> that&#8217;s no
742
- longer needed. The client is responsible for terminating it.
802
+ Return a list of the HTML reports defined for the project.
743
803
  </p>
744
804
 
745
805
 
746
806
 
747
807
  <div class="method-source-code"
748
- id="drop-eport-erver-source">
808
+ id="get-eport-ist-source">
749
809
  <pre>
750
- <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 185</span>
751
- 185: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dropReportServer</span>(<span class="ruby-identifier">uri</span>)
752
- 186: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
753
- 187: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">rs</span><span class="ruby-operator">|</span> <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">uri</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">uri</span> }
754
- 188: <span class="ruby-keyword kw">end</span>
755
- 189: <span class="ruby-keyword kw">end</span></pre>
810
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 163</span>
811
+ 163: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getReportList</span>
812
+ 164: <span class="ruby-keyword kw">return</span> [] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">project</span> = <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">project</span>)
813
+ 165: <span class="ruby-identifier">list</span> = []
814
+ 166: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">reports</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">report</span><span class="ruby-operator">|</span>
815
+ 167: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'formats'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-value">:html</span>)
816
+ 168: <span class="ruby-identifier">list</span> <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">report</span>.<span class="ruby-identifier">fullId</span>, <span class="ruby-identifier">report</span>.<span class="ruby-identifier">name</span> ]
817
+ 169: <span class="ruby-keyword kw">end</span>
818
+ 170: <span class="ruby-keyword kw">end</span>
819
+ 171: <span class="ruby-identifier">restartTimer</span>
820
+ 172: <span class="ruby-identifier">list</span>
821
+ 173: <span class="ruby-keyword kw">end</span></pre>
756
822
  </div>
757
823
 
758
824
  </div>
@@ -764,7 +830,7 @@ longer needed. The client is responsible for terminating it.
764
830
 
765
831
 
766
832
  <div id="get-eport-erver-method" class="method-detail ">
767
- <a name="M001553"></a>
833
+ <a name="method-i-getReportServer"></a>
768
834
 
769
835
  <div class="method-heading">
770
836
 
@@ -787,34 +853,35 @@ and the authentication key of this new server.
787
853
  <div class="method-source-code"
788
854
  id="get-eport-erver-source">
789
855
  <pre>
790
- <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 155</span>
791
- 155: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getReportServer</span>
792
- 156: <span class="ruby-comment cmt"># ReportServer objects only make sense for successfully scheduled</span>
793
- 157: <span class="ruby-comment cmt"># projects.</span>
794
- 158: <span class="ruby-keyword kw">return</span> [ <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span> ] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:ready</span>
795
- 159:
796
- 160: <span class="ruby-comment cmt"># The ReportServer will be created asynchronously in another Thread. To</span>
797
- 161: <span class="ruby-comment cmt"># find it in the @reportServers list, we create a unique tag to identify</span>
798
- 162: <span class="ruby-comment cmt"># it.</span>
799
- 163: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">rand</span>(<span class="ruby-value">99999999999999</span>)
800
- 164: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Pushing #{tag} onto report server request queue&quot;</span>)
801
- 165: <span class="ruby-ivar">@reportServerRequests</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">tag</span>)
802
- 166:
803
- 167: <span class="ruby-comment cmt"># Now wait until the new ReportServer shows up in the list.</span>
804
- 168: <span class="ruby-identifier">reportServer</span> = <span class="ruby-keyword kw">nil</span>
805
- 169: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">nil?</span>
806
- 170: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
807
- 171: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rs</span><span class="ruby-operator">|</span>
808
- 172: <span class="ruby-identifier">reportServer</span> = <span class="ruby-identifier">rs</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">tag</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">tag</span>
809
- 173: <span class="ruby-keyword kw">end</span>
810
- 174: <span class="ruby-keyword kw">end</span>
811
- 175: <span class="ruby-comment cmt"># It should not take that long, so we use a short idle time here.</span>
812
- 176: <span class="ruby-identifier">sleep</span> <span class="ruby-value">0.1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">nil?</span>
813
- 177: <span class="ruby-keyword kw">end</span>
814
- 178:
815
- 179: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Got report server with URI #{reportServer.uri} for tag #{tag}&quot;</span>)
816
- 180: [ <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">uri</span>, <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">authKey</span> ]
817
- 181: <span class="ruby-keyword kw">end</span></pre>
856
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 177</span>
857
+ 177: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getReportServer</span>
858
+ 178: <span class="ruby-comment cmt"># ReportServer objects only make sense for successfully scheduled</span>
859
+ 179: <span class="ruby-comment cmt"># projects.</span>
860
+ 180: <span class="ruby-keyword kw">return</span> [ <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span> ] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:ready</span>
861
+ 181:
862
+ 182: <span class="ruby-comment cmt"># The ReportServer will be created asynchronously in another Thread. To</span>
863
+ 183: <span class="ruby-comment cmt"># find it in the @reportServers list, we create a unique tag to identify</span>
864
+ 184: <span class="ruby-comment cmt"># it.</span>
865
+ 185: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">rand</span>(<span class="ruby-value">99999999999999</span>)
866
+ 186: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Pushing #{tag} onto report server request queue&quot;</span>)
867
+ 187: <span class="ruby-ivar">@reportServerRequests</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">tag</span>)
868
+ 188:
869
+ 189: <span class="ruby-comment cmt"># Now wait until the new ReportServer shows up in the list.</span>
870
+ 190: <span class="ruby-identifier">reportServer</span> = <span class="ruby-keyword kw">nil</span>
871
+ 191: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">nil?</span>
872
+ 192: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
873
+ 193: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rs</span><span class="ruby-operator">|</span>
874
+ 194: <span class="ruby-identifier">reportServer</span> = <span class="ruby-identifier">rs</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">tag</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">tag</span>
875
+ 195: <span class="ruby-keyword kw">end</span>
876
+ 196: <span class="ruby-keyword kw">end</span>
877
+ 197: <span class="ruby-comment cmt"># It should not take that long, so we use a short idle time here.</span>
878
+ 198: <span class="ruby-identifier">sleep</span> <span class="ruby-value">0.1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">nil?</span>
879
+ 199: <span class="ruby-keyword kw">end</span>
880
+ 200:
881
+ 201: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Got report server with URI #{reportServer.uri} for tag #{tag}&quot;</span>)
882
+ 202: <span class="ruby-identifier">restartTimer</span>
883
+ 203: [ <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">uri</span>, <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">authKey</span> ]
884
+ 204: <span class="ruby-keyword kw">end</span></pre>
818
885
  </div>
819
886
 
820
887
  </div>
@@ -826,7 +893,7 @@ and the authentication key of this new server.
826
893
 
827
894
 
828
895
  <div id="load-roject-method" class="method-detail ">
829
- <a name="M001552"></a>
896
+ <a name="method-i-loadProject"></a>
830
897
 
831
898
  <div class="method-heading">
832
899
 
@@ -851,36 +918,37 @@ Additionally a list of optional .tji files can be provided.
851
918
  <div class="method-source-code"
852
919
  id="load-roject-source">
853
920
  <pre>
854
- <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 123</span>
855
- 123: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">loadProject</span>(<span class="ruby-identifier">args</span>)
856
- 124: <span class="ruby-comment cmt"># The first argument is the working directory</span>
857
- 125: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-identifier">args</span>.<span class="ruby-identifier">shift</span>.<span class="ruby-identifier">untaint</span>)
858
- 126:
859
- 127: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:loading</span>, <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]))
860
- 128: <span class="ruby-ivar">@tj</span> = <span class="ruby-constant">TaskJuggler</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">true</span>)
861
- 129:
862
- 130: <span class="ruby-comment cmt"># Parse all project files</span>
863
- 131: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">args</span>, <span class="ruby-keyword kw">true</span>)
864
- 132: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Parsing of #{args.join(' ')} failed&quot;</span>)
865
- 133: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:failed</span>, <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]))
866
- 134: <span class="ruby-ivar">@terminate</span> = <span class="ruby-keyword kw">true</span>
867
- 135: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
868
- 136: <span class="ruby-keyword kw">end</span>
869
- 137:
870
- 138: <span class="ruby-comment cmt"># Then schedule the project</span>
871
- 139: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">schedule</span>
872
- 140: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Scheduling of project #{@tj.projectId} failed&quot;</span>)
873
- 141: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:failed</span>, <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">projectId</span>)
874
- 142: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">exit</span>(<span class="ruby-value str">'scheduler'</span>)
875
- 143: <span class="ruby-ivar">@terminate</span> = <span class="ruby-keyword kw">true</span>
876
- 144: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
877
- 145: <span class="ruby-keyword kw">end</span>
878
- 146:
879
- 147: <span class="ruby-comment cmt"># Great, everything went fine. We've got a project to work with.</span>
880
- 148: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:ready</span>, <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">projectId</span>)
881
- 149: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Project #{@tj.projectId} loaded&quot;</span>)
882
- 150: <span class="ruby-keyword kw">true</span>
883
- 151: <span class="ruby-keyword kw">end</span></pre>
921
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 124</span>
922
+ 124: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">loadProject</span>(<span class="ruby-identifier">args</span>)
923
+ 125: <span class="ruby-comment cmt"># The first argument is the working directory</span>
924
+ 126: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-identifier">args</span>.<span class="ruby-identifier">shift</span>.<span class="ruby-identifier">untaint</span>)
925
+ 127:
926
+ 128: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:loading</span>, <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]))
927
+ 129: <span class="ruby-ivar">@tj</span> = <span class="ruby-constant">TaskJuggler</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">true</span>)
928
+ 130:
929
+ 131: <span class="ruby-comment cmt"># Parse all project files</span>
930
+ 132: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">args</span>, <span class="ruby-keyword kw">true</span>)
931
+ 133: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Parsing of #{args.join(' ')} failed&quot;</span>)
932
+ 134: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:failed</span>, <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]))
933
+ 135: <span class="ruby-ivar">@terminate</span> = <span class="ruby-keyword kw">true</span>
934
+ 136: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
935
+ 137: <span class="ruby-keyword kw">end</span>
936
+ 138:
937
+ 139: <span class="ruby-comment cmt"># Then schedule the project</span>
938
+ 140: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">schedule</span>
939
+ 141: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Scheduling of project #{@tj.projectId} failed&quot;</span>)
940
+ 142: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:failed</span>, <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">projectId</span>)
941
+ 143: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">exit</span>(<span class="ruby-value str">'scheduler'</span>)
942
+ 144: <span class="ruby-ivar">@terminate</span> = <span class="ruby-keyword kw">true</span>
943
+ 145: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
944
+ 146: <span class="ruby-keyword kw">end</span>
945
+ 147:
946
+ 148: <span class="ruby-comment cmt"># Great, everything went fine. We've got a project to work with.</span>
947
+ 149: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:ready</span>, <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">projectId</span>)
948
+ 150: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Project #{@tj.projectId} loaded&quot;</span>)
949
+ 151: <span class="ruby-identifier">restartTimer</span>
950
+ 152: <span class="ruby-keyword kw">true</span>
951
+ 153: <span class="ruby-keyword kw">end</span></pre>
884
952
  </div>
885
953
 
886
954
  </div>
@@ -892,7 +960,7 @@ Additionally a list of optional .tji files can be provided.
892
960
 
893
961
 
894
962
  <div id="ping-method" class="method-detail ">
895
- <a name="M001555"></a>
963
+ <a name="method-i-ping"></a>
896
964
 
897
965
  <div class="method-heading">
898
966
 
@@ -915,24 +983,24 @@ href="ProjectServer.html">ProjectServer</a> is still operating properly.
915
983
  <div class="method-source-code"
916
984
  id="ping-source">
917
985
  <pre>
918
- <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 193</span>
919
- 193: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ping</span>
920
- 194: <span class="ruby-comment cmt"># Store the time stamp. If we don't get the ping for some time, we</span>
921
- 195: <span class="ruby-comment cmt"># assume the ProjectServer has died.</span>
922
- 196: <span class="ruby-ivar">@lastPing</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
923
- 197:
924
- 198: <span class="ruby-comment cmt"># Now also check our ReportServers if they are still there. If not, we</span>
925
- 199: <span class="ruby-comment cmt"># can remove them from the @reportServers list.</span>
926
- 200: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
927
- 201: <span class="ruby-identifier">deadServers</span> = []
928
- 202: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rs</span><span class="ruby-operator">|</span>
929
- 203: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">ping</span>
930
- 204: <span class="ruby-identifier">deadServers</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">rs</span>
931
- 205: <span class="ruby-keyword kw">end</span>
932
- 206: <span class="ruby-keyword kw">end</span>
933
- 207: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">rs</span><span class="ruby-operator">|</span> <span class="ruby-identifier">deadServers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">rs</span>) }
934
- 208: <span class="ruby-keyword kw">end</span>
935
- 209: <span class="ruby-keyword kw">end</span></pre>
986
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 208</span>
987
+ 208: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ping</span>
988
+ 209: <span class="ruby-comment cmt"># Store the time stamp. If we don't get the ping for some time, we</span>
989
+ 210: <span class="ruby-comment cmt"># assume the ProjectBroker has died.</span>
990
+ 211: <span class="ruby-ivar">@lastPing</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
991
+ 212:
992
+ 213: <span class="ruby-comment cmt"># Now also check our ReportServers if they are still there. If not, we</span>
993
+ 214: <span class="ruby-comment cmt"># can remove them from the @reportServers list.</span>
994
+ 215: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
995
+ 216: <span class="ruby-identifier">deadServers</span> = []
996
+ 217: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rs</span><span class="ruby-operator">|</span>
997
+ 218: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">ping</span>
998
+ 219: <span class="ruby-identifier">deadServers</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">rs</span>
999
+ 220: <span class="ruby-keyword kw">end</span>
1000
+ 221: <span class="ruby-keyword kw">end</span>
1001
+ 222: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">rs</span><span class="ruby-operator">|</span> <span class="ruby-identifier">deadServers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">rs</span>) }
1002
+ 223: <span class="ruby-keyword kw">end</span>
1003
+ 224: <span class="ruby-keyword kw">end</span></pre>
936
1004
  </div>
937
1005
 
938
1006
  </div>
@@ -950,7 +1018,7 @@ href="ProjectServer.html">ProjectServer</a> is still operating properly.
950
1018
 
951
1019
 
952
1020
  <div id="start-ousekeeping-method" class="method-detail ">
953
- <a name="M001557"></a>
1021
+ <a name="method-i-startHousekeeping"></a>
954
1022
 
955
1023
  <div class="method-heading">
956
1024
 
@@ -969,50 +1037,57 @@ href="ProjectServer.html">ProjectServer</a> is still operating properly.
969
1037
  <div class="method-source-code"
970
1038
  id="start-ousekeeping-source">
971
1039
  <pre>
972
- <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 227</span>
973
- 227: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">startHousekeeping</span>
974
- 228: <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
975
- 229: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
976
- 230: <span class="ruby-comment cmt"># Check for pending requests for new ReportServers.</span>
977
- 231: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@reportServerRequests</span>.<span class="ruby-identifier">empty?</span>
978
- 232: <span class="ruby-identifier">tag</span> = <span class="ruby-ivar">@reportServerRequests</span>.<span class="ruby-identifier">pop</span>
979
- 233: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Popped #{tag}&quot;</span>)
980
- 234: <span class="ruby-comment cmt"># Create an new entry for the @reportServers list.</span>
981
- 235: <span class="ruby-identifier">rsr</span> = <span class="ruby-constant">ReportServerRecord</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">tag</span>)
982
- 236: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">&quot;RSR created&quot;</span>)
983
- 237: <span class="ruby-comment cmt"># Create a new ReportServer object that runs as a separate</span>
984
- 238: <span class="ruby-comment cmt"># process. The constructor will tell us the URI and authentication</span>
985
- 239: <span class="ruby-comment cmt"># key of the new ReportServer.</span>
986
- 240: <span class="ruby-identifier">rs</span> = <span class="ruby-constant">ReportServer</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tj</span>)
987
- 241: <span class="ruby-identifier">rsr</span>.<span class="ruby-identifier">uri</span> = <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">uri</span>
988
- 242: <span class="ruby-identifier">rsr</span>.<span class="ruby-identifier">authKey</span> = <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">authKey</span>
989
- 243: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Adding ReportServer with URI #{rsr.uri} to list&quot;</span>)
990
- 244: <span class="ruby-comment cmt"># Add the new ReportServer to our list.</span>
991
- 245: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
992
- 246: <span class="ruby-ivar">@reportServers</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">rsr</span>
993
- 247: <span class="ruby-keyword kw">end</span>
994
- 248: <span class="ruby-keyword kw">end</span>
995
- 249:
996
- 250: <span class="ruby-comment cmt"># Some state changing operations are not atomic. Since the client</span>
997
- 251: <span class="ruby-comment cmt"># can die during the transaction, the server might hang in some</span>
998
- 252: <span class="ruby-comment cmt"># states. Here we define timeout for each state. If the timeout is</span>
999
- 253: <span class="ruby-comment cmt"># not 0 and exceeded, we immediately terminate the process.</span>
1000
- 254: <span class="ruby-identifier">timeouts</span> = { <span class="ruby-value">:new</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">10</span>, <span class="ruby-value">:loading</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">15</span> * <span class="ruby-value">60</span>, <span class="ruby-value">:failed</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">60</span>,
1001
- 255: <span class="ruby-value">:ready</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> }
1002
- 256: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">timeouts</span>[<span class="ruby-ivar">@state</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span>
1003
- 257: <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@stateUpdated</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">timeouts</span>[<span class="ruby-ivar">@state</span>]
1004
- 258: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Reached timeout for state #{@state}. Terminating.&quot;</span>)
1005
- 259: <span class="ruby-keyword kw">end</span>
1006
- 260:
1007
- 261: <span class="ruby-comment cmt"># If we have not received a ping from the ProjectBroker for 2</span>
1008
- 262: <span class="ruby-comment cmt"># minutes, we assume it has died and terminate as well.</span>
1009
- 263: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@lastPing</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">180</span>
1010
- 264: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-value str">'Heartbeat from daemon lost. Terminating.'</span>)
1011
- 265: <span class="ruby-keyword kw">end</span>
1012
- 266: <span class="ruby-identifier">sleep</span> <span class="ruby-value">1</span>
1013
- 267: <span class="ruby-keyword kw">end</span>
1014
- 268: <span class="ruby-keyword kw">end</span>
1015
- 269: <span class="ruby-keyword kw">end</span></pre>
1040
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 242</span>
1041
+ 242: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">startHousekeeping</span>
1042
+ 243: <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
1043
+ 244: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1044
+ 245: <span class="ruby-comment cmt"># Was the project data provided during object creation?</span>
1045
+ 246: <span class="ruby-comment cmt"># Then we load the data here.</span>
1046
+ 247: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@projectData</span>
1047
+ 248: <span class="ruby-identifier">loadProject</span>(<span class="ruby-ivar">@projectData</span>)
1048
+ 249: <span class="ruby-ivar">@projectData</span> = <span class="ruby-keyword kw">nil</span>
1049
+ 250: <span class="ruby-keyword kw">end</span>
1050
+ 251:
1051
+ 252: <span class="ruby-comment cmt"># Check for pending requests for new ReportServers.</span>
1052
+ 253: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@reportServerRequests</span>.<span class="ruby-identifier">empty?</span>
1053
+ 254: <span class="ruby-identifier">tag</span> = <span class="ruby-ivar">@reportServerRequests</span>.<span class="ruby-identifier">pop</span>
1054
+ 255: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Popped #{tag}&quot;</span>)
1055
+ 256: <span class="ruby-comment cmt"># Create an new entry for the @reportServers list.</span>
1056
+ 257: <span class="ruby-identifier">rsr</span> = <span class="ruby-constant">ReportServerRecord</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">tag</span>)
1057
+ 258: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">&quot;RSR created&quot;</span>)
1058
+ 259: <span class="ruby-comment cmt"># Create a new ReportServer object that runs as a separate</span>
1059
+ 260: <span class="ruby-comment cmt"># process. The constructor will tell us the URI and authentication</span>
1060
+ 261: <span class="ruby-comment cmt"># key of the new ReportServer.</span>
1061
+ 262: <span class="ruby-identifier">rs</span> = <span class="ruby-constant">ReportServer</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tj</span>)
1062
+ 263: <span class="ruby-identifier">rsr</span>.<span class="ruby-identifier">uri</span> = <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">uri</span>
1063
+ 264: <span class="ruby-identifier">rsr</span>.<span class="ruby-identifier">authKey</span> = <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">authKey</span>
1064
+ 265: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Adding ReportServer with URI #{rsr.uri} to list&quot;</span>)
1065
+ 266: <span class="ruby-comment cmt"># Add the new ReportServer to our list.</span>
1066
+ 267: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1067
+ 268: <span class="ruby-ivar">@reportServers</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">rsr</span>
1068
+ 269: <span class="ruby-keyword kw">end</span>
1069
+ 270: <span class="ruby-keyword kw">end</span>
1070
+ 271:
1071
+ 272: <span class="ruby-comment cmt"># Some state changing operations are not atomic. Since the client</span>
1072
+ 273: <span class="ruby-comment cmt"># can die during the transaction, the server might hang in some</span>
1073
+ 274: <span class="ruby-comment cmt"># states. Here we define timeout for each state. If the timeout is</span>
1074
+ 275: <span class="ruby-comment cmt"># not 0 and exceeded, we immediately terminate the process.</span>
1075
+ 276: <span class="ruby-identifier">timeouts</span> = { <span class="ruby-value">:new</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">10</span>, <span class="ruby-value">:loading</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">15</span> * <span class="ruby-value">60</span>, <span class="ruby-value">:failed</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">60</span>,
1076
+ 277: <span class="ruby-value">:ready</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> }
1077
+ 278: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">timeouts</span>[<span class="ruby-ivar">@state</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span>
1078
+ 279: <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@stateUpdated</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">timeouts</span>[<span class="ruby-ivar">@state</span>]
1079
+ 280: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Reached timeout for state #{@state}. Terminating.&quot;</span>)
1080
+ 281: <span class="ruby-keyword kw">end</span>
1081
+ 282:
1082
+ 283: <span class="ruby-comment cmt"># If we have not received a ping from the ProjectBroker for 2</span>
1083
+ 284: <span class="ruby-comment cmt"># minutes, we assume it has died and terminate as well.</span>
1084
+ 285: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@lastPing</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">180</span>
1085
+ 286: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-value str">'Heartbeat from daemon lost. Terminating.'</span>)
1086
+ 287: <span class="ruby-keyword kw">end</span>
1087
+ 288: <span class="ruby-identifier">sleep</span> <span class="ruby-value">1</span>
1088
+ 289: <span class="ruby-keyword kw">end</span>
1089
+ 290: <span class="ruby-keyword kw">end</span>
1090
+ 291: <span class="ruby-keyword kw">end</span></pre>
1016
1091
  </div>
1017
1092
 
1018
1093
  </div>
@@ -1024,7 +1099,7 @@ href="ProjectServer.html">ProjectServer</a> is still operating properly.
1024
1099
 
1025
1100
 
1026
1101
  <div id="update-tate-method" class="method-detail ">
1027
- <a name="M001556"></a>
1102
+ <a name="method-i-updateState"></a>
1028
1103
 
1029
1104
  <div class="method-heading">
1030
1105
 
@@ -1046,19 +1121,19 @@ remotely.
1046
1121
  <div class="method-source-code"
1047
1122
  id="update-tate-source">
1048
1123
  <pre>
1049
- <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 214</span>
1050
- 214: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">updateState</span>(<span class="ruby-identifier">state</span>, <span class="ruby-identifier">id</span>)
1051
- 215: <span class="ruby-keyword kw">begin</span>
1052
- 216: <span class="ruby-ivar">@daemon</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@daemonURI</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@daemon</span>
1053
- 217: <span class="ruby-ivar">@daemon</span>.<span class="ruby-identifier">updateState</span>(<span class="ruby-ivar">@authKey</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">state</span>)
1054
- 218: <span class="ruby-keyword kw">rescue</span>
1055
- 219: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Can't update state with daemon: #{$!}&quot;</span>)
1056
- 220: <span class="ruby-keyword kw">end</span>
1057
- 221: <span class="ruby-ivar">@stateLock</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1058
- 222: <span class="ruby-ivar">@state</span> = <span class="ruby-identifier">state</span>
1059
- 223: <span class="ruby-ivar">@stateUpdated</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
1060
- 224: <span class="ruby-keyword kw">end</span>
1061
- 225: <span class="ruby-keyword kw">end</span></pre>
1124
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 229</span>
1125
+ 229: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">updateState</span>(<span class="ruby-identifier">state</span>, <span class="ruby-identifier">id</span>)
1126
+ 230: <span class="ruby-keyword kw">begin</span>
1127
+ 231: <span class="ruby-ivar">@daemon</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@daemonURI</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@daemon</span>
1128
+ 232: <span class="ruby-ivar">@daemon</span>.<span class="ruby-identifier">updateState</span>(<span class="ruby-ivar">@authKey</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">state</span>)
1129
+ 233: <span class="ruby-keyword kw">rescue</span>
1130
+ 234: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Can't update state with daemon: #{$!}&quot;</span>)
1131
+ 235: <span class="ruby-keyword kw">end</span>
1132
+ 236: <span class="ruby-ivar">@stateLock</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1133
+ 237: <span class="ruby-ivar">@state</span> = <span class="ruby-identifier">state</span>
1134
+ 238: <span class="ruby-ivar">@stateUpdated</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
1135
+ 239: <span class="ruby-keyword kw">end</span>
1136
+ 240: <span class="ruby-keyword kw">end</span></pre>
1062
1137
  </div>
1063
1138
 
1064
1139
  </div>