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.
- data/CHANGELOG +2086 -0
- data/benchmarks/666tasks.tjp +3183 -0
- data/benchmarks/booking.tjp +14 -10
- data/doc/AppConfig.html +95 -73
- data/doc/Arguments.html +22 -2
- data/doc/CHANGELOG.html +2587 -0
- data/doc/COPYING.html +21 -1
- data/doc/Object.html +161 -122
- data/doc/README.html +21 -1
- data/doc/RuntimeConfig.html +26 -6
- data/doc/String.html +38 -18
- data/doc/StringIO.html +579 -0
- data/doc/TaskJuggler.html +251 -143
- data/doc/TaskJuggler/Account.html +26 -6
- data/doc/TaskJuggler/AccountAttribute.html +28 -8
- data/doc/TaskJuggler/AccountScenario.html +24 -4
- data/doc/TaskJuggler/Allocation.html +30 -10
- data/doc/TaskJuggler/AllocationAttribute.html +28 -8
- data/doc/TaskJuggler/AttributeBase.html +46 -26
- data/doc/TaskJuggler/AttributeDefinition.html +22 -2
- data/doc/TaskJuggler/BatchProcessor.html +40 -20
- data/doc/TaskJuggler/Booking.html +26 -6
- data/doc/TaskJuggler/BookingListAttribute.html +28 -8
- data/doc/TaskJuggler/BooleanAttribute.html +28 -8
- data/doc/TaskJuggler/CSVFile.html +308 -146
- data/doc/TaskJuggler/CellSettingPattern.html +22 -2
- data/doc/TaskJuggler/CellSettingPatternList.html +26 -6
- data/doc/TaskJuggler/Charge.html +26 -6
- data/doc/TaskJuggler/ChargeListAttribute.html +26 -6
- data/doc/TaskJuggler/ChargeSet.html +33 -13
- data/doc/TaskJuggler/ChargeSetListAttribute.html +28 -8
- data/doc/TaskJuggler/ColumnListAttribute.html +26 -6
- data/doc/TaskJuggler/ColumnTable.html +24 -4
- data/doc/TaskJuggler/Daemon.html +26 -6
- data/doc/TaskJuggler/DateAttribute.html +26 -6
- data/doc/TaskJuggler/DefinitionListAttribute.html +22 -2
- data/doc/TaskJuggler/DependencyListAttribute.html +28 -8
- data/doc/TaskJuggler/DurationAttribute.html +28 -8
- data/doc/TaskJuggler/FixnumAttribute.html +24 -4
- data/doc/TaskJuggler/FlagListAttribute.html +28 -8
- data/doc/TaskJuggler/FloatAttribute.html +26 -6
- data/doc/TaskJuggler/FormatListAttribute.html +24 -4
- data/doc/TaskJuggler/GanttChart.html +147 -126
- data/doc/TaskJuggler/GanttContainer.html +34 -14
- data/doc/TaskJuggler/GanttHeader.html +28 -8
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +24 -4
- data/doc/TaskJuggler/GanttLine.html +38 -18
- data/doc/TaskJuggler/GanttLoadStack.html +26 -6
- data/doc/TaskJuggler/GanttMilestone.html +34 -14
- data/doc/TaskJuggler/GanttRouter.html +50 -30
- data/doc/TaskJuggler/GanttTaskBar.html +34 -14
- data/doc/TaskJuggler/HTMLDocument.html +26 -6
- data/doc/TaskJuggler/HTMLGraphics.html +30 -10
- data/doc/TaskJuggler/Interval.html +40 -22
- data/doc/TaskJuggler/IntervalListAttribute.html +28 -8
- data/doc/TaskJuggler/JobInfo.html +24 -4
- data/doc/TaskJuggler/Journal.html +226 -147
- data/doc/TaskJuggler/JournalEntry.html +22 -2
- data/doc/TaskJuggler/JournalEntryList.html +129 -112
- data/doc/TaskJuggler/KeywordArray.html +26 -6
- data/doc/TaskJuggler/KeywordDocumentation.html +46 -26
- data/doc/TaskJuggler/Limits.html +152 -123
- data/doc/TaskJuggler/Limits/Limit.html +149 -70
- data/doc/TaskJuggler/LimitsAttribute.html +36 -51
- data/doc/TaskJuggler/ListAttributeBase.html +24 -4
- data/doc/TaskJuggler/Log.html +50 -32
- data/doc/TaskJuggler/LogFile.html +37 -17
- data/doc/TaskJuggler/LogicalAttribute.html +53 -33
- data/doc/TaskJuggler/LogicalExpression.html +26 -6
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +32 -12
- data/doc/TaskJuggler/LogicalFlag.html +42 -22
- data/doc/TaskJuggler/LogicalFunction.html +204 -140
- data/doc/TaskJuggler/LogicalOperation.html +135 -111
- data/doc/TaskJuggler/Macro.html +22 -2
- data/doc/TaskJuggler/MacroParser.html +32 -12
- data/doc/TaskJuggler/MacroTable.html +32 -12
- data/doc/TaskJuggler/ManagerResponsibilities.html +24 -4
- data/doc/TaskJuggler/ManagerStatusRecord.html +24 -4
- data/doc/TaskJuggler/Message.html +24 -4
- data/doc/TaskJuggler/MessageHandler.html +24 -4
- data/doc/TaskJuggler/Navigator.html +104 -71
- data/doc/TaskJuggler/NavigatorElement.html +32 -12
- data/doc/TaskJuggler/NikuProject.html +22 -2
- data/doc/TaskJuggler/NikuReport.html +310 -228
- data/doc/TaskJuggler/NikuResource.html +22 -2
- data/doc/TaskJuggler/NodeListAttribute.html +615 -0
- data/doc/TaskJuggler/OnShiftCache.html +32 -12
- data/doc/TaskJuggler/ProcessIntercom.html +205 -78
- data/doc/TaskJuggler/ProcessIntercomIface.html +26 -6
- data/doc/TaskJuggler/Project.html +708 -660
- data/doc/TaskJuggler/ProjectBroker.html +506 -304
- data/doc/TaskJuggler/ProjectBrokerIface.html +61 -41
- data/doc/TaskJuggler/ProjectFileParser.html +429 -373
- data/doc/TaskJuggler/ProjectFileScanner.html +1790 -0
- data/doc/TaskJuggler/ProjectRecord.html +80 -60
- data/doc/TaskJuggler/ProjectServer.html +312 -237
- data/doc/TaskJuggler/ProjectServerIface.html +101 -43
- data/doc/TaskJuggler/PropertyAttribute.html +32 -12
- data/doc/TaskJuggler/PropertyList.html +166 -145
- data/doc/TaskJuggler/PropertySet.html +254 -224
- data/doc/TaskJuggler/PropertyTreeNode.html +670 -536
- data/doc/TaskJuggler/Query.html +169 -148
- data/doc/TaskJuggler/RTFHandlers.html +622 -0
- data/doc/TaskJuggler/RTFNavigator.html +28 -8
- data/doc/TaskJuggler/RTFQuery.html +40 -20
- data/doc/TaskJuggler/RTFReport.html +62 -25
- data/doc/TaskJuggler/RTFReportLink.html +765 -0
- data/doc/TaskJuggler/RealFormat.html +26 -6
- data/doc/TaskJuggler/RealFormatAttribute.html +26 -6
- data/doc/TaskJuggler/ReferenceAttribute.html +59 -39
- data/doc/TaskJuggler/Report.html +402 -251
- data/doc/TaskJuggler/ReportBase.html +162 -137
- data/doc/TaskJuggler/ReportContext.html +112 -29
- data/doc/TaskJuggler/ReportServer.html +89 -64
- data/doc/TaskJuggler/ReportServerIface.html +75 -55
- data/doc/TaskJuggler/ReportServerRecord.html +54 -31
- data/doc/TaskJuggler/ReportServlet.html +980 -0
- data/doc/TaskJuggler/ReportTable.html +41 -21
- data/doc/TaskJuggler/ReportTableCell.html +214 -170
- data/doc/TaskJuggler/ReportTableColumn.html +30 -10
- data/doc/TaskJuggler/ReportTableLegend.html +36 -16
- data/doc/TaskJuggler/ReportTableLine.html +32 -12
- data/doc/TaskJuggler/Resource.html +99 -87
- data/doc/TaskJuggler/ResourceListAttribute.html +59 -39
- data/doc/TaskJuggler/ResourceListRE.html +47 -26
- data/doc/TaskJuggler/ResourceScenario.html +403 -437
- data/doc/TaskJuggler/RichText.html +26 -6
- data/doc/TaskJuggler/RichTextAttribute.html +50 -30
- data/doc/TaskJuggler/RichTextDocument.html +37 -17
- data/doc/TaskJuggler/RichTextElement.html +475 -413
- data/doc/TaskJuggler/RichTextException.html +22 -2
- data/doc/TaskJuggler/RichTextFunctionExample.html +28 -8
- data/doc/TaskJuggler/RichTextFunctionHandler.html +24 -4
- data/doc/TaskJuggler/RichTextImage.html +22 -2
- data/doc/TaskJuggler/RichTextIntermediate.html +38 -18
- data/doc/TaskJuggler/RichTextParser.html +56 -34
- data/doc/TaskJuggler/RichTextScanner.html +82 -61
- data/doc/TaskJuggler/RichTextSnip.html +34 -14
- data/doc/TaskJuggler/RichTextSyntaxRules.html +507 -353
- data/doc/TaskJuggler/Scenario.html +22 -2
- data/doc/TaskJuggler/ScenarioData.html +30 -46
- data/doc/TaskJuggler/ScenarioListAttribute.html +38 -18
- data/doc/TaskJuggler/Scoreboard.html +42 -22
- data/doc/TaskJuggler/SheetHandlerBase.html +40 -20
- data/doc/TaskJuggler/SheetReceiver.html +333 -295
- data/doc/TaskJuggler/SheetSender.html +253 -230
- data/doc/TaskJuggler/Shift.html +26 -6
- data/doc/TaskJuggler/ShiftAssignment.html +89 -73
- data/doc/TaskJuggler/ShiftAssignments.html +226 -234
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +39 -54
- data/doc/TaskJuggler/ShiftScenario.html +28 -8
- data/doc/TaskJuggler/SortListAttribute.html +34 -14
- data/doc/TaskJuggler/SourceFileInfo.html +24 -4
- data/doc/TaskJuggler/StatusSheetReceiver.html +24 -3
- data/doc/TaskJuggler/StatusSheetReport.html +168 -153
- data/doc/TaskJuggler/StatusSheetSender.html +24 -3
- data/doc/TaskJuggler/StringAttribute.html +38 -18
- data/doc/TaskJuggler/SymbolAttribute.html +32 -12
- data/doc/TaskJuggler/SyntaxReference.html +40 -20
- data/doc/TaskJuggler/TOCEntry.html +26 -6
- data/doc/TaskJuggler/TSResourceRecord.html +22 -2
- data/doc/TaskJuggler/TSTaskRecord.html +22 -2
- data/doc/TaskJuggler/TableColumnDefinition.html +59 -22
- data/doc/TaskJuggler/TableOfContents.html +26 -6
- data/doc/TaskJuggler/TableReport.html +937 -904
- data/doc/TaskJuggler/Task.html +55 -36
- data/doc/TaskJuggler/TaskDependency.html +24 -4
- data/doc/TaskJuggler/TaskListAttribute.html +50 -30
- data/doc/TaskJuggler/TaskListRE.html +27 -7
- data/doc/TaskJuggler/TaskScenario.html +1273 -1153
- data/doc/TaskJuggler/TextFormatter.html +28 -8
- data/doc/TaskJuggler/TextParser.html +585 -338
- data/doc/TaskJuggler/TextParser/Pattern.html +54 -34
- data/doc/TaskJuggler/TextParser/Rule.html +95 -73
- data/doc/TaskJuggler/TextParser/StackElement.html +39 -17
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +24 -4
- data/doc/TaskJuggler/TextParser/TokenDoc.html +22 -2
- data/doc/TaskJuggler/TextReport.html +28 -8
- data/doc/TaskJuggler/TextScanner.html +400 -1404
- data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +28 -240
- data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +37 -184
- data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +682 -0
- data/doc/TaskJuggler/TextScanner/StreamHandle.html +342 -67
- data/doc/TaskJuggler/TimeSheet.html +48 -28
- data/doc/TaskJuggler/TimeSheetReceiver.html +24 -3
- data/doc/TaskJuggler/TimeSheetRecord.html +47 -27
- data/doc/TaskJuggler/TimeSheetReport.html +154 -133
- data/doc/TaskJuggler/TimeSheetSender.html +24 -3
- data/doc/TaskJuggler/TimeSheetSummary.html +137 -91
- data/doc/TaskJuggler/TimeSheets.html +26 -6
- data/doc/TaskJuggler/Tj3AppBase.html +85 -58
- data/doc/TaskJuggler/Tj3Client.html +292 -238
- data/doc/TaskJuggler/Tj3Daemon.html +159 -74
- data/doc/TaskJuggler/Tj3SheetAppBase.html +26 -6
- data/doc/TaskJuggler/Tj3SsReceiver.html +26 -6
- data/doc/TaskJuggler/Tj3SsSender.html +53 -26
- data/doc/TaskJuggler/Tj3TsReceiver.html +28 -7
- data/doc/TaskJuggler/Tj3TsSender.html +26 -6
- data/doc/TaskJuggler/Tj3TsSummary.html +26 -6
- data/doc/TaskJuggler/TjException.html +22 -2
- data/doc/TaskJuggler/TjTime.html +216 -160
- data/doc/TaskJuggler/TjpExample.html +34 -14
- data/doc/TaskJuggler/TjpExportRE.html +403 -407
- data/doc/TaskJuggler/TjpSyntaxRules.html +4805 -4408
- data/doc/TaskJuggler/URLParameter.html +649 -0
- data/doc/TaskJuggler/UserManual.html +42 -22
- data/doc/TaskJuggler/WebServer.html +702 -0
- data/doc/TaskJuggler/WorkingHours.html +38 -18
- data/doc/TaskJuggler/WorkingHoursAttribute.html +61 -41
- data/doc/TaskJuggler/XMLBlob.html +24 -4
- data/doc/TaskJuggler/XMLComment.html +24 -4
- data/doc/TaskJuggler/XMLDocument.html +30 -10
- data/doc/TaskJuggler/XMLElement.html +34 -14
- data/doc/TaskJuggler/XMLNamedText.html +22 -2
- data/doc/TaskJuggler/XMLText.html +24 -4
- data/doc/index.html +1841 -1666
- data/doc/lib/AccountScenario_rb.html +1 -1
- data/doc/lib/Account_rb.html +1 -1
- data/doc/lib/Allocation_rb.html +1 -1
- data/doc/lib/AppConfig_rb.html +2 -2
- data/doc/lib/AttributeBase_rb.html +1 -1
- data/doc/lib/AttributeDefinition_rb.html +1 -1
- data/doc/lib/Attributes_rb.html +2 -2
- data/doc/lib/BatchProcessor_rb.html +1 -1
- data/doc/lib/Booking_rb.html +1 -1
- data/doc/lib/ChargeSet_rb.html +1 -1
- data/doc/lib/Charge_rb.html +1 -1
- data/doc/lib/HTMLDocument_rb.html +1 -1
- data/doc/lib/Interval_rb.html +1 -1
- data/doc/lib/Journal_rb.html +2 -2
- data/doc/lib/KeywordArray_rb.html +1 -1
- data/doc/lib/KeywordDocumentation_rb.html +1 -1
- data/doc/lib/Limits_rb.html +2 -2
- data/doc/lib/LogFile_rb.html +2 -2
- data/doc/lib/Log_rb.html +1 -1
- data/doc/lib/LogicalExpression_rb.html +1 -1
- data/doc/lib/LogicalFunction_rb.html +2 -2
- data/doc/lib/LogicalOperation_rb.html +2 -2
- data/doc/lib/MacroParser_rb.html +1 -1
- data/doc/lib/MacroTable_rb.html +1 -1
- data/doc/lib/MessageHandler_rb.html +1 -1
- data/doc/lib/Message_rb.html +1 -1
- data/doc/lib/ProjectFileParser_rb.html +4 -8
- data/doc/lib/ProjectFileScanner_rb.html +67 -0
- data/doc/lib/Project_rb.html +2 -2
- data/doc/lib/PropertyList_rb.html +2 -2
- data/doc/lib/PropertySet_rb.html +2 -2
- data/doc/lib/PropertyTreeNode_rb.html +2 -2
- data/doc/lib/Query_rb.html +2 -2
- data/doc/lib/RTFHandlers_rb.html +73 -0
- data/doc/lib/RTFNavigator_rb.html +1 -1
- data/doc/lib/RTFQuery_rb.html +1 -1
- data/doc/lib/RTFReportLink_rb.html +71 -0
- data/doc/lib/RTFReport_rb.html +2 -2
- data/doc/lib/RealFormat_rb.html +1 -1
- data/doc/lib/ResourceScenario_rb.html +2 -2
- data/doc/lib/Resource_rb.html +2 -2
- data/doc/lib/RichTextDocument_rb.html +1 -1
- data/doc/lib/RichTextElement_rb.html +2 -2
- data/doc/lib/RichTextFunctionExample_rb.html +1 -1
- data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
- data/doc/lib/RichTextParser_rb.html +2 -2
- data/doc/lib/RichTextScanner_rb.html +2 -2
- data/doc/lib/RichTextSnip_rb.html +1 -1
- data/doc/lib/RichTextSyntaxRules_rb.html +2 -2
- data/doc/lib/RichText_rb.html +1 -1
- data/doc/lib/RuntimeConfig_rb.html +1 -1
- data/doc/lib/ScenarioData_rb.html +2 -2
- data/doc/lib/Scenario_rb.html +1 -1
- data/doc/lib/Scoreboard_rb.html +1 -1
- data/doc/lib/SheetHandlerBase_rb.html +1 -1
- data/doc/lib/SheetReceiver_rb.html +2 -2
- data/doc/lib/SheetSender_rb.html +4 -2
- data/doc/lib/ShiftAssignments_rb.html +4 -2
- data/doc/lib/ShiftScenario_rb.html +1 -1
- data/doc/lib/Shift_rb.html +1 -1
- data/doc/lib/SourceFileInfo_rb.html +1 -1
- data/doc/lib/StatusSheetReceiver_rb.html +2 -2
- data/doc/lib/StatusSheetSender_rb.html +2 -2
- data/doc/lib/SyntaxReference_rb.html +1 -1
- data/doc/lib/TOCEntry_rb.html +1 -1
- data/doc/lib/TableColumnDefinition_rb.html +2 -2
- data/doc/lib/TableOfContents_rb.html +1 -1
- data/doc/lib/TaskDependency_rb.html +1 -1
- data/doc/lib/TaskJuggler_rb.html +2 -2
- data/doc/lib/TaskScenario_rb.html +2 -2
- data/doc/lib/Task_rb.html +2 -2
- data/doc/lib/TextFormatter_rb.html +1 -1
- data/doc/lib/TextParser/Pattern_rb.html +1 -1
- data/doc/lib/TextParser/Rule_rb.html +2 -2
- data/doc/lib/TextParser/StackElement_rb.html +2 -2
- data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
- data/doc/lib/TextParser_rb.html +2 -2
- data/doc/lib/TextScanner_rb.html +6 -2
- data/doc/lib/TimeSheetReceiver_rb.html +2 -2
- data/doc/lib/TimeSheetSender_rb.html +2 -2
- data/doc/lib/TimeSheetSummary_rb.html +2 -2
- data/doc/lib/TimeSheets_rb.html +2 -2
- data/doc/lib/Tj3AppBase_rb.html +2 -2
- data/doc/lib/Tj3Config_rb.html +2 -2
- data/doc/lib/Tj3SheetAppBase_rb.html +2 -2
- data/doc/lib/TjException_rb.html +1 -1
- data/doc/lib/TjTime_rb.html +2 -2
- data/doc/lib/TjpExample_rb.html +1 -1
- data/doc/lib/TjpSyntaxRules_rb.html +2 -2
- data/doc/lib/URLParameter_rb.html +67 -0
- data/doc/lib/UTF8String_rb.html +1 -1
- data/doc/lib/UserManual_rb.html +1 -1
- data/doc/lib/WorkingHours_rb.html +1 -1
- data/doc/lib/XMLDocument_rb.html +2 -2
- data/doc/lib/XMLElement_rb.html +1 -1
- data/doc/lib/daemon/Daemon_rb.html +1 -1
- data/doc/lib/daemon/ProcessIntercom_rb.html +2 -2
- data/doc/lib/daemon/ProjectBroker_rb.html +4 -2
- data/doc/lib/daemon/ProjectServer_rb.html +2 -2
- data/doc/lib/daemon/ReportServer_rb.html +2 -2
- data/doc/lib/daemon/WebServer_rb.html +75 -0
- data/doc/lib/deep_copy_rb.html +2 -2
- data/doc/lib/reports/CSVFile_rb.html +2 -2
- data/doc/lib/reports/ColumnTable_rb.html +1 -1
- data/doc/lib/reports/GanttChart_rb.html +2 -2
- data/doc/lib/reports/GanttContainer_rb.html +1 -1
- data/doc/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
- data/doc/lib/reports/GanttHeader_rb.html +1 -1
- data/doc/lib/reports/GanttLine_rb.html +1 -1
- data/doc/lib/reports/GanttLoadStack_rb.html +1 -1
- data/doc/lib/reports/GanttMilestone_rb.html +1 -1
- data/doc/lib/reports/GanttRouter_rb.html +1 -1
- data/doc/lib/reports/GanttTaskBar_rb.html +1 -1
- data/doc/lib/reports/HTMLGraphics_rb.html +1 -1
- data/doc/lib/reports/Navigator_rb.html +2 -2
- data/doc/lib/reports/NikuReport_rb.html +2 -2
- data/doc/lib/reports/ReportBase_rb.html +2 -2
- data/doc/lib/reports/ReportContext_rb.html +2 -2
- data/doc/lib/reports/ReportTableCell_rb.html +2 -2
- data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
- data/doc/lib/reports/ReportTableLegend_rb.html +1 -1
- data/doc/lib/reports/ReportTableLine_rb.html +1 -1
- data/doc/lib/reports/ReportTable_rb.html +2 -2
- data/doc/lib/reports/Report_rb.html +2 -2
- data/doc/lib/reports/ResourceListRE_rb.html +2 -2
- data/doc/lib/reports/StatusSheetReport_rb.html +2 -2
- data/doc/lib/reports/TableReport_rb.html +2 -2
- data/doc/lib/reports/TaskListRE_rb.html +2 -2
- data/doc/lib/reports/TextReport_rb.html +1 -1
- data/doc/lib/reports/TimeSheetReport_rb.html +2 -2
- data/doc/lib/reports/TjpExportRE_rb.html +2 -2
- data/doc/lib/ruby-signal-bug_rb.html +1 -1
- data/doc/lib/taskjuggler3_rb.html +2 -2
- data/doc/lib/tj3client_rb.html +2 -2
- data/doc/lib/tj3d_rb.html +2 -2
- data/doc/lib/tj3man_rb.html +1 -1
- data/doc/lib/tj3ss_receiver_rb.html +1 -1
- data/doc/lib/tj3ss_sender_rb.html +2 -2
- data/doc/lib/tj3ts_receiver_rb.html +2 -2
- data/doc/lib/tj3ts_sender_rb.html +1 -1
- data/doc/lib/tj3ts_summary_rb.html +1 -1
- data/doc/rdoc.css +9 -4
- data/examples/tutorial.tjp +17 -15
- data/gem_spec.rb +3 -0
- data/lib/AppConfig.rb +3 -1
- data/lib/Attributes.rb +10 -8
- data/lib/Journal.rb +55 -20
- data/lib/Limits.rb +72 -46
- data/lib/LogFile.rb +3 -3
- data/lib/LogicalFunction.rb +19 -6
- data/lib/LogicalOperation.rb +5 -1
- data/lib/Project.rb +37 -9
- data/lib/ProjectFileParser.rb +25 -22
- data/lib/ProjectFileScanner.rb +365 -0
- data/lib/PropertyList.rb +2 -1
- data/lib/PropertySet.rb +14 -4
- data/lib/PropertyTreeNode.rb +42 -29
- data/lib/Query.rb +3 -1
- data/lib/RTFHandlers.rb +35 -0
- data/lib/RTFReport.rb +23 -6
- data/lib/RTFReportLink.rb +72 -0
- data/lib/Resource.rb +8 -16
- data/lib/ResourceScenario.rb +1 -22
- data/lib/RichTextElement.rb +42 -0
- data/lib/RichTextParser.rb +6 -4
- data/lib/RichTextScanner.rb +5 -5
- data/lib/RichTextSyntaxRules.rb +48 -10
- data/lib/ScenarioData.rb +5 -3
- data/lib/SheetReceiver.rb +24 -6
- data/lib/SheetSender.rb +17 -13
- data/lib/ShiftAssignments.rb +56 -52
- data/lib/StatusSheetReceiver.rb +1 -0
- data/lib/StatusSheetSender.rb +1 -0
- data/lib/TableColumnDefinition.rb +4 -2
- data/lib/Task.rb +8 -9
- data/lib/TaskJuggler.rb +21 -11
- data/lib/TaskScenario.rb +61 -26
- data/lib/TextParser.rb +268 -106
- data/lib/TextParser/Rule.rb +4 -2
- data/lib/TextParser/StackElement.rb +6 -4
- data/lib/TextScanner.rb +283 -700
- data/lib/TimeSheetReceiver.rb +1 -0
- data/lib/TimeSheetSender.rb +1 -0
- data/lib/TimeSheetSummary.rb +51 -26
- data/lib/TimeSheets.rb +1 -1
- data/lib/Tj3AppBase.rb +8 -1
- data/lib/Tj3Config.rb +1 -1
- data/lib/TjTime.rb +5 -0
- data/lib/TjpSyntaxRules.rb +360 -144
- data/lib/URLParameter.rb +30 -0
- data/lib/XMLDocument.rb +2 -2
- data/lib/daemon/ProcessIntercom.rb +50 -9
- data/lib/daemon/ProjectBroker.rb +63 -10
- data/lib/daemon/ProjectServer.rb +47 -16
- data/lib/daemon/ReportServer.rb +9 -4
- data/lib/daemon/WebServer.rb +204 -0
- data/lib/deep_copy.rb +4 -1
- data/lib/reports/CSVFile.rb +150 -66
- data/lib/reports/GanttChart.rb +2 -1
- data/lib/reports/Navigator.rb +18 -5
- data/lib/reports/NikuReport.rb +32 -2
- data/lib/reports/Report.rb +65 -37
- data/lib/reports/ReportBase.rb +14 -9
- data/lib/reports/ReportContext.rb +19 -4
- data/lib/reports/ReportTable.rb +2 -2
- data/lib/reports/ReportTableCell.rb +54 -30
- data/lib/reports/ResourceListRE.rb +4 -3
- data/lib/reports/StatusSheetReport.rb +8 -13
- data/lib/reports/TableReport.rb +47 -32
- data/lib/reports/TaskListRE.rb +3 -3
- data/lib/reports/TimeSheetReport.rb +14 -5
- data/lib/reports/TjpExportRE.rb +14 -19
- data/lib/taskjuggler3.rb +15 -0
- data/lib/tj3client.rb +9 -7
- data/lib/tj3d.rb +38 -10
- data/lib/tj3ss_sender.rb +7 -0
- data/lib/tj3ts_receiver.rb +1 -0
- data/manual/Day_To_Day_Juggling +1 -1
- data/manual/Rich_Text_Attributes +8 -0
- data/manual/TaskJuggler_2x_Migration +7 -0
- data/manual/The_TaskJuggler_Syntax +20 -6
- data/prj_cfg.rb +3 -2
- data/tasks/changelog.rake +36 -0
- data/tasks/csts.rake +2 -3
- data/tasks/gem.rake +10 -0
- data/tasks/missing.rake +0 -17
- data/test/TestSuite/ReportGenerator/Correct/Journal.html +63 -0
- data/test/TestSuite/ReportGenerator/Correct/Journal.tjp +14 -0
- data/test/TestSuite/{HTML-Reports/LogicalFunctions.tjp → ReportGenerator/Correct/LogicalFunctions1.tjp} +2 -2
- data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +3 -0
- data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.tjp +19 -0
- data/test/TestSuite/ReportGenerator/Correct/css/tjmanual.css +66 -0
- data/test/TestSuite/ReportGenerator/Correct/css/tjreport.css +407 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/details.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/flag-green.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/flag-red.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/flag-yellow.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/resource.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/resourcegroup.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/task.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/taskgroup.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/trend-down.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/trend-flat.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/trend-up.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +2 -0
- data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +26 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/Journal-1.csv +6 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions1-1.csv +7 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions2-1.csv +2 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +2 -0
- data/test/TestSuite/ReportGenerator/Correct/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.tjp +20 -0
- data/test/TestSuite/Scheduler/Correct/Container.html +349 -0
- data/test/TestSuite/Scheduler/Correct/Limits.tjp +11 -4
- data/test/TestSuite/Scheduler/Correct/Shift2.html +464 -150
- data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +108 -0
- data/test/TestSuite/Scheduler/Correct/TimeSheet2.tjp +7 -0
- data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +14 -0
- data/test/TestSuite/Scheduler/Correct/css/tjreport.css +233 -21
- data/test/TestSuite/Scheduler/Correct/scripts/wz_tooltip.js +20 -20
- data/test/TestSuite/StatusSheetTemplates/project.tji +35 -0
- data/test/TestSuite/StatusSheetTemplates/project.tjp +56 -0
- data/test/TestSuite/StatusSheets/run +3 -2
- data/test/TestSuite/Syntax/Correct/Include.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/Macro-1.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/Macro-2.tjp +6 -0
- data/test/TestSuite/Syntax/Correct/Macro-3.tjp +14 -0
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +32 -0
- data/test/TestSuite/Syntax/Correct/css/tjmanual.css +66 -0
- data/test/TestSuite/Syntax/Correct/css/tjreport.css +407 -0
- data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/trend-down.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/trend-flat.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/trend-up.png +0 -0
- data/test/TestSuite/Syntax/Correct/include/dir1/file2.tji +3 -0
- data/test/TestSuite/Syntax/Correct/include/dir1/file5.tji +2 -0
- data/test/TestSuite/Syntax/Correct/include/dir3/all.tji +3 -0
- data/test/TestSuite/Syntax/Correct/include/dir3/file1.tji +2 -0
- data/test/TestSuite/Syntax/Correct/include/dir3/file2.tji +1 -0
- data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +13 -13
- data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/include_recursion.tjp +1 -0
- data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +2 -1
- data/test/TestSuite/Syntax/Errors/{eof_in_istring1.tjp → no_token_match1.tjp} +2 -2
- data/test/TestSuite/Syntax/Errors/{eof_in_istring2.tjp → no_token_match2.tjp} +2 -2
- data/test/TestSuite/Syntax/Errors/{eof_in_istring3.tjp → no_token_match3.tjp} +1 -1
- data/test/TestSuite/Syntax/Errors/{eof_in_istring4.tjp → no_token_match4.tjp} +1 -1
- data/test/TestSuite/Syntax/Errors/{eof_in_istring5.tjp → no_token_match5.tjp} +1 -1
- data/test/TestSuite/Syntax/Errors/not_scheduled.tjp +13 -0
- data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +1 -1
- data/test/TestSuite/TimeSheets/run +5 -5
- data/test/test_CSVFile.rb +75 -0
- data/test/test_Limits.rb +63 -5
- data/test/test_ProjectFileScanner.rb +163 -0
- data/test/test_ReportGenerator.rb +81 -0
- data/test/test_RichText.rb +21 -3
- data/test/test_Scheduler.rb +1 -1
- data/test/test_ShiftAssignments.rb +4 -4
- data/test/test_Syntax.rb +1 -1
- data/test/test_URLParameter.rb +30 -0
- metadata +126 -32
- data/test/TestSuite/Scheduler/Errors/not_scheduled.tjp +0 -8
- data/test/TestSuite/Syntax/Errors/bad_comment.tjp +0 -7
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/boss_2002-03-01.tji +0 -36
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev1_2002-03-01.tji +0 -48
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev2_2002-03-01.tji +0 -67
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev3_2002-03-01.tji +0 -67
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/doc_2002-03-01.tji +0 -48
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/resources.yml +0 -31
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/test_2002-03-01.tji +0 -36
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/acceptable_intervals +0 -1
- data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/all.tji +0 -1
- data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/dev2_2002-03-01.tji +0 -54
- data/test/TestSuite/TimeSheets/TimeSheets/all.tji +0 -2
- data/test/TestSuite/TimeSheets/receiver.log +0 -102
- data/test/TestSuite/TimeSheets/sender.log +0 -794
- data/test/TestSuite/TimeSheets/summary.log +0 -884
- data/test/TestSuite/TimeSheets/timesheets.log +0 -45
- data/test/TestSuite/TimeSheets/tj3d.log +0 -292
- 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="#
|
|
72
|
+
<li><a href="#method-c-new">::new</a></li>
|
|
73
73
|
|
|
74
|
-
<li><a href="#
|
|
74
|
+
<li><a href="#method-i-ping">#ping</a></li>
|
|
75
75
|
|
|
76
|
-
<li><a href="#
|
|
76
|
+
<li><a href="#method-i-terminateServer">#terminateServer</a></li>
|
|
77
77
|
|
|
78
|
-
<li><a href="#
|
|
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="
|
|
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
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
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="
|
|
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
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
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">"Sending ping to ProcessServer #{@uri}"</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">"Ping failed: #{$!}"</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="
|
|
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
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
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">"Sending termination request to ProcessServer #{@uri}"</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">"Termination of ProjectServer failed: #{$!}"</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="
|
|
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
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
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="#
|
|
72
|
+
<li><a href="#method-c-new">::new</a></li>
|
|
73
73
|
|
|
74
|
-
<li><a href="#
|
|
74
|
+
<li><a href="#method-i-getProjectName">#getProjectName</a></li>
|
|
75
75
|
|
|
76
|
-
<li><a href="#
|
|
76
|
+
<li><a href="#method-i-getReportList">#getReportList</a></li>
|
|
77
77
|
|
|
78
|
-
<li><a href="#
|
|
78
|
+
<li><a href="#method-i-getReportServer">#getReportServer</a></li>
|
|
79
79
|
|
|
80
|
-
<li><a href="#
|
|
80
|
+
<li><a href="#method-i-loadProject">#loadProject</a></li>
|
|
81
81
|
|
|
82
|
-
<li><a href="#
|
|
82
|
+
<li><a href="#method-i-ping">#ping</a></li>
|
|
83
83
|
|
|
84
|
-
<li><a href="#
|
|
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="
|
|
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-
|
|
636
|
-
42: <span class="ruby-comment cmt">#
|
|
637
|
-
43: <span class="ruby-
|
|
638
|
-
44: <span class="ruby-
|
|
639
|
-
45: <span class="ruby-
|
|
640
|
-
46: <span class="ruby-
|
|
641
|
-
47:
|
|
642
|
-
48:
|
|
643
|
-
49: <span class="ruby-ivar">@
|
|
644
|
-
50:
|
|
645
|
-
51:
|
|
646
|
-
52: <span class="ruby-
|
|
647
|
-
53: <span class="ruby-
|
|
648
|
-
54: <span class="ruby-
|
|
649
|
-
55: <span class="ruby-
|
|
650
|
-
56: <span class="ruby-
|
|
651
|
-
57: <span class="ruby-
|
|
652
|
-
58: <span class="ruby-
|
|
653
|
-
59:
|
|
654
|
-
60:
|
|
655
|
-
61: <span class="ruby-
|
|
656
|
-
62:
|
|
657
|
-
63:
|
|
658
|
-
64: <span class="ruby-
|
|
659
|
-
65: <span class="ruby-ivar">@reportServers</span
|
|
660
|
-
66:
|
|
661
|
-
67:
|
|
662
|
-
68:
|
|
663
|
-
69:
|
|
664
|
-
70: <span class="ruby-comment cmt">#
|
|
665
|
-
71: <span class="ruby-comment cmt">#
|
|
666
|
-
72: <span class="ruby-comment cmt">#
|
|
667
|
-
73: <span class="ruby-comment cmt">#
|
|
668
|
-
74: <span class="ruby-comment cmt">#
|
|
669
|
-
75: <span class="ruby-
|
|
670
|
-
76:
|
|
671
|
-
77:
|
|
672
|
-
78:
|
|
673
|
-
79:
|
|
674
|
-
80:
|
|
675
|
-
81: <span class="ruby-
|
|
676
|
-
82: <span class="ruby-
|
|
677
|
-
83:
|
|
678
|
-
84:
|
|
679
|
-
85: <span class="ruby-
|
|
680
|
-
86: <span class="ruby-keyword kw">
|
|
681
|
-
87:
|
|
682
|
-
88: <span class="ruby-ivar">@
|
|
683
|
-
89:
|
|
684
|
-
90:
|
|
685
|
-
91:
|
|
686
|
-
92:
|
|
687
|
-
93:
|
|
688
|
-
94: <span class="ruby-
|
|
689
|
-
95: <span class="ruby-identifier">
|
|
690
|
-
96: <span class="ruby-identifier">wr</span>.<span class="ruby-identifier">
|
|
691
|
-
97:
|
|
692
|
-
98:
|
|
693
|
-
99: <span class="ruby-comment cmt">#
|
|
694
|
-
100: <span class="ruby-
|
|
695
|
-
101: <span class="ruby-
|
|
696
|
-
102: <span class="ruby-comment cmt">#
|
|
697
|
-
103: <span class="ruby-
|
|
698
|
-
104:
|
|
699
|
-
105:
|
|
700
|
-
106: <span class="ruby-
|
|
701
|
-
107: <span class="ruby-
|
|
702
|
-
108: <span class="ruby-identifier">
|
|
703
|
-
109:
|
|
704
|
-
110:
|
|
705
|
-
111: <span class="ruby-
|
|
706
|
-
112: <span class="ruby-
|
|
707
|
-
113: <span class="ruby-
|
|
708
|
-
114: <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">
|
|
709
|
-
115:
|
|
710
|
-
116:
|
|
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">"Project server is listening on #{@uri}"</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">"ProjectServer can't start DRb: #{$!}"</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="
|
|
728
|
-
<a name="
|
|
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">
|
|
733
|
-
class="method-args">(
|
|
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
|
-
|
|
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="
|
|
808
|
+
id="get-eport-ist-source">
|
|
749
809
|
<pre>
|
|
750
|
-
<span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
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">&&</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"><<</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="
|
|
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
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
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">"Pushing #{tag} onto report server request queue"</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">"Got report server with URI #{reportServer.uri} for tag #{tag}"</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="
|
|
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
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
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">"Parsing of #{args.join(' ')} failed"</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">"Scheduling of project #{@tj.projectId} failed"</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">"Project #{@tj.projectId} loaded"</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="
|
|
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
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
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"><<</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="
|
|
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
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
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">"Popped #{tag}"</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">"RSR created"</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">"Adding ReportServer with URI #{rsr.uri} to list"</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"><<</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">></span> <span class="ruby-value">10</span>, <span class="ruby-value">:loading</span> =<span class="ruby-operator">></span> <span class="ruby-value">15</span> * <span class="ruby-value">60</span>, <span class="ruby-value">:failed</span> =<span class="ruby-operator">></span> <span class="ruby-value">60</span>,
|
|
1076
|
+
277: <span class="ruby-value">:ready</span> =<span class="ruby-operator">></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">></span> <span class="ruby-value">0</span> <span class="ruby-operator">&&</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">></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">"Reached timeout for state #{@state}. Terminating."</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">></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="
|
|
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
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
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">"Can't update state with daemon: #{$!}"</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>
|