Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
LOFAR
Manage
Activity
Members
Labels
Plan
Issues
Wiki
Jira issues
Open Jira
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Code review analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
RadioObservatory
LOFAR
Commits
10b31454
Commit
10b31454
authored
7 years ago
by
Auke Klazema
Browse files
Options
Downloads
Patches
Plain Diff
Task #9893: TriggerEmailService was not aware of the new dwelling time parameters
parent
0e6980a9
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
SAS/TriggerEmailService/Server/lib/TriggerEmailService.py
+19
-7
19 additions, 7 deletions
SAS/TriggerEmailService/Server/lib/TriggerEmailService.py
SAS/TriggerEmailService/Server/test/t_TriggerEmailService.py
+541
-3
541 additions, 3 deletions
SAS/TriggerEmailService/Server/test/t_TriggerEmailService.py
with
560 additions
and
10 deletions
SAS/TriggerEmailService/Server/lib/TriggerEmailService.py
+
19
−
7
View file @
10b31454
...
...
@@ -239,6 +239,7 @@ class TriggerNotificationListener(AbstractBusListener):
start_times
=
doc
.
getroot
().
findall
(
'
specification/activity/observation/timeWindowSpecification/startTime
'
)
if
start_times
:
# Not dwelling
start_time
=
datetime
.
strptime
(
start_times
[
0
].
text
,
'
%Y-%m-%dT%H:%M:%S
'
)
durations
=
doc
.
getroot
().
findall
(
...
...
@@ -251,6 +252,17 @@ class TriggerNotificationListener(AbstractBusListener):
stop_time
=
start_time
+
timedelta
(
seconds
=
duration_seconds
)
return
start_time
,
stop_time
else
:
# Dwelling
min_start_times
=
doc
.
getroot
().
findall
(
'
specification/activity/observation/timeWindowSpecification/minStartTime
'
)
min_start_time
=
datetime
.
strptime
(
min_start_times
[
0
].
text
,
'
%Y-%m-%dT%H:%M:%S
'
)
max_end_times
=
doc
.
getroot
().
findall
(
'
specification/activity/observation/timeWindowSpecification/maxEndTime
'
)
max_end_time
=
datetime
.
strptime
(
max_end_times
[
0
].
text
,
'
%Y-%m-%dT%H:%M:%S
'
)
return
min_start_time
,
max_end_time
def
start_listening
(
self
,
**
kwargs
):
self
.
mom_rpc_client
.
open
()
...
...
This diff is collapsed.
Click to expand it.
SAS/TriggerEmailService/Server/test/t_TriggerEmailService.py
+
541
−
3
View file @
10b31454
...
...
@@ -294,6 +294,9 @@ class TestTriggerNotificationListener(unittest.TestCase):
obs_mom_id
=
44
start_time
=
"
2016-11-23 15:21:44
"
stop_time
=
"
2016-11-23 16:21:44
"
min_start_time
=
"
2017-05-23 15:21:44
"
max_end_time
=
"
2017-05-23 17:21:44
"
xml
=
"""
<?xml version=
"
1.0
"
encoding=
"
UTF-8
"
?>
<trigger:trigger xsi:schemaLocation=
"
http://www.astron.nl/LofarTrigger LofarTrigger.xsd
"
xmlns:xsi=
"
http://www.w3.org/2001/XMLSchema-instance
"
xmlns:spec=
"
http://www.astron.nl/LofarSpecification
"
...
...
@@ -425,7 +428,522 @@ class TestTriggerNotificationListener(unittest.TestCase):
</stationSelectionSpecification>
<timeWindowSpecification>
<timeFrame>UT</timeFrame>
<startTime>2016-11-23T15:21:44</startTime>
<startTime>2016-11-23T15:21:44</startTime>
<duration>
<duration>PT3600S</duration>
</duration>
</timeWindowSpecification>
</observation>
<status>approved</status>
<qualityOfService>LATENCY</qualityOfService>
<priority>10</priority>
<triggerId>
<source>0</source>
<identifier>0</identifier>
</triggerId>
</activity>
<!-- SAP 0 -->
<activity>
<temporaryIdentifier>
<source>0</source>
<identifier>300</identifier>
<description>0</description>
</temporaryIdentifier>
<measurement xsi:type=
"
base:BeamMeasurement
"
>
<name>Target</name>
<description>Target</description>
<ra>204.648425</ra>
<dec>-0.172222222222</dec>
<equinox>J2000</equinox>
<subbandsSpecification>
<subbands>160..399</subbands>
</subbandsSpecification>
<measurementType>Target</measurementType>
</measurement>
<status>approved</status>
<qualityOfService>LATENCY</qualityOfService>
<priority>10</priority>
<triggerId>
<source>0</source>
<identifier>0</identifier>
</triggerId>
</activity>
<!-- SAP 1 -->
<activity>
<temporaryIdentifier>
<source>0</source>
<identifier>301</identifier>
<description>0</description>
</temporaryIdentifier>
<measurement xsi:type=
"
base:BeamMeasurement
"
>
<name>Calibrator</name>
<description>Calibrator</description>
<ra>123.400291667</ra>
<dec>48.2173833333</dec>
<equinox>J2000</equinox>
<subbandsSpecification>
<subbands>160..339</subbands>
</subbandsSpecification>
<measurementType>Calibration</measurementType>
</measurement>
<status>approved</status>
<qualityOfService>LATENCY</qualityOfService>
<priority>10</priority>
<triggerId>
<source>0</source>
<identifier>0</identifier>
</triggerId>
</activity>
<!-- Calibrator Averaging Pipeline -->
<activity>
<temporaryIdentifier>
<source>0</source>
<identifier>201</identifier>
<description>0</description>
</temporaryIdentifier>
<pipeline xsi:type=
"
base:AveragingPipeline
"
>
<name>Calibrator/1/CPT</name>
<description>Calibrator/1/CPT (Preprocessing)</description>
<processingCluster>
<name>CEP4</name>
<partition>cpu</partition>
<numberOfTasks>24</numberOfTasks>
<minRAMPerTask unit=
"
byte
"
>1000000000</minRAMPerTask>
<minScratchPerTask unit=
"
byte
"
>100000000</minScratchPerTask>
<maxDurationPerTask>PT600S</maxDurationPerTask>
<numberOfCoresPerTask>20</numberOfCoresPerTask>
<runSimultaneous>true</runSimultaneous>
</processingCluster>
<defaultTemplate>Preprocessing Pipeline</defaultTemplate>
<demixingParameters>
<averagingFreqStep>16</averagingFreqStep>
<averagingTimeStep>1</averagingTimeStep>
<demixFreqStep>16</demixFreqStep>
<demixTimeStep>5</demixTimeStep>
<demixAlways />
<demixIfNeeded />
<ignoreTarget>false</ignoreTarget>
</demixingParameters>
<flaggingStrategy>LBAdefault</flaggingStrategy>
</pipeline>
<status>approved</status>
<qualityOfService>LATENCY</qualityOfService>
<priority>10</priority>
<triggerId>
<source>0</source>
<identifier>0</identifier>
</triggerId>
</activity>
<!-- Target Averaging Pipeline -->
<activity>
<temporaryIdentifier>
<source>0</source>
<identifier>202</identifier>
<description>0</description>
</temporaryIdentifier>
<pipeline xsi:type=
"
base:AveragingPipeline
"
>
<name>Calibrator/1/CPT</name>
<description>Calibrator/1/CPT (Preprocessing)</description>
<processingCluster>
<name>CEP4</name>
<partition>cpu</partition>
<numberOfTasks>24</numberOfTasks>
<minRAMPerTask unit=
"
byte
"
>1000000000</minRAMPerTask>
<minScratchPerTask unit=
"
byte
"
>100000000</minScratchPerTask>
<maxDurationPerTask>PT600S</maxDurationPerTask>
<numberOfCoresPerTask>20</numberOfCoresPerTask>
<runSimultaneous>true</runSimultaneous>
</processingCluster>
<defaultTemplate>Preprocessing Pipeline</defaultTemplate>
<demixingParameters>
<averagingFreqStep>16</averagingFreqStep>
<averagingTimeStep>1</averagingTimeStep>
<demixFreqStep>16</demixFreqStep>
<demixTimeStep>5</demixTimeStep>
<demixAlways />
<demixIfNeeded />
<ignoreTarget>false</ignoreTarget>
</demixingParameters>
<flaggingStrategy>LBAdefault</flaggingStrategy>
</pipeline>
<status>approved</status>
<qualityOfService>LATENCY</qualityOfService>
<priority>10</priority>
<triggerId>
<source>0</source>
<identifier>0</identifier>
</triggerId>
</activity>
<!-- SAP 0 data products -->
<entity>
<temporaryIdentifier>
<source>0</source>
<identifier>400</identifier>
</temporaryIdentifier>
<dataproductType>UVDataProduct</dataproductType>
<storageCluster>
<name>CEP4</name>
<partition>/data/projects/</partition>
</storageCluster>
</entity>
<!-- SAP 1 data products -->
<entity>
<temporaryIdentifier>
<source>0</source>
<identifier>401</identifier>
</temporaryIdentifier>
<dataproductType>UVDataProduct</dataproductType>
<storageCluster>
<name>CEP4</name>
<partition>/data/projects/</partition>
</storageCluster>
</entity>
<!-- Calibrator Pipeline dataproducts -->
<entity>
<temporaryIdentifier>
<source>0</source>
<identifier>402</identifier>
</temporaryIdentifier>
<dataproductType>UVDataProduct</dataproductType>
<storageCluster>
<name>CEP4</name>
<partition>/data/projects/</partition>
</storageCluster>
</entity>
<!-- Target Pipeline dataproducts -->
<entity>
<temporaryIdentifier>
<source>0</source>
<identifier>403</identifier>
</temporaryIdentifier>
<dataproductType>UVDataProduct</dataproductType>
<storageCluster>
<name>CEP4</name>
<partition>/data/projects/</partition>
</storageCluster>
</entity>
<!-- folder 101 is child of folder 100 -->
<relation xsi:type=
"
spec:ChildRelation
"
>
<parent>
<source>0</source>
<identifier>100</identifier>
</parent>
<child>
<source>0</source>
<identifier>101</identifier>
</child>
<type>folder-folder</type>
</relation>
<!-- observation 200 is child of folder 101 -->
<relation xsi:type=
"
spec:ChildRelation
"
>
<parent>
<source>0</source>
<identifier>101</identifier>
</parent>
<child>
<source>0</source>
<identifier>200</identifier>
</child>
<type>folder-activity</type>
</relation>
<!-- measurements 300 is a child of observation 200 -->
<relation xsi:type=
"
spec:ChildRelation
"
>
<parent>
<source>0</source>
<identifier>200</identifier>
</parent>
<child>
<source>0</source>
<identifier>300</identifier>
</child>
<type>observation-measurement</type>
</relation>
<!-- measurement 301 is a child of observation 200 -->
<relation xsi:type=
"
spec:ChildRelation
"
>
<parent>
<source>0</source>
<identifier>200</identifier>
<description>0</description>
</parent>
<child>
<source>0</source>
<identifier>301</identifier>
<description>0</description>
</child>
<type>observation-measurement</type>
</relation>
<!-- dataproducts 400 are output of measurement 300 -->
<relation xsi:type=
"
spec:ActivityEntityRelation
"
>
<entity>
<source>0</source>
<identifier>400</identifier>
</entity>
<activity>
<source>0</source>
<identifier>300</identifier>
</activity>
<type>producer</type>
</relation>
<!-- dataproducts 401 are output of measurement 301 -->
<relation xsi:type=
"
spec:ActivityEntityRelation
"
>
<entity>
<source>0</source>
<identifier>401</identifier>
</entity>
<activity>
<source>0</source>
<identifier>301</identifier>
</activity>
<type>producer</type>
</relation>
<!-- SAP 1 is the calibrator for SAP 0 -->
<relation xsi:type=
"
spec:TwinRelation
"
>
<first>
<source>0</source>
<identifier>301</identifier>
</first>
<second>
<source>0</source>
<identifier>300</identifier>
</second>
<type>calibrator-target</type>
</relation>
<!-- dataproducts 401 are input for pipeline 201 -->
<relation xsi:type=
"
spec:ActivityEntityRelation
"
>
<entity>
<source>0</source>
<identifier>401</identifier>
</entity>
<activity>
<source>0</source>
<identifier>201</identifier>
</activity>
<type>user</type>
</relation>
<!-- dataproducts 402 are output of pipeline 201 -->
<relation xsi:type=
"
spec:ActivityEntityRelation
"
>
<entity>
<source>0</source>
<identifier>402</identifier>
</entity>
<activity>
<source>0</source>
<identifier>201</identifier>
</activity>
<type>producer</type>
</relation>
<!-- pipeline 201 is child of folder 101 -->
<relation xsi:type=
"
spec:ChildRelation
"
>
<parent>
<source>0</source>
<identifier>101</identifier>
</parent>
<child>
<source>0</source>
<identifier>201</identifier>
</child>
<type>folder-activity</type>
</relation>
<!-- dataproducts 400 are input for pipeline 202 -->
<relation xsi:type=
"
spec:ActivityEntityRelation
"
>
<entity>
<source>0</source>
<identifier>400</identifier>
</entity>
<activity>
<source>0</source>
<identifier>202</identifier>
</activity>
<type>user</type>
</relation>
<!-- pipeline 202 is child of folder 101 -->
<relation xsi:type=
"
spec:ChildRelation
"
>
<parent>
<source>0</source>
<identifier>101</identifier>
</parent>
<child>
<source>0</source>
<identifier>202</identifier>
</child>
<type>folder-activity</type>
</relation>
<!-- dataproducts 403 are output of pipeline 202 -->
<relation xsi:type=
"
spec:ActivityEntityRelation
"
>
<entity>
<source>0</source>
<identifier>403</identifier>
</entity>
<activity>
<source>0</source>
<identifier>202</identifier>
</activity>
<type>producer</type>
</relation>
</specification>
<generatorName>Jan David Mol</generatorName>
<generatorVersion>0.0</generatorVersion>
</trigger:trigger>
"""
xml_dwell
=
"""
<?xml version=
"
1.0
"
encoding=
"
UTF-8
"
?>
<trigger:trigger xsi:schemaLocation=
"
http://www.astron.nl/LofarTrigger LofarTrigger.xsd
"
xmlns:xsi=
"
http://www.w3.org/2001/XMLSchema-instance
"
xmlns:spec=
"
http://www.astron.nl/LofarSpecification
"
xmlns:trigger=
"
http://www.astron.nl/LofarTrigger
"
xmlns:base=
"
http://www.astron.nl/LofarBase
"
>
<version>version</version>
<name>name</name>
<description>description</description>
<projectReference>
<ProjectCode>test-lofar</ProjectCode>
</projectReference>
<contactInformation>
<name>Sander ter Veen</name>
<email>veen@astron.nl</email>
<phoneNumber>711</phoneNumber>
<affiliation>ASTRON</affiliation>
</contactInformation>
<userName>veen</userName>
<comment>comment</comment>
<event>
<identification>none</identification>
<description>none</description>
<type>VOEvent</type>
</event>
<specification>
<version>2.20</version>
<projectReference>
<ProjectCode>test-lofar</ProjectCode>
</projectReference>
<userName>veen</userName>
<comment>comment</comment>
<generatorName>Jan David Mol</generatorName>
<generatorVersion>0.0</generatorVersion>
<!-- folders -->
<container>
<temporaryIdentifier>
<source>0</source>
<identifier>100</identifier>
</temporaryIdentifier>
<addToExistingContainer>false</addToExistingContainer>
<folder>
<name>TARGET_A</name>
<description>First target</description>
<topology>0</topology>
</folder>
</container>
<container>
<temporaryIdentifier>
<source>0</source>
<identifier>101</identifier>
</temporaryIdentifier>
<addToExistingContainer>false</addToExistingContainer>
<folder>
<name>AARTFAAC-TRIGGERED</name>
<description>Triggered observation by AARTFAAC (Preprocessing)</description>
<topology>0</topology>
</folder>
</container>
<!-- observation -->
<activity>
<temporaryIdentifier>
<source>0</source>
<identifier>200</identifier>
<description>0</description>
</temporaryIdentifier>
<observation>
<name>Target/1/TO</name>
<description>Target/1/TO (Target Observation)</description>
<instrument>Beam Observation</instrument>
<defaultTemplate>BeamObservation</defaultTemplate>
<tbbPiggybackAllowed>true</tbbPiggybackAllowed>
<aartfaacPiggybackAllowed>true</aartfaacPiggybackAllowed>
<correlatedData>true</correlatedData>
<coherentStokesData>false</coherentStokesData>
<incoherentStokesData>false</incoherentStokesData>
<antenna>LBA Outer</antenna>
<clock units=
"
MHz
"
>200</clock>
<instrumentFilter>30-90 MHz</instrumentFilter>
<integrationInterval>2.0</integrationInterval>
<channelsPerSubband>64</channelsPerSubband>
<bypassPff>false</bypassPff>
<enableSuperterp>false</enableSuperterp>
<numberOfBitsPerSample>8</numberOfBitsPerSample>
<stationSelectionSpecification>
<stationSelection>
<stationSet>Custom</stationSet>
<stations>
<station><name>CS001</name></station>
<station><name>CS002</name></station>
<station><name>CS003</name></station>
<station><name>CS004</name></station>
<station><name>CS005</name></station>
<station><name>CS006</name></station>
<station><name>CS007</name></station>
<station><name>CS011</name></station>
<station><name>CS013</name></station>
<station><name>CS017</name></station>
<station><name>CS021</name></station>
<station><name>CS024</name></station>
<station><name>CS026</name></station>
<station><name>CS028</name></station>
<station><name>CS030</name></station>
<station><name>CS031</name></station>
<station><name>CS032</name></station>
<station><name>CS101</name></station>
<station><name>CS103</name></station>
<station><name>CS201</name></station>
<station><name>CS301</name></station>
<station><name>CS302</name></station>
<station><name>CS401</name></station>
<station><name>CS501</name></station>
<station><name>RS106</name></station>
<station><name>RS205</name></station>
<station><name>RS208</name></station>
<station><name>RS210</name></station>
<station><name>RS305</name></station>
<station><name>RS306</name></station>
<station><name>RS307</name></station>
<station><name>RS310</name></station>
<station><name>RS406</name></station>
<station><name>RS407</name></station>
<station><name>RS409</name></station>
<station><name>RS503</name></station>
<station><name>RS508</name></station>
<station><name>RS509</name></station>
</stations>
</stationSelection>
</stationSelectionSpecification>
<timeWindowSpecification>
<timeFrame>UT</timeFrame>
<minStartTime>2017-05-23T15:21:44</minStartTime>
<maxEndTime>2017-05-23T17:21:44</maxEndTime>
<duration>
<duration>PT3600S</duration>
</duration>
...
...
@@ -815,6 +1333,13 @@ class TestTriggerNotificationListener(unittest.TestCase):
"
metadata
"
:
xml
}
dwell_message_content
=
{
"
trigger_id
"
:
trigger_id
,
"
project
"
:
project_name
,
"
metadata
"
:
xml_dwell
}
def
setUp
(
self
):
self
.
momqueryrpc_mock
=
mock
.
MagicMock
()
self
.
momqueryrpc_mock
.
getProjects
.
return_value
=
[{
"
name
"
:
self
.
project_name
,
"
mom2id
"
:
self
.
project_mom_id
}]
...
...
@@ -829,6 +1354,9 @@ class TestTriggerNotificationListener(unittest.TestCase):
self
.
message
=
mock
.
MagicMock
()
self
.
message
.
content
=
self
.
message_content
self
.
dwell_message
=
mock
.
MagicMock
()
self
.
dwell_message
.
content
=
self
.
dwell_message_content
@mock.patch
(
'
lofar.messaging.messagebus.AbstractBusListener.start_listening
'
)
def
test_start_listening_should_open_momquery_rpc
(
self
,
super_mock
):
listener
=
TriggerNotificationListener
(
self
.
momqueryrpc_mock
)
...
...
@@ -872,6 +1400,16 @@ class TestTriggerNotificationListener(unittest.TestCase):
self
.
assertIn
(
str
(
self
.
start_time
),
self
.
email_mock
.
call_args
[
0
][
2
])
self
.
assertIn
(
str
(
self
.
stop_time
),
self
.
email_mock
.
call_args
[
0
][
2
])
def
test_handleMessage_should_set_correct_body_for_dwell_spec
(
self
):
listener
=
TriggerNotificationListener
(
self
.
momqueryrpc_mock
)
listener
.
_handleMessage
(
self
.
dwell_message
)
self
.
assertIn
(
str
(
self
.
trigger_id
),
self
.
email_mock
.
call_args
[
0
][
2
])
self
.
assertIn
(
self
.
project_name
,
self
.
email_mock
.
call_args
[
0
][
2
])
self
.
assertIn
(
str
(
self
.
min_start_time
),
self
.
email_mock
.
call_args
[
0
][
2
])
self
.
assertIn
(
str
(
self
.
max_end_time
),
self
.
email_mock
.
call_args
[
0
][
2
])
if
__name__
==
"
__main__
"
:
unittest
.
main
()
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment