ASM #240
Change-Id: Ie1e0b115e991c0bdc01e929a21d36a9f1413d940 Former-commit-id: e34ceb8c86f0814c1be7af3bbd2eadec8daf48aa
This commit is contained in:
parent
a3ac0236b0
commit
969c50b80f
19 changed files with 598 additions and 161 deletions
|
@ -1,23 +1,8 @@
|
||||||
# productId elevAngle prodCategory Partial WMO Id
|
# productId elevAngle prodCategory Partial WMO Id
|
||||||
2 0 GSM NXUS6
|
2 0 GSM NXUS6
|
||||||
19 5 N0R SDUS5
|
19 5 N0R SDUS5
|
||||||
19 13 N1R SDUS2
|
|
||||||
19 15 N1R SDUS2
|
|
||||||
19 24 N2R SDUS2
|
|
||||||
19 25 N2R SDUS2
|
|
||||||
19 31 N3R SDUS3
|
|
||||||
19 34 N3R SDUS3
|
|
||||||
19 35 N3R SDUS3
|
|
||||||
20 5 N0Z SDUS7
|
20 5 N0Z SDUS7
|
||||||
25 5 N0W SDUS6
|
|
||||||
27 5 N0V SDUS5
|
27 5 N0V SDUS5
|
||||||
27 13 N1V SDUS7
|
|
||||||
27 15 N1V SDUS7
|
|
||||||
27 24 N2V SDUS6
|
|
||||||
27 25 N2V SDUS6
|
|
||||||
27 31 N3V SDUS6
|
|
||||||
27 34 N3V SDUS6
|
|
||||||
27 35 N3V SDUS6
|
|
||||||
28 5 NSP SDUS6
|
28 5 NSP SDUS6
|
||||||
30 5 NSW SDUS6
|
30 5 NSW SDUS6
|
||||||
32 0 DHR SDUS5
|
32 0 DHR SDUS5
|
||||||
|
@ -40,7 +25,7 @@
|
||||||
56 34 N3S SDUS3
|
56 34 N3S SDUS3
|
||||||
56 35 N3S SDUS3
|
56 35 N3S SDUS3
|
||||||
57 0 NVL SDUS5
|
57 0 NVL SDUS5
|
||||||
58 0 NST SDUS6
|
58 0 NST SDUS3
|
||||||
59 0 NHI SDUS6
|
59 0 NHI SDUS6
|
||||||
61 0 NTV SDUS6
|
61 0 NTV SDUS6
|
||||||
62 0 NSS SDUS6
|
62 0 NSS SDUS6
|
||||||
|
@ -50,7 +35,7 @@
|
||||||
75 0 FTM NOUS6
|
75 0 FTM NOUS6
|
||||||
78 0 N1P SDUS3
|
78 0 N1P SDUS3
|
||||||
80 0 NTP SDUS5
|
80 0 NTP SDUS5
|
||||||
81 0 DPA SDUS8
|
81 0 DPA SDUS5
|
||||||
82 0 SPD SDUS6
|
82 0 SPD SDUS6
|
||||||
90 0 NHL SDUS6
|
90 0 NHL SDUS6
|
||||||
136 0 RWO SDUS9
|
136 0 RWO SDUS9
|
||||||
|
@ -79,3 +64,61 @@
|
||||||
99 35 N3U SDUS2
|
99 35 N3U SDUS2
|
||||||
134 0 DVL SDUS5
|
134 0 DVL SDUS5
|
||||||
135 0 EET SDUS7
|
135 0 EET SDUS7
|
||||||
|
159 5 N0X SDUS8
|
||||||
|
159 9 NAX SDUS8
|
||||||
|
159 13 N1X SDUS8
|
||||||
|
159 15 N1X SDUS8
|
||||||
|
159 18 NBX SDUS8
|
||||||
|
159 24 N2X SDUS8
|
||||||
|
159 25 N2X SDUS8
|
||||||
|
159 31 N3X SDUS8
|
||||||
|
159 34 N3X SDUS8
|
||||||
|
159 35 N3X SDUS8
|
||||||
|
161 5 N0C SDUS8
|
||||||
|
161 9 NAC SDUS8
|
||||||
|
161 13 N1C SDUS8
|
||||||
|
161 15 N1C SDUS8
|
||||||
|
161 18 NBC SDUS8
|
||||||
|
161 24 N2C SDUS8
|
||||||
|
161 25 N2C SDUS8
|
||||||
|
161 31 N3C SDUS8
|
||||||
|
161 34 N3C SDUS8
|
||||||
|
161 35 N3C SDUS8
|
||||||
|
163 5 N0K SDUS8
|
||||||
|
163 9 NAK SDUS8
|
||||||
|
163 13 N1K SDUS8
|
||||||
|
163 15 N1K SDUS8
|
||||||
|
163 18 NBK SDUS8
|
||||||
|
163 24 N2K SDUS8
|
||||||
|
163 25 N2K SDUS8
|
||||||
|
163 31 N3K SDUS8
|
||||||
|
163 34 N3K SDUS8
|
||||||
|
163 35 N3K SDUS8
|
||||||
|
165 5 N0H SDUS8
|
||||||
|
165 9 NAH SDUS8
|
||||||
|
165 13 N1H SDUS8
|
||||||
|
165 15 N1H SDUS8
|
||||||
|
165 18 NBH SDUS8
|
||||||
|
165 24 N2H SDUS8
|
||||||
|
165 25 N2H SDUS8
|
||||||
|
165 31 N3H SDUS8
|
||||||
|
165 34 N3H SDUS8
|
||||||
|
165 35 N3H SDUS8
|
||||||
|
166 5 N0M SDUS8
|
||||||
|
166 9 NAM SDUS8
|
||||||
|
166 13 N1M SDUS8
|
||||||
|
166 15 N1M SDUS8
|
||||||
|
166 18 NBM SDUS8
|
||||||
|
166 24 N2M SDUS8
|
||||||
|
166 25 N2M SDUS8
|
||||||
|
166 31 N3M SDUS8
|
||||||
|
166 34 N3M SDUS8
|
||||||
|
166 35 N3M SDUS8
|
||||||
|
169 0 OHA SDUS8
|
||||||
|
170 0 DAA SDUS8
|
||||||
|
171 0 PTA SDUS3
|
||||||
|
172 0 DTA SDUS8
|
||||||
|
174 0 DOD SDUS8
|
||||||
|
175 0 DSD SDUS8
|
||||||
|
176 0 DPR SDUS8
|
||||||
|
177 0 HHC SDUS8
|
||||||
|
|
|
@ -1,36 +1,46 @@
|
||||||
RPS List rps-RPGOP-tcp.clear-air modified 2007:01:03:00:00:00 ... 31 products
|
RPS List rps-RPGOP-tcp.VCP32.rps created 2010:11:18:17:32:56 ... 41 products
|
||||||
An RPS list contains the following fields: Product Name, Product
|
An RPS list contains the fields: Prod-Name, Mnemonic, Prod-Code
|
||||||
Mnemonic, Product Code, Number of Data Levels, Resolution, Layer Code,
|
Number of Data Levels, Resolution, Layer Code, Elevation, Contour Interval,
|
||||||
Elevation, Contour Interval, Priority, Req Interval, and Map
|
Priority, Req Interval, Map, Lower Layer, Upper Layer, multCut, endHour, timeSpan
|
||||||
The record format is: '%-39s %-3s%4d%4d%6d %c%6d%7d%2d%2d%c'
|
The record format is: '%-39s %-3s%4d%4d%6d %c%6d%7d%2d%2d%c%3d%3d %c%7d%7d'
|
||||||
Reflectivity (Z) Z 19 16 100 - 5 -1 0 1N
|
Reflectivity (Z) Z 94 256 100 - 8227 -1 0 1N -1 -1 N -1 0
|
||||||
Reflectivity (Z) Z 19 16 100 - 15 -1 0 1N
|
Velocity (V) V 99 256 25 - 8227 -1 0 1N -1 -1 N -1 0
|
||||||
Reflectivity (Z) Z 19 16 100 - 25 -1 0 1N
|
Reflectivity (Z) Z 19 16 100 - 5 -1 0 1N -1 -1 N -1 0
|
||||||
Reflectivity (Z) Z 19 16 100 - 35 -1 0 1N
|
Reflectivity (Z) Z 20 16 200 - 5 -1 0 1N -1 -1 N -1 0
|
||||||
Reflectivity (Z) Z 20 16 200 - 5 -1 0 1N
|
Velocity (V) V 27 16 100 - 5 -1 0 1N -1 -1 N -1 0
|
||||||
Velocity (V) V 27 16 100 - 5 -1 0 1N
|
Storm Rel Velocity (SRM) SRM 56 16 100 - 5 -1 0 1N -1 -1 N -1 0
|
||||||
Velocity (V) V 27 16 100 - 15 -1 0 1N
|
Storm Rel Velocity (SRM) SRM 56 16 100 - 15 -1 0 1N -1 -1 N -1 0
|
||||||
Velocity (V) V 27 16 100 - 25 -1 0 1N
|
Storm Rel Velocity (SRM) SRM 56 16 100 - 25 -1 0 1N -1 -1 N -1 0
|
||||||
Velocity (V) V 27 16 100 - 35 -1 0 1N
|
Storm Rel Velocity (SRM) SRM 56 16 100 - 35 -1 0 1N -1 -1 N -1 0
|
||||||
Storm Rel Velocity (SRM) SRM 56 16 100 - 5 -1 0 1N
|
Composite Ref (CZ) CZ 36 8 400 - -1 -1 0 1N 2 -1 N -1 0
|
||||||
Storm Rel Velocity (SRM) SRM 56 16 100 - 15 -1 0 1N
|
Composite Ref (CZ) CZ 37 16 100 - -1 -1 0 1N 2 -1 N -1 0
|
||||||
Storm Rel Velocity (SRM) SRM 56 16 100 - 25 -1 0 1N
|
Composite Ref (CZ) CZ 38 16 400 - -1 -1 0 1N 2 -1 N -1 0
|
||||||
Storm Rel Velocity (SRM) SRM 56 16 100 - 35 -1 0 1N
|
Lyr Comp Ref Max (LRM) Level 1 LRM 65 8 0 L -1 -1 0 1N -1 -1 N -1 0
|
||||||
Composite Ref (CZ) CZ 36 8 400 - -1 -1 0 1N
|
Lyr Comp Ref Max (LRM) Level 2 LRM 66 8 0 M -1 -1 0 1N -1 -1 N -1 0
|
||||||
Composite Ref (CZ) CZ 37 16 100 - -1 -1 0 1N
|
Lyr Comp Ref Max (LRM) Level 3 LRM 90 8 0 H -1 -1 0 1N -1 -1 N -1 0
|
||||||
Composite Ref (CZ) CZ 38 16 400 - -1 -1 0 1N
|
Lyr Comp Ref MAX (APR) APR 67 16 0 L -1 -1 0 1N -1 -1 N -1 0
|
||||||
Lyr Comp Ref Max (LRM) Level 1 LRM 65 8 0 L -1 -1 0 1N
|
Echo Tops (ET) ET 41 16 0 - -1 -1 0 1N 2 -1 N -1 0
|
||||||
Lyr Comp Ref Max (LRM) Level 2 LRM 66 8 0 M -1 -1 0 1N
|
Vert Integ Liq (VIL) VIL 57 16 0 - -1 -1 0 1N 2 -1 N -1 0
|
||||||
Lyr Comp Ref Max (LRM) Level 3 LRM 90 8 0 H -1 -1 0 1N
|
Enhanced Echo Tops (EET) EET 135 256 100 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Lyr Comp Ref MAX (APR) APR 67 16 0 L -1 -1 0 1N
|
Digital Vert Integ Liq (DVL) DVL 134 256 100 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Echo Tops (ET) ET 41 16 0 - -1 -1 0 1N
|
One Hour Precip (OHP) OHP 78 16 0 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Vert Integ Liq (VIL) VIL 57 16 0 - -1 -1 0 1N
|
Storm Total Precip (STP) STP 80 16 0 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
One Hour Precip (OHP) OHP 78 16 0 - -1 -1 0 1N
|
VAD Wind Profile (VWP) VWP 48 0 0 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Storm Total Precip (STP) STP 80 16 0 - -1 -1 0 1N
|
Digital Precip Array (DPA) DPA 81 256 400 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
VAD Wind Profile (VWP) VWP 48 0 0 - -1 -1 0 1N
|
Base Spectrum Width (SW) SW 28 8 100 - 5 -1 0 1N -1 -1 N -1 0
|
||||||
Digital Precip Array (DPA) DPA 81 256 400 - -1 -1 0 1N
|
Base Spectrum Width (SW) SW 30 8 100 - 5 -1 0 1N -1 -1 N -1 0
|
||||||
Velocity (V) V 25 16 100 - 5 -1 0 1N
|
Digital Hybrid Scan Refl (DHR) DHR 32 256 100 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Base Spectrum Width (SW) SW 28 8 100 - 5 -1 0 1N
|
Storm Total Precip (STP) STP 138 256 200 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Base Spectrum Width (SW) SW 30 8 100 - 5 -1 0 1N
|
Differential Refl (ZDR) ZDR 159 256 25 - 8227 -1 0 1N -1 -1 N -1 0
|
||||||
Digital Hybrid Scan Refl (DHR) DHR 32 256 100 - -1 -1 0 1N -1 -1
|
Correlation Coeff (CC) CC 161 256 25 - 8227 -1 0 1N -1 -1 N -1 0
|
||||||
Storm Total Precip (STP) STP 138 256 200 - -1 -1 0 1N -1 -1 N
|
Specific Diff Phase (KDP) KDP 163 256 25 - 8227 -1 0 1N -1 -1 N -1 0
|
||||||
|
Hydrometeor Class (HC) HC 165 256 25 - 8227 -1 0 1N -1 -1 N -1 0
|
||||||
|
Melting Layer (ML) ML 166 0 0 - 8227 -1 0 1N -1 -1 N -1 0
|
||||||
|
Digital Inst Precip Rate (DPR) DPR 176 0 25 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
Hybrid Hydrometeor Class (HHC) HHC 177 256 25 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
One Hour Accum (OHA) OHA 169 16 200 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
One Hour Unbiased Accum (DAA) DAA 170 256 25 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
Storm Total Accum (STA) STA 171 16 200 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
Storm Total Accum (STA) STA 172 256 25 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
One Hour Diff (DOD) DOD 174 256 25 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
Storm Total Diff (DSD) DSD 175 256 25 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
|
|
@ -1,43 +1,51 @@
|
||||||
RPS List rps-RPGOP-tcp.storm created 2007:01:03:00:00:00 ... 38 products
|
RPS List rps-RPGOP-tcp.VCP11.rps created 2010:11:18:17:28:33 ... 46 products
|
||||||
An RPS list contains the following fields: Product Name, Product
|
An RPS list contains the fields: Prod-Name, Mnemonic, Prod-Code
|
||||||
Mnemonic, Product Code, Number of Data Levels, Resolution, Layer Code,
|
Number of Data Levels, Resolution, Layer Code, Elevation, Contour Interval,
|
||||||
Elevation, Contour Interval, Priority, Req Interval, and Map
|
Priority, Req Interval, Map, Lower Layer, Upper Layer, multCut, endHour, timeSpan
|
||||||
The record format is: '%-39s %-3s%4d%4d%6d %c%6d%7d%2d%2d%c'
|
The record format is: '%-39s %-3s%4d%4d%6d %c%6d%7d%2d%2d%c%3d%3d %c%7d%7d'
|
||||||
Reflectivity (Z) Z 19 16 100 - 5 -1 0 1N
|
Reflectivity (Z) Z 94 256 100 - 8226 -1 0 1N -1 -1 N -1 0
|
||||||
Reflectivity (Z) Z 19 16 100 - 15 -1 0 1N
|
Velocity (V) V 99 256 25 - 8226 -1 0 1N -1 -1 N -1 0
|
||||||
Reflectivity (Z) Z 19 16 100 - 25 -1 0 1N
|
Reflectivity (Z) Z 19 16 100 - 5 -1 0 1N -1 -1 N -1 0
|
||||||
Reflectivity (Z) Z 19 16 100 - 35 -1 0 1N
|
Reflectivity (Z) Z 20 16 200 - 5 -1 0 1N -1 -1 N -1 0
|
||||||
Reflectivity (Z) Z 20 16 200 - 5 -1 0 1N
|
Velocity (V) V 27 16 100 - 5 -1 0 1N -1 -1 N -1 0
|
||||||
Velocity (V) V 27 16 100 - 5 -1 0 1N
|
Storm Rel Velocity (SRM) SRM 56 16 100 - 5 -1 0 1N -1 -1 N -1 0
|
||||||
Velocity (V) V 27 16 100 - 15 -1 0 1N
|
Storm Rel Velocity (SRM) SRM 56 16 100 - 15 -1 0 1N -1 -1 N -1 0
|
||||||
Velocity (V) V 27 16 100 - 25 -1 0 1N
|
Storm Rel Velocity (SRM) SRM 56 16 100 - 25 -1 0 1N -1 -1 N -1 0
|
||||||
Velocity (V) V 27 16 100 - 35 -1 0 1N
|
Storm Rel Velocity (SRM) SRM 56 16 100 - 35 -1 0 1N -1 -1 N -1 0
|
||||||
Storm Rel Velocity (SRM) SRM 56 16 100 - 5 -1 0 1N
|
Composite Ref (CZ) CZ 37 16 100 - -1 -1 0 1N 2 -1 N -1 0
|
||||||
Storm Rel Velocity (SRM) SRM 56 16 100 - 15 -1 0 1N
|
Composite Ref (CZ) CZ 38 16 400 - -1 -1 0 1N 2 -1 N -1 0
|
||||||
Storm Rel Velocity (SRM) SRM 56 16 100 - 25 -1 0 1N
|
Lyr Comp Ref Max (LRM) Level 1 LRM 65 8 0 L -1 -1 0 1N -1 -1 N -1 0
|
||||||
Storm Rel Velocity (SRM) SRM 56 16 100 - 35 -1 0 1N
|
Lyr Comp Ref Max (LRM) Level 2 LRM 66 8 0 M -1 -1 0 1N -1 -1 N -1 0
|
||||||
Composite Ref (CZ) CZ 37 16 100 - -1 -1 0 1N
|
Lyr Comp Ref Max (LRM) Level 3 LRM 90 8 0 H -1 -1 0 1N -1 -1 N -1 0
|
||||||
Composite Ref (CZ) CZ 38 16 400 - -1 -1 0 1N
|
Lyr Comp Ref MAX (APR) APR 67 16 0 L -1 -1 0 1N -1 -1 N -1 0
|
||||||
Lyr Comp Ref Max (LRM) Level 1 LRM 65 8 0 L -1 -1 0 1N
|
Echo Tops (ET) ET 41 16 0 - -1 -1 0 1N 2 -1 N -1 0
|
||||||
Lyr Comp Ref Max (LRM) Level 2 LRM 66 8 0 M -1 -1 0 1N
|
Vert Integ Liq (VIL) VIL 57 16 0 - -1 -1 0 1N 2 -1 N -1 0
|
||||||
Lyr Comp Ref Max (LRM) Level 3 LRM 90 8 0 H -1 -1 0 1N
|
Enhanced Echo Tops (EET) EET 135 256 100 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Lyr Comp Ref MAX (APR) APR 67 16 0 L -1 -1 0 1N
|
Digital Vert Integ Liq (DVL) DVL 134 256 100 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Echo Tops (ET) ET 41 16 0 - -1 -1 0 1N
|
One Hour Precip (OHP) OHP 78 16 0 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Vert Integ Liq (VIL) VIL 57 16 0 - -1 -1 0 1N
|
Storm Total Precip (STP) STP 80 16 0 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
One Hour Precip (OHP) OHP 78 16 0 - -1 -1 0 1N
|
VAD Wind Profile (VWP) VWP 48 0 0 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Storm Total Precip (STP) STP 80 16 0 - -1 -1 0 1N
|
Digital Precip Array (DPA) DPA 81 256 400 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
VAD Wind Profile (VWP) VWP 48 0 0 - -1 -1 0 1N
|
Base Spectrum Width (SW) SW 28 8 100 - 5 -1 0 1N -1 -1 N -1 0
|
||||||
Digital Precip Array (DPA) DPA 81 256 400 - -1 -1 0 1N
|
Base Spectrum Width (SW) SW 30 8 100 - 5 -1 0 1N -1 -1 N -1 0
|
||||||
Velocity (V) V 25 16 100 - 5 -1 0 1N
|
Storm Tracking Information (STI) STI 58 0 100 - -1 -1 0 1N 2 -1 N -1 0
|
||||||
Base Spectrum Width (SW) SW 28 8 100 - 5 -1 0 1N
|
Hail Index (HI) HI 59 0 100 - -1 -1 0 1N 2 -1 N -1 0
|
||||||
Base Spectrum Width (SW) SW 30 8 100 - 5 -1 0 1N
|
Mesocyclone (MD) MD 141 0 0 - 1 -1 0 1N 2 -1 N -1 0
|
||||||
Severe Weather Probablilty (SWP) SWP 47 0 100 - -1 -1 0 1N
|
Tornadic Vortex Signature (TVS) TVS 61 0 100 - -1 -1 0 1N 2 -1 N -1 0
|
||||||
Storm Tracking Information (STI) STI 58 0 100 - -1 -1 0 1N
|
Storm Structure (SS) SS 62 0 100 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Hail Index (HI) HI 59 0 100 - -1 -1 0 1N
|
Supplemental Precipitation Data (SPD) SPD 82 0 100 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Mesocyclone (M) M 60 0 100 - -1 -1 0 1N
|
Digital Hybrid Scan Refl (DHR) DHR 32 256 100 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Mesocyclone (MD) MD 141 0 0 - -1 -1 0 1N
|
Storm Total Precip (STP) STP 138 256 200 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
Tornadic Vortex Signature (TVS) TVS 61 0 100 - -1 -1 0 1N
|
Differential Refl (ZDR) ZDR 159 256 25 - 8226 -1 0 1N -1 -1 N -1 0
|
||||||
Storm Structure (SS) SS 62 0 100 - -1 -1 0 1N
|
Correlation Coeff (CC) CC 161 256 25 - 8226 -1 0 1N -1 -1 N -1 0
|
||||||
Supplemental Precipitation Data (SPD) SPD 82 0 100 - -1 -1 0 1N
|
Specific Diff Phase (KDP) KDP 163 256 25 - 8226 -1 0 1N -1 -1 N -1 0
|
||||||
Digital Hybrid Scan Refl (DHR) DHR 32 256 100 - -1 -1 0 1N -1 -1
|
Hydrometeor Class (HC) HC 165 256 25 - 8226 -1 0 1N -1 -1 N -1 0
|
||||||
Storm Total Precip (STP) STP 138 256 200 - -1 -1 0 1N -1 -1 N
|
Melting Layer (ML) ML 166 0 0 - 8226 -1 0 1N -1 -1 N -1 0
|
||||||
|
Digital Inst Precip Rate (DPR) DPR 176 0 25 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
Hybrid Hydrometeor Class (HHC) HHC 177 256 25 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
One Hour Accum (OHA) OHA 169 16 200 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
One Hour Unbiased Accum (DAA) DAA 170 256 25 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
Storm Total Accum (STA) STA 171 16 200 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
Storm Total Accum (STA) STA 172 256 25 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
One Hour Diff (DOD) DOD 174 256 25 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
Storm Total Diff (DSD) DSD 175 256 25 - -1 -1 0 1N -1 -1 N -1 0
|
||||||
|
|
|
@ -24,12 +24,12 @@
|
||||||
41 0 NET SDUS7
|
41 0 NET SDUS7
|
||||||
48 0 NVW SDUS3
|
48 0 NVW SDUS3
|
||||||
57 0 NVL SDUS5
|
57 0 NVL SDUS5
|
||||||
58 0 NST SDUS6
|
58 0 NST SDUS3
|
||||||
59 0 NHI SDUS6
|
59 0 NHI SDUS6
|
||||||
61 0 NTV SDUS6
|
61 0 NTV SDUS6
|
||||||
78 0 N1P SDUS3
|
78 0 N1P SDUS3
|
||||||
80 0 NTP SDUS5
|
80 0 NTP SDUS5
|
||||||
81 0 DPA SDUS8
|
81 0 DPA SDUS5
|
||||||
82 0 SPD SDUS6
|
82 0 SPD SDUS6
|
||||||
138 0 DSP SDUS5
|
138 0 DSP SDUS5
|
||||||
141 0 NMD SDUS3
|
141 0 NMD SDUS3
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#Radar Connection Characteristic D'n' Key
|
#Radar Connection Characteristic D'n' Key
|
||||||
#D1 - LAN 10 mbps
|
#D1 - LAN 10 mbps
|
||||||
#D2 - FR DoD 256 kbps
|
#D2 - FR DoD 1.54 mbps
|
||||||
#D3 - FAA FR 256 kbps
|
#D3 - FAA FR 256 kbps
|
||||||
#D4 - NWS & DoD Supplemental FR 128 kbps
|
#D4 - NWS & DoD Supplemental FR 128 kbps
|
||||||
#D5 - NWS & DoD Supplemental FR 256 kbps
|
#D5 - NWS & DoD Supplemental FR 256 kbps
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
#D7 - Dedicated Backup Across WAN 128 kbps Aggregate
|
#D7 - Dedicated Backup Across WAN 128 kbps Aggregate
|
||||||
#D8 - ASR-4/ARSR-11 radars
|
#D8 - ASR-4/ARSR-11 radars
|
||||||
#
|
#
|
||||||
#Site ID Region numRpgs RPGs 020209
|
#Site ID Region numRpgs RPGs 071911
|
||||||
KABQ 5 5 ABXYD1 FDXYD2 EPZND7 HDXND7 AMAND7
|
KABQ 5 5 ABXYD1 FDXYD2 EPZND7 HDXND7 AMAND7
|
||||||
KABR 3 4 ABRYD1 FSDND7 BISND7 MBXND7
|
KABR 3 4 ABRYD1 FSDND7 BISND7 MBXND7
|
||||||
KAKQ 1 4 AKQYD1 DOXYD2 MHXND7 RAXND7
|
KAKQ 1 4 AKQYD1 DOXYD2 MHXND7 RAXND7
|
||||||
|
@ -87,7 +87,7 @@ KLZK 4 4 LZKYD1 SRXND4 NQAND7 INXND7
|
||||||
KMAF 4 5 MAFYD1 SJTND7 DYXND7 EPZND7 HDXND7
|
KMAF 4 5 MAFYD1 SJTND7 DYXND7 EPZND7 HDXND7
|
||||||
KMEG 4 7 NQAYD1 GWXND4 MEMYD6 LZKND7 OHXND7 PAHND7 SRXND7
|
KMEG 4 7 NQAYD1 GWXND4 MEMYD6 LZKND7 OHXND7 PAHND7 SRXND7
|
||||||
KMFL 2 7 AMXYD1 BYXND4 FLLYD6 MIAYD6 PBIYD6 JUAND7 TBWND7
|
KMFL 2 7 AMXYD1 BYXND4 FLLYD6 MIAYD6 PBIYD6 JUAND7 TBWND7
|
||||||
KMFR 6 4 MAXYD1 BHXND7 ATXND7 RTXND7
|
KMFR 6 5 MAXYD1 BHXND7 ATXND7 LGXND7 RTXND7
|
||||||
KMHX 2 4 MHXYD1 AKQND7 DOXND7 LTXND7
|
KMHX 2 4 MHXYD1 AKQND7 DOXND7 LTXND7
|
||||||
KMKX 3 4 MKXYD1 MKEYD6 GRBND7 LOTND7
|
KMKX 3 4 MKXYD1 MKEYD6 GRBND7 LOTND7
|
||||||
KMLB 2 5 MLBYD1 MCOYD6 TBWND7 JUAND7 AMXND7
|
KMLB 2 5 MLBYD1 MCOYD6 TBWND7 JUAND7 AMXND7
|
||||||
|
@ -96,7 +96,7 @@ KMPX 3 4 MPXYD1 MSPYD6 DLHND7 FSDND7
|
||||||
KMQT 3 3 MQTYD1 APXND7 GRBND7
|
KMQT 3 3 MQTYD1 APXND7 GRBND7
|
||||||
KMRX 4 5 MRXYD1 HTXND4 OHXND7 FFCND7 JGXND7
|
KMRX 4 5 MRXYD1 HTXND4 OHXND7 FFCND7 JGXND7
|
||||||
KMSO 5 3 MSXYD1 TFXND7 OTXND7
|
KMSO 5 3 MSXYD1 TFXND7 OTXND7
|
||||||
KMSR 3 1 MPXND1
|
KMSR 3 2 MPXND1 MSPND6
|
||||||
KMTR 6 6 MUXYD1 BHXND7 VTXND7 VBXND7 NKXND7 SOXND7
|
KMTR 6 6 MUXYD1 BHXND7 VTXND7 VBXND7 NKXND7 SOXND7
|
||||||
KOAX 3 3 OAXYD1 UEXND7 DMXND7
|
KOAX 3 3 OAXYD1 UEXND7 DMXND7
|
||||||
KOHX 4 6 OHXYD1 HTXND4 BNAYD6 MRXND7 NQAND7 GWXND7
|
KOHX 4 6 OHXYD1 HTXND4 BNAYD6 MRXND7 NQAND7 GWXND7
|
||||||
|
@ -110,7 +110,7 @@ KPBZ 1 4 PBZYD1 PITYD6 RLXND7 BUFND7
|
||||||
KPDT 6 3 PDTYD1 OTXND7 CBXND7
|
KPDT 6 3 PDTYD1 OTXND7 CBXND7
|
||||||
KPHI 1 5 DIXYD1 DOXND4 PHLYD6 LWXND7 OKXND7
|
KPHI 1 5 DIXYD1 DOXND4 PHLYD6 LWXND7 OKXND7
|
||||||
KPIH 5 4 SFXYD1 MTXND4 CBXND7 ICXND7
|
KPIH 5 4 SFXYD1 MTXND4 CBXND7 ICXND7
|
||||||
KPQR 6 3 RTXYD1 ATXND7 MAXND7
|
KPQR 6 4 RTXYD1 LGXND5 ATXND7 MAXND7
|
||||||
KPSR 5 5 IWAYD1 YUXYD1 PHXYD6 EMXND7 FSXND7
|
KPSR 5 5 IWAYD1 YUXYD1 PHXYD6 EMXND7 FSXND7
|
||||||
KPTR 6 1 RTXND1
|
KPTR 6 1 RTXND1
|
||||||
KPUB 5 3 PUXYD1 FTGND7 GLDND7
|
KPUB 5 3 PUXYD1 FTGND7 GLDND7
|
||||||
|
@ -121,7 +121,7 @@ KRIW 5 3 RIWYD1 BLXND7 CYSND7
|
||||||
KRLX 1 3 RLXYD1 PBZND7 JKLND7
|
KRLX 1 3 RLXYD1 PBZND7 JKLND7
|
||||||
KRNK 1 3 FCXYD1 RAXND7 GSPND7
|
KRNK 1 3 FCXYD1 RAXND7 GSPND7
|
||||||
KRSA 6 1 DAXND1
|
KRSA 6 1 DAXND1
|
||||||
KSEW 6 4 ATXYD1 RTXND7 PDTND7 QKWND8
|
KSEW 6 5 ATXYD1 LGXYD1 RTXND7 PDTND7 QKWND8
|
||||||
KSGF 3 5 SGFYD1 EAXND7 PAHND7 VWXND7 HPXND7
|
KSGF 3 5 SGFYD1 EAXND7 PAHND7 VWXND7 HPXND7
|
||||||
KSGX 6 6 NKXYD1 SOXYD1 EYXND5 VTXND7 VBXND7 HNXND7
|
KSGX 6 6 NKXYD1 SOXYD1 EYXND5 VTXND7 VBXND7 HNXND7
|
||||||
KSHV 4 7 SHVYD1 LZKND4 FWSND7 GRKND7 DGXND7 GWXND7 SRXND7
|
KSHV 4 7 SHVYD1 LZKND4 FWSND7 GRKND7 DGXND7 GWXND7 SRXND7
|
||||||
|
@ -144,8 +144,8 @@ KVEF 5 6 ESXYD1 EYXYD2 LASYD6 FSXND7 IWAND7 YUXND7
|
||||||
KVHW 5 2 MTXND5 ICXND5
|
KVHW 5 2 MTXND5 ICXND5
|
||||||
KVUY 1 1 OKXND5
|
KVUY 1 1 OKXND5
|
||||||
KWNO 1 1 LWXND5
|
KWNO 1 1 LWXND5
|
||||||
PACR 8 7 ABCYD3 AKCYD3 AHGND7 AIHND7 APDND7 AECND7 ACGND7
|
PACR 8 7 ABCND7 AKCND7 AHGND7 AIHND7 APDND7 AECND7 ACGND7
|
||||||
PAFC 8 7 AHGYD3 AIHYD3 ABCND7 AKCND7 APDND7 AECND7 ACGND7
|
PAFC 8 7 AHGYD3 AIHYD3 ABCYD3 AKCYD3 APDND7 AECND7 ACGND7
|
||||||
PAFG 9 7 AECYD3 APDYD3 AHGND7 AIHND7 ABCND7 AKCND7 ACGND7
|
PAFG 9 7 AECYD3 APDYD3 AHGND7 AIHND7 ABCND7 AKCND7 ACGND7
|
||||||
PAJK 7 7 ACGYD3 AHGND7 AIHND7 ABCND7 AKCND7 APDND7 AECND7
|
PAJK 7 7 ACGYD3 AHGND7 AIHND7 ABCND7 AKCND7 APDND7 AECND7
|
||||||
PGUM 0 1 GUAYD1
|
PGUM 0 1 GUAYD1
|
||||||
|
|
|
@ -19,10 +19,29 @@
|
||||||
**/
|
**/
|
||||||
package com.raytheon.rcm.config;
|
package com.raytheon.rcm.config;
|
||||||
|
|
||||||
|
import com.raytheon.rcm.event.RadarEventListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface to configurations that can be changed at runtime.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* ...
|
||||||
|
* 2014-02-03 DR 14762 D. Friedman Support arbitrary config files.
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
*/
|
||||||
public interface MutableConfiguration {
|
public interface MutableConfiguration {
|
||||||
|
public RadarEventListener getConfigurationEventTarget();
|
||||||
|
public void setConfigurationEventTarget(RadarEventListener configurationEventTarget);
|
||||||
|
|
||||||
// TODO: need to return usable error messages...
|
// TODO: need to return usable error messages...
|
||||||
public boolean setGlobalConfig(Globals globals);
|
public boolean setGlobalConfig(Globals globals);
|
||||||
public boolean setRadarConfig(RadarConfig rc);
|
public boolean setRadarConfig(RadarConfig rc);
|
||||||
public boolean addRadarConfig(RadarConfig rc);
|
public boolean addRadarConfig(RadarConfig rc);
|
||||||
public boolean removeRadarConfig(String radarID);
|
public boolean removeRadarConfig(String radarID);
|
||||||
|
public boolean storeConfigFile(String name, byte[] data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,22 +26,46 @@ import javax.xml.bind.annotation.XmlRootElement;
|
||||||
import com.raytheon.rcm.config.RadarConfig;
|
import com.raytheon.rcm.config.RadarConfig;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents events that can happen within the RadarServer.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* 2009-04-22 #1693 D. Friedman Initial checkin
|
||||||
|
* ...
|
||||||
|
* 2014-02-03 DR 14762 D. Friedman Add Category enum
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
*/
|
||||||
@XmlRootElement
|
@XmlRootElement
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
public class ConfigEvent {
|
public class ConfigEvent {
|
||||||
|
public static enum Category { GLOBAL_CONFIG, RADAR_CONFIG, PROD_DISTRIBUTION, NATIONAL_RPS_LISTS }
|
||||||
|
|
||||||
private String radarID; // null indicates global configuration change.
|
private String radarID; // null indicates global configuration change.
|
||||||
private RadarConfig oldConfig;
|
private RadarConfig oldConfig;
|
||||||
private RadarConfig newConfig;
|
private RadarConfig newConfig;
|
||||||
|
|
||||||
|
private Category category;
|
||||||
|
|
||||||
|
/** Public constructor for deserialization. Not intended for users. */
|
||||||
public ConfigEvent() {
|
public ConfigEvent() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ConfigEvent(Category category) {
|
||||||
|
this.category = category;
|
||||||
|
}
|
||||||
|
|
||||||
public ConfigEvent(String radarID, RadarConfig oldConfig,
|
public ConfigEvent(String radarID, RadarConfig oldConfig,
|
||||||
RadarConfig newConfig) {
|
RadarConfig newConfig) {
|
||||||
this.radarID = radarID;
|
this.radarID = radarID;
|
||||||
this.oldConfig = oldConfig;
|
this.oldConfig = oldConfig;
|
||||||
this.newConfig = newConfig;
|
this.newConfig = newConfig;
|
||||||
|
this.category = radarID == null ? Category.GLOBAL_CONFIG : Category.RADAR_CONFIG;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getRadarID() {
|
public String getRadarID() {
|
||||||
|
@ -74,4 +98,12 @@ public class ConfigEvent {
|
||||||
else
|
else
|
||||||
return "{Global config change}";
|
return "{Global config change}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Category getCategory() {
|
||||||
|
return category;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCategory(Category category) {
|
||||||
|
this.category = category;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
26
RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/mqsrvr/ReqObj.java
Executable file → Normal file
26
RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/mqsrvr/ReqObj.java
Executable file → Normal file
|
@ -35,6 +35,19 @@ import com.raytheon.rcm.request.Request;
|
||||||
import com.raytheon.rcm.rmr.MultipleRequest;
|
import com.raytheon.rcm.rmr.MultipleRequest;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request messages that can be sent to the RadarServer.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* ...
|
||||||
|
* 2014-02-03 DR 14762 D. Friedman Add SendConfigFile
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
*/
|
||||||
@XmlSeeAlso({ReqObj.GetRadarList.class,
|
@XmlSeeAlso({ReqObj.GetRadarList.class,
|
||||||
ReqObj.GetRadarConfig.class, ReqObj.SetRadarConfig.class,
|
ReqObj.GetRadarConfig.class, ReqObj.SetRadarConfig.class,
|
||||||
ReqObj.GetRadarStatus.class, ReqObj.GetRadarStatusMessages.class,
|
ReqObj.GetRadarStatus.class, ReqObj.GetRadarStatusMessages.class,
|
||||||
|
@ -45,7 +58,8 @@ import com.raytheon.rcm.rmr.MultipleRequest;
|
||||||
ReqObj.GetGlobalConfig.class, ReqObj.SetGlobalConfig.class,
|
ReqObj.GetGlobalConfig.class, ReqObj.SetGlobalConfig.class,
|
||||||
ReqObj.ActivateRMR.class, ReqObj.CancelRMR.class,
|
ReqObj.ActivateRMR.class, ReqObj.CancelRMR.class,
|
||||||
ReqObj.GetActiveRMRs.class, ReqObj.GetAlertRequest.class,
|
ReqObj.GetActiveRMRs.class, ReqObj.GetAlertRequest.class,
|
||||||
ReqObj.SendAlertRequest.class, ReqObj.SendMessageToRPG.class})
|
ReqObj.SendAlertRequest.class, ReqObj.SendMessageToRPG.class,
|
||||||
|
ReqObj.SendConfigFile.class})
|
||||||
public class ReqObj {
|
public class ReqObj {
|
||||||
@XmlRootElement
|
@XmlRootElement
|
||||||
public static class GetRadarList extends ReqObj {
|
public static class GetRadarList extends ReqObj {
|
||||||
|
@ -121,6 +135,16 @@ public class ReqObj {
|
||||||
// nothing else
|
// nothing else
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@XmlRootElement
|
||||||
|
public static class SendConfigFile extends ReqObj {
|
||||||
|
public String fileName;
|
||||||
|
public byte[] fileData;
|
||||||
|
public String toString() {
|
||||||
|
return String.format("%s(%s, ...)",
|
||||||
|
getClass().getSimpleName(), fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@XmlRootElement
|
@XmlRootElement
|
||||||
public static class ActivateRMR extends ReqObj {
|
public static class ActivateRMR extends ReqObj {
|
||||||
public MultipleRequest multipleRequest;
|
public MultipleRequest multipleRequest;
|
||||||
|
|
|
@ -66,6 +66,7 @@ import com.raytheon.rcm.mqsrvr.ReqObj.GetRadarList;
|
||||||
import com.raytheon.rcm.mqsrvr.ReqObj.GetRadarStatusMessages;
|
import com.raytheon.rcm.mqsrvr.ReqObj.GetRadarStatusMessages;
|
||||||
import com.raytheon.rcm.mqsrvr.ReqObj.GetRpsList;
|
import com.raytheon.rcm.mqsrvr.ReqObj.GetRpsList;
|
||||||
import com.raytheon.rcm.mqsrvr.ReqObj.SendAlertRequest;
|
import com.raytheon.rcm.mqsrvr.ReqObj.SendAlertRequest;
|
||||||
|
import com.raytheon.rcm.mqsrvr.ReqObj.SendConfigFile;
|
||||||
import com.raytheon.rcm.mqsrvr.ReqObj.SendMessageToRPG;
|
import com.raytheon.rcm.mqsrvr.ReqObj.SendMessageToRPG;
|
||||||
import com.raytheon.rcm.mqsrvr.ReqObj.SendOneTimeRequests;
|
import com.raytheon.rcm.mqsrvr.ReqObj.SendOneTimeRequests;
|
||||||
import com.raytheon.rcm.mqsrvr.ReqObj.SendRpsList;
|
import com.raytheon.rcm.mqsrvr.ReqObj.SendRpsList;
|
||||||
|
@ -79,6 +80,19 @@ import com.raytheon.rcm.server.Log;
|
||||||
import com.raytheon.rcm.server.RadarServer;
|
import com.raytheon.rcm.server.RadarServer;
|
||||||
import com.raytheon.rcm.server.StatusManager.RadarStatus;
|
import com.raytheon.rcm.server.StatusManager.RadarStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JMS-based RadarServer request message handler.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* ...
|
||||||
|
* 2014-02-03 DR 14762 D. Friedman Handle NDM config files.
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
*/
|
||||||
public class MsgServ implements RadarEventListener, MessageListener {
|
public class MsgServ implements RadarEventListener, MessageListener {
|
||||||
|
|
||||||
QueueConnection queueConn;
|
QueueConnection queueConn;
|
||||||
|
@ -313,6 +327,9 @@ public class MsgServ implements RadarEventListener, MessageListener {
|
||||||
} else if (ro instanceof SendMessageToRPG) {
|
} else if (ro instanceof SendMessageToRPG) {
|
||||||
SendMessageToRPG ro2 = (SendMessageToRPG) ro;
|
SendMessageToRPG ro2 = (SendMessageToRPG) ro;
|
||||||
error = serv.sendMessageToRPG(ro2.radarID, ro2.message);
|
error = serv.sendMessageToRPG(ro2.radarID, ro2.message);
|
||||||
|
} else if (ro instanceof SendConfigFile) {
|
||||||
|
SendConfigFile ro2 = (SendConfigFile) ro;
|
||||||
|
error = serv.sendConfigFile(ro2.fileName, ro2.fileData);
|
||||||
} else if (ro instanceof DebugCommand) {
|
} else if (ro instanceof DebugCommand) {
|
||||||
DebugCommand.Command c = ((DebugCommand) ro).command;
|
DebugCommand.Command c = ((DebugCommand) ro).command;
|
||||||
if (c == DebugCommand.Command.LOG_OTR_STATUS)
|
if (c == DebugCommand.Command.LOG_OTR_STATUS)
|
||||||
|
|
|
@ -28,7 +28,6 @@ import java.util.Map;
|
||||||
|
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
|
|
||||||
import com.raytheon.rcm.event.ConfigEvent;
|
|
||||||
import com.raytheon.rcm.event.RadarEvent;
|
import com.raytheon.rcm.event.RadarEvent;
|
||||||
import com.raytheon.rcm.event.RadarEventListener;
|
import com.raytheon.rcm.event.RadarEventListener;
|
||||||
import com.raytheon.rcm.alertreq.AlertRequestDefinition;
|
import com.raytheon.rcm.alertreq.AlertRequestDefinition;
|
||||||
|
@ -53,6 +52,19 @@ import com.raytheon.rcm.server.StatusManager;
|
||||||
import com.raytheon.rcm.server.StatusManager.RadarStatus;
|
import com.raytheon.rcm.server.StatusManager.RadarStatus;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Common RadarServer request message handler.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* ...
|
||||||
|
* 2014-02-03 DR 14762 D. Friedman Handle NDM config files.
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
*/
|
||||||
public class Serv {
|
public class Serv {
|
||||||
|
|
||||||
protected RadarServer server;
|
protected RadarServer server;
|
||||||
|
@ -237,9 +249,6 @@ public class Serv {
|
||||||
MutableConfiguration mc = (MutableConfiguration) config;
|
MutableConfiguration mc = (MutableConfiguration) config;
|
||||||
boolean result = mc.setGlobalConfig(global);
|
boolean result = mc.setGlobalConfig(global);
|
||||||
|
|
||||||
ConfigEvent ev = new ConfigEvent();
|
|
||||||
server.handleConfigEvent(ev);
|
|
||||||
|
|
||||||
if (result)
|
if (result)
|
||||||
return null;
|
return null;
|
||||||
else
|
else
|
||||||
|
@ -251,12 +260,8 @@ public class Serv {
|
||||||
if (! (config instanceof MutableConfiguration))
|
if (! (config instanceof MutableConfiguration))
|
||||||
return "The RadarServer's current configuration system does not support live changes.";
|
return "The RadarServer's current configuration system does not support live changes.";
|
||||||
MutableConfiguration mc = (MutableConfiguration) config;
|
MutableConfiguration mc = (MutableConfiguration) config;
|
||||||
RadarConfig oldConfig = config.getConfigForRadar(rc.getRadarID());
|
|
||||||
boolean result = mc.setRadarConfig(rc);
|
boolean result = mc.setRadarConfig(rc);
|
||||||
|
|
||||||
ConfigEvent ev = new ConfigEvent(rc.getRadarID(), oldConfig, rc);
|
|
||||||
server.handleConfigEvent(ev);
|
|
||||||
|
|
||||||
if (result)
|
if (result)
|
||||||
return null;
|
return null;
|
||||||
else
|
else
|
||||||
|
@ -288,4 +293,16 @@ public class Serv {
|
||||||
server.getConnectionManager().sendMessageToRadar(radarID, message);
|
server.getConnectionManager().sendMessageToRadar(radarID, message);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String sendConfigFile(String fileName, byte[] fileData) {
|
||||||
|
Configuration config = server.getConfiguration();
|
||||||
|
if (! (config instanceof MutableConfiguration))
|
||||||
|
return "The RadarServer's current configuration system does not support live changes.";
|
||||||
|
MutableConfiguration mc = (MutableConfiguration) config;
|
||||||
|
boolean result = mc.storeConfigFile(fileName, fileData);
|
||||||
|
if (result)
|
||||||
|
return null;
|
||||||
|
else
|
||||||
|
return "Error updating configuration.";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,7 @@ import org.itadaki.bzip2.BZip2InputStream;
|
||||||
import com.raytheon.rcm.config.EndpointConfig;
|
import com.raytheon.rcm.config.EndpointConfig;
|
||||||
import com.raytheon.rcm.config.awips1.Awips1ProdDistInfoBuilder;
|
import com.raytheon.rcm.config.awips1.Awips1ProdDistInfoBuilder;
|
||||||
import com.raytheon.rcm.event.ConfigEvent;
|
import com.raytheon.rcm.event.ConfigEvent;
|
||||||
|
import com.raytheon.rcm.event.ConfigEvent.Category;
|
||||||
import com.raytheon.rcm.event.RadarEvent;
|
import com.raytheon.rcm.event.RadarEvent;
|
||||||
import com.raytheon.rcm.event.RadarEventAdapter;
|
import com.raytheon.rcm.event.RadarEventAdapter;
|
||||||
import com.raytheon.rcm.message.GraphicProduct;
|
import com.raytheon.rcm.message.GraphicProduct;
|
||||||
|
@ -60,6 +61,19 @@ import com.raytheon.rcm.products.RadarProduct.Param;
|
||||||
import com.raytheon.rcm.server.Log;
|
import com.raytheon.rcm.server.Log;
|
||||||
import com.raytheon.rcm.server.RadarServer;
|
import com.raytheon.rcm.server.RadarServer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores radar messages in a directory structure and notifies EDEX via JMS.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* ...
|
||||||
|
* 2014-02-03 DR 14762 D. Friedman Refactor config events.
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
*/
|
||||||
public class DataArchiveEndpoint extends RadarEventAdapter {
|
public class DataArchiveEndpoint extends RadarEventAdapter {
|
||||||
private RadarServer radarServer;
|
private RadarServer radarServer;
|
||||||
|
|
||||||
|
@ -638,7 +652,7 @@ public class DataArchiveEndpoint extends RadarEventAdapter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleConfigEvent(ConfigEvent event) {
|
public void handleConfigEvent(ConfigEvent event) {
|
||||||
if (event.getRadarID() == null)
|
if (event.getCategory() == Category.GLOBAL_CONFIG)
|
||||||
updateConfig();
|
updateConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,9 @@ import com.raytheon.rcm.config.RadarType;
|
||||||
import com.raytheon.rcm.config.StandardProductDistInfoDB;
|
import com.raytheon.rcm.config.StandardProductDistInfoDB;
|
||||||
import com.raytheon.rcm.config.Util;
|
import com.raytheon.rcm.config.Util;
|
||||||
import com.raytheon.rcm.config.awips1.Awips1RpsListUtil;
|
import com.raytheon.rcm.config.awips1.Awips1RpsListUtil;
|
||||||
|
import com.raytheon.rcm.event.ConfigEvent;
|
||||||
|
import com.raytheon.rcm.event.ConfigEvent.Category;
|
||||||
|
import com.raytheon.rcm.event.RadarEventListener;
|
||||||
import com.raytheon.rcm.message.GSM;
|
import com.raytheon.rcm.message.GSM;
|
||||||
import com.raytheon.rcm.message.GraphicProduct.PDB;
|
import com.raytheon.rcm.message.GraphicProduct.PDB;
|
||||||
import com.raytheon.rcm.request.RpsList;
|
import com.raytheon.rcm.request.RpsList;
|
||||||
|
@ -49,6 +52,20 @@ import com.raytheon.rcm.request.RpsXml;
|
||||||
import com.raytheon.rcm.server.Log;
|
import com.raytheon.rcm.server.Log;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the standard configuration model of the AWIPS 2 RadarServer.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* ...
|
||||||
|
* 2014-02-03 DR 14762 D. Friedman Handle updated NDM config files.
|
||||||
|
* Send configuration events.
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
*/
|
||||||
public class StandardConfig implements Configuration, MutableConfiguration {
|
public class StandardConfig implements Configuration, MutableConfiguration {
|
||||||
|
|
||||||
final String generalPropBase = "com.raytheon.rcm";
|
final String generalPropBase = "com.raytheon.rcm";
|
||||||
|
@ -58,6 +75,7 @@ public class StandardConfig implements Configuration, MutableConfiguration {
|
||||||
private StandardConfigProvider provider;
|
private StandardConfigProvider provider;
|
||||||
private HashMap<String, RadarConfig> radars = new HashMap<String, RadarConfig>();
|
private HashMap<String, RadarConfig> radars = new HashMap<String, RadarConfig>();
|
||||||
private StandardProductDistInfoDB prodDistInfoDB = new StandardProductDistInfoDB();
|
private StandardProductDistInfoDB prodDistInfoDB = new StandardProductDistInfoDB();
|
||||||
|
private RadarEventListener configurationEventTarget;
|
||||||
|
|
||||||
private int regionCodeFromWmoSiteInfo;
|
private int regionCodeFromWmoSiteInfo;
|
||||||
|
|
||||||
|
@ -88,11 +106,20 @@ public class StandardConfig implements Configuration, MutableConfiguration {
|
||||||
return prodDistInfoDB;
|
return prodDistInfoDB;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setProdDistInfoDB(StandardProductDistInfoDB prodDistInfoDB) {
|
||||||
|
this.prodDistInfoDB = prodDistInfoDB;
|
||||||
|
if (configurationEventTarget != null) {
|
||||||
|
ConfigEvent ev = new ConfigEvent(Category.PROD_DISTRIBUTION);
|
||||||
|
configurationEventTarget.handleConfigEvent(ev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProductDistributionInfo getProductDistInfo(String radarID, PDB pdb) {
|
public ProductDistributionInfo getProductDistInfo(String radarID, PDB pdb) {
|
||||||
RadarConfig rc = getConfigForRadar(radarID);
|
RadarConfig rc = getConfigForRadar(radarID);
|
||||||
if (prodDistInfoDB != null && rc != null)
|
StandardProductDistInfoDB db = prodDistInfoDB;
|
||||||
return prodDistInfoDB.getProductDistInfo(rc, pdb.productCode, pdb);
|
if (db != null && rc != null)
|
||||||
|
return db.getProductDistInfo(rc, pdb.productCode, pdb);
|
||||||
else
|
else
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -101,8 +128,9 @@ public class StandardConfig implements Configuration, MutableConfiguration {
|
||||||
public ProductDistributionInfo getProductDistInfo(String radarID,
|
public ProductDistributionInfo getProductDistInfo(String radarID,
|
||||||
int messageCode) {
|
int messageCode) {
|
||||||
RadarConfig rc = getConfigForRadar(radarID);
|
RadarConfig rc = getConfigForRadar(radarID);
|
||||||
if (prodDistInfoDB != null && rc != null)
|
StandardProductDistInfoDB db = prodDistInfoDB;
|
||||||
return prodDistInfoDB.getProductDistInfo(rc, messageCode, null);
|
if (db != null && rc != null)
|
||||||
|
return db.getProductDistInfo(rc, messageCode, null);
|
||||||
else
|
else
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -299,6 +327,10 @@ public class StandardConfig implements Configuration, MutableConfiguration {
|
||||||
|
|
||||||
void setRegionCodeFromWmoSiteInfo(int regionCodeFromWmoSiteInfo) {
|
void setRegionCodeFromWmoSiteInfo(int regionCodeFromWmoSiteInfo) {
|
||||||
this.regionCodeFromWmoSiteInfo = regionCodeFromWmoSiteInfo;
|
this.regionCodeFromWmoSiteInfo = regionCodeFromWmoSiteInfo;
|
||||||
|
/* There is currently no need to send a configuration event for this
|
||||||
|
* because the value is always queried from the configuration when
|
||||||
|
* it is used.
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Should not have to care about the opMode...
|
// TODO: Should not have to care about the opMode...
|
||||||
|
@ -349,7 +381,12 @@ public class StandardConfig implements Configuration, MutableConfiguration {
|
||||||
doc.regionCode = null;
|
doc.regionCode = null;
|
||||||
provider.updateRegionCode();
|
provider.updateRegionCode();
|
||||||
|
|
||||||
return saveConfig();
|
boolean result = saveConfig();
|
||||||
|
if (configurationEventTarget != null) {
|
||||||
|
ConfigEvent ev = new ConfigEvent(Category.GLOBAL_CONFIG);
|
||||||
|
configurationEventTarget.handleConfigEvent(ev);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean saveConfig() {
|
private boolean saveConfig() {
|
||||||
|
@ -386,7 +423,13 @@ public class StandardConfig implements Configuration, MutableConfiguration {
|
||||||
RadarConfig oldConfig = radars.get(rc.getRadarID());
|
RadarConfig oldConfig = radars.get(rc.getRadarID());
|
||||||
if (oldConfig != null) {
|
if (oldConfig != null) {
|
||||||
radars.put(rc.getRadarID(), rc);
|
radars.put(rc.getRadarID(), rc);
|
||||||
return saveConfig();
|
|
||||||
|
boolean result = saveConfig();
|
||||||
|
if (configurationEventTarget != null) {
|
||||||
|
ConfigEvent ev = new ConfigEvent(rc.getRadarID(), oldConfig, rc);
|
||||||
|
configurationEventTarget.handleConfigEvent(ev);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
} else {
|
} else {
|
||||||
Log.errorf("Attempt to change configuration of unknown radar '%s'", rc.getRadarID());
|
Log.errorf("Attempt to change configuration of unknown radar '%s'", rc.getRadarID());
|
||||||
return false;
|
return false;
|
||||||
|
@ -431,4 +474,25 @@ public class StandardConfig implements Configuration, MutableConfiguration {
|
||||||
return new FileInputStream(res.getDropInPath(name));
|
return new FileInputStream(res.getDropInPath(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*package*/ void notifyNationalRpsLists() {
|
||||||
|
if (configurationEventTarget != null) {
|
||||||
|
ConfigEvent ev = new ConfigEvent(Category.NATIONAL_RPS_LISTS);
|
||||||
|
configurationEventTarget.handleConfigEvent(ev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean storeConfigFile(String name, byte[] data) {
|
||||||
|
// Delegate to provider
|
||||||
|
return provider.storeNdmConfigFile(name, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RadarEventListener getConfigurationEventTarget() {
|
||||||
|
return configurationEventTarget;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConfigurationEventTarget(
|
||||||
|
RadarEventListener configurationEventTarget) {
|
||||||
|
this.configurationEventTarget = configurationEventTarget;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,9 +21,12 @@ package com.raytheon.rcm.config.std;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import javax.xml.bind.JAXBContext;
|
import javax.xml.bind.JAXBContext;
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
|
@ -40,8 +43,26 @@ import com.raytheon.rcm.config.awips1.Awips1ConfigProvider;
|
||||||
import com.raytheon.rcm.server.Log;
|
import com.raytheon.rcm.server.Log;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs (and potentially updates) a StandardConfig based on
|
||||||
|
* various configuration files.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* ...
|
||||||
|
* 2014-02-03 DR 14762 D. Friedman Handle updated NDM config files.
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
*/
|
||||||
public class StandardConfigProvider implements ConfigurationProvider {
|
public class StandardConfigProvider implements ConfigurationProvider {
|
||||||
|
|
||||||
|
private static String WSR_88D_PROD_LIST_NAME = "prodList.txt";
|
||||||
|
private static String TDWR__PROD_LIST_NAME = "tdwrProdList.txt";
|
||||||
|
private static String WMO_SITE_INFO_NAME = "wmoSiteInfo.txt";
|
||||||
|
|
||||||
private static JAXBContext jaxbContext;
|
private static JAXBContext jaxbContext;
|
||||||
private static Unmarshaller u;
|
private static Unmarshaller u;
|
||||||
private static Marshaller m;
|
private static Marshaller m;
|
||||||
|
@ -114,14 +135,19 @@ public class StandardConfigProvider implements ConfigurationProvider {
|
||||||
config.setRadars(radars);
|
config.setRadars(radars);
|
||||||
}
|
}
|
||||||
|
|
||||||
StandardProductDistInfoDB db = config.getProdDistInfoDB();
|
loadProdListDB();
|
||||||
tryAddProdList(db, false, "prodList.txt");
|
|
||||||
tryAddProdList(db, true, "tdwrProdList.txt");
|
|
||||||
|
|
||||||
updateRegionCode();
|
updateRegionCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ugh. Bleh. Duplicating code from Awips1ConfigProvider
|
private void loadProdListDB() {
|
||||||
|
StandardProductDistInfoDB db = new StandardProductDistInfoDB();
|
||||||
|
tryAddProdList(db, false, WSR_88D_PROD_LIST_NAME);
|
||||||
|
tryAddProdList(db, true, TDWR__PROD_LIST_NAME);
|
||||||
|
config.setProdDistInfoDB(db);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Duplicating code from Awips1ConfigProvider
|
||||||
protected static boolean skipComments(Scanner s) {
|
protected static boolean skipComments(Scanner s) {
|
||||||
try {
|
try {
|
||||||
s.skip("^\\s*(#|//).*$");
|
s.skip("^\\s*(#|//).*$");
|
||||||
|
@ -133,9 +159,9 @@ public class StandardConfigProvider implements ConfigurationProvider {
|
||||||
|
|
||||||
public void updateRegionCode() {
|
public void updateRegionCode() {
|
||||||
try {
|
try {
|
||||||
readWmoSiteInfo(res.getNdmFile("wmoSiteInfo.txt"));
|
readWmoSiteInfo(res.getNdmFile(WMO_SITE_INFO_NAME));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.errorf("Could not process wmoSiteInfo.txt: %s", e);
|
Log.errorf("Could not process %s.txt: %s", WMO_SITE_INFO_NAME, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,4 +235,43 @@ public class StandardConfigProvider implements ConfigurationProvider {
|
||||||
return new File(res.getPrivateDir(), "config.xml");
|
return new File(res.getPrivateDir(), "config.xml");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean storeNdmConfigFile(String name, byte[] data) {
|
||||||
|
File f = new File(name);
|
||||||
|
if (f.getParent() != null) {
|
||||||
|
Log.error("Attempt to store NDM config file with a specific directory: " + name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
File path = res.getDropInPath(name);
|
||||||
|
try {
|
||||||
|
FileOutputStream fos = new FileOutputStream(path);
|
||||||
|
try {
|
||||||
|
fos.write(data);
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
fos.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
Log.errorf("Failed to store NDM config file %s: %s", path, e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.eventf("Stored new version of NDM config %s.", name);
|
||||||
|
|
||||||
|
if (WSR_88D_PROD_LIST_NAME.equals(name) ||
|
||||||
|
TDWR__PROD_LIST_NAME.equals(name)) {
|
||||||
|
loadProdListDB();
|
||||||
|
} else if (WMO_SITE_INFO_NAME.equals(name)) {
|
||||||
|
updateRegionCode();
|
||||||
|
} else if (Pattern.matches("^rps-.*OP.*$", name)) {
|
||||||
|
config.notifyNationalRpsLists();
|
||||||
|
} else {
|
||||||
|
Log.warnf("No action taken for new %s. You may need to restart for changes to take affect.", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,8 @@ import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.ListIterator;
|
import java.util.ListIterator;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
import com.raytheon.rcm.config.Configuration;
|
import com.raytheon.rcm.config.Configuration;
|
||||||
import com.raytheon.rcm.config.EndpointConfig;
|
import com.raytheon.rcm.config.EndpointConfig;
|
||||||
|
@ -35,6 +35,7 @@ import com.raytheon.rcm.config.RadarConfig;
|
||||||
import com.raytheon.rcm.config.RadarType;
|
import com.raytheon.rcm.config.RadarType;
|
||||||
import com.raytheon.rcm.config.Util;
|
import com.raytheon.rcm.config.Util;
|
||||||
import com.raytheon.rcm.event.ConfigEvent;
|
import com.raytheon.rcm.event.ConfigEvent;
|
||||||
|
import com.raytheon.rcm.event.ConfigEvent.Category;
|
||||||
import com.raytheon.rcm.event.RadarEvent;
|
import com.raytheon.rcm.event.RadarEvent;
|
||||||
import com.raytheon.rcm.event.RadarEventAdapter;
|
import com.raytheon.rcm.event.RadarEventAdapter;
|
||||||
import com.raytheon.rcm.message.GSM;
|
import com.raytheon.rcm.message.GSM;
|
||||||
|
@ -69,6 +70,7 @@ import com.raytheon.rcm.server.StatusManager.RadarStatus;
|
||||||
* 2009-04-22 #1693 D. Friedman Initial checkin
|
* 2009-04-22 #1693 D. Friedman Initial checkin
|
||||||
* ...
|
* ...
|
||||||
* 2013-01-31 DR 15458 D. Friedman Explicitly handle UNSPECIFIED_VCP.
|
* 2013-01-31 DR 15458 D. Friedman Explicitly handle UNSPECIFIED_VCP.
|
||||||
|
* 2014-02-03 DR 14762 D. Friedman Handle updated national RPS lists.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -79,13 +81,11 @@ public class RPSListManager extends RadarEventAdapter {
|
||||||
|
|
||||||
RadarServer radarServer;
|
RadarServer radarServer;
|
||||||
|
|
||||||
HashMap<String, RpsList> immediateLists = new HashMap<String, RpsList>(); // TODO:
|
|
||||||
|
|
||||||
// on sendRpsList (not store), set. on (true) vcp change, remove. should
|
// on sendRpsList (not store), set. on (true) vcp change, remove. should
|
||||||
// persist...
|
// persist...
|
||||||
HashMap<String, RpsList> currentRpsLists = new HashMap<String, RpsList>();
|
ConcurrentHashMap<String, RpsList> currentRpsLists = new ConcurrentHashMap<String, RpsList>();
|
||||||
|
|
||||||
HashMap<String, Integer> currentVcps = new HashMap<String, Integer>();
|
ConcurrentHashMap<String, Integer> currentVcps = new ConcurrentHashMap<String, Integer>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates RadarServer should generate AWIPS 1 style RPS lists. There does
|
* Indicates RadarServer should generate AWIPS 1 style RPS lists. There does
|
||||||
|
@ -580,7 +580,21 @@ public class RPSListManager extends RadarEventAdapter {
|
||||||
&& newCfg.isDedicated()
|
&& newCfg.isDedicated()
|
||||||
&& (oldCfg.isCollectionEnabled() != newCfg
|
&& (oldCfg.isCollectionEnabled() != newCfg
|
||||||
.isCollectionEnabled())) {
|
.isCollectionEnabled())) {
|
||||||
String radarID = newCfg.getRadarID();
|
resetRpsListForRadar(newCfg);
|
||||||
|
}
|
||||||
|
} else if (event.getCategory() == Category.NATIONAL_RPS_LISTS) {
|
||||||
|
Configuration config = radarServer.getConfiguration();
|
||||||
|
for (String radarID : config.getConfiguredRadarList()) {
|
||||||
|
RadarConfig rc = config.getConfigForRadar(radarID);
|
||||||
|
if (rc.isCollectionEnabled()) {
|
||||||
|
resetRpsListForRadar(rc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resetRpsListForRadar(RadarConfig rc) {
|
||||||
|
String radarID = rc.getRadarID();
|
||||||
RadarStatus status = radarServer.getStatusManager()
|
RadarStatus status = radarServer.getStatusManager()
|
||||||
.getRadarStatus(radarID);
|
.getRadarStatus(radarID);
|
||||||
byte[] gsmData = null;
|
byte[] gsmData = null;
|
||||||
|
@ -589,7 +603,7 @@ public class RPSListManager extends RadarEventAdapter {
|
||||||
currentVcps.remove(radarID);
|
currentVcps.remove(radarID);
|
||||||
currentRpsLists.remove(radarID);
|
currentRpsLists.remove(radarID);
|
||||||
if (gsmData != null) {
|
if (gsmData != null) {
|
||||||
handleGSM(newCfg, gsmData);
|
handleGSM(rc, gsmData);
|
||||||
} else {
|
} else {
|
||||||
Log.debugf(
|
Log.debugf(
|
||||||
"RPS-relevant configuration changed for %s, but "
|
"RPS-relevant configuration changed for %s, but "
|
||||||
|
@ -597,6 +611,4 @@ public class RPSListManager extends RadarEventAdapter {
|
||||||
radarID);
|
radarID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ import java.nio.ByteBuffer;
|
||||||
import org.itadaki.bzip2.BZip2InputStream;
|
import org.itadaki.bzip2.BZip2InputStream;
|
||||||
|
|
||||||
import com.raytheon.rcm.event.ConfigEvent;
|
import com.raytheon.rcm.event.ConfigEvent;
|
||||||
|
import com.raytheon.rcm.event.ConfigEvent.Category;
|
||||||
import com.raytheon.rcm.event.RadarEvent;
|
import com.raytheon.rcm.event.RadarEvent;
|
||||||
import com.raytheon.rcm.event.RadarEventAdapter;
|
import com.raytheon.rcm.event.RadarEventAdapter;
|
||||||
import com.raytheon.rcm.message.GraphicProduct;
|
import com.raytheon.rcm.message.GraphicProduct;
|
||||||
|
@ -38,9 +39,20 @@ import com.raytheon.rcm.message.Message;
|
||||||
import com.raytheon.rcm.message.MessageFormatException;
|
import com.raytheon.rcm.message.MessageFormatException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A radar server component that delivers radar products to an EDEX file
|
* <p>A radar server component that delivers radar products to an EDEX file
|
||||||
* endpoint.
|
* endpoint.
|
||||||
*/
|
*
|
||||||
|
* <p>This class is obsoleted by DataArchiveEndpoint.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* ...
|
||||||
|
* 2014-02-03 DR 14762 D. Friedman Refactor config events.
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
public class Awips2Endpoint extends RadarEventAdapter {
|
public class Awips2Endpoint extends RadarEventAdapter {
|
||||||
|
|
||||||
RadarServer radarServer;
|
RadarServer radarServer;
|
||||||
|
@ -152,7 +164,7 @@ public class Awips2Endpoint extends RadarEventAdapter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleConfigEvent(ConfigEvent event) {
|
public void handleConfigEvent(ConfigEvent event) {
|
||||||
if (event.getRadarID() == null)
|
if (event.getCategory() == Category.GLOBAL_CONFIG)
|
||||||
updateConfig();
|
updateConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ import com.raytheon.rcm.coll.Collector;
|
||||||
import com.raytheon.rcm.coll.RequestScheduler;
|
import com.raytheon.rcm.coll.RequestScheduler;
|
||||||
import com.raytheon.rcm.config.Configuration;
|
import com.raytheon.rcm.config.Configuration;
|
||||||
import com.raytheon.rcm.config.ConfigurationProvider;
|
import com.raytheon.rcm.config.ConfigurationProvider;
|
||||||
|
import com.raytheon.rcm.config.MutableConfiguration;
|
||||||
import com.raytheon.rcm.event.ConfigEvent;
|
import com.raytheon.rcm.event.ConfigEvent;
|
||||||
import com.raytheon.rcm.event.NotificationEvent;
|
import com.raytheon.rcm.event.NotificationEvent;
|
||||||
import com.raytheon.rcm.event.RadarEvent;
|
import com.raytheon.rcm.event.RadarEvent;
|
||||||
|
@ -38,6 +39,16 @@ import com.raytheon.rcm.rpsmgr.RPSListManager;
|
||||||
* Main class for the Radar Server.
|
* Main class for the Radar Server.
|
||||||
* <p>
|
* <p>
|
||||||
* This is a container class for the various components of the Radar Server.
|
* This is a container class for the various components of the Radar Server.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* ...
|
||||||
|
* 2014-02-03 DR 14762 D. Friedman Connect configuration's event target to
|
||||||
|
* the RadarServer instance.
|
||||||
|
* </pre>
|
||||||
*/
|
*/
|
||||||
public class RadarServer implements RadarEventListener {
|
public class RadarServer implements RadarEventListener {
|
||||||
// protected ConfigurationProvider configurationProvider;
|
// protected ConfigurationProvider configurationProvider;
|
||||||
|
@ -97,6 +108,9 @@ public class RadarServer implements RadarEventListener {
|
||||||
connectionManager = new ConnectionManagerImpl(this, linkManager);
|
connectionManager = new ConnectionManagerImpl(this, linkManager);
|
||||||
addListener(connectionManager);
|
addListener(connectionManager);
|
||||||
// connectionManager =
|
// connectionManager =
|
||||||
|
if (configuration instanceof MutableConfiguration) {
|
||||||
|
((MutableConfiguration) configuration).setConfigurationEventTarget(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addDefaultListeners() {
|
public void addDefaultListeners() {
|
||||||
|
|
|
@ -17,7 +17,8 @@ Require-Bundle: com.raytheon.uf.common.localization;bundle-version="1.11.24",
|
||||||
com.raytheon.uf.common.serialization.comm;bundle-version="1.12.1174",
|
com.raytheon.uf.common.serialization.comm;bundle-version="1.12.1174",
|
||||||
com.raytheon.uf.common.gridcoverage;bundle-version="1.0.0",
|
com.raytheon.uf.common.gridcoverage;bundle-version="1.0.0",
|
||||||
com.raytheon.uf.common.dataplugin.level;bundle-version="1.12.1174",
|
com.raytheon.uf.common.dataplugin.level;bundle-version="1.12.1174",
|
||||||
org.itadaki.bzip2;bundle-version="0.9.1"
|
org.itadaki.bzip2;bundle-version="0.9.1",
|
||||||
|
com.raytheon.uf.common.site;bundle-version="1.12.1174"
|
||||||
Import-Package: com.raytheon.uf.common.dataplugin.radar,
|
Import-Package: com.raytheon.uf.common.dataplugin.radar,
|
||||||
com.raytheon.uf.common.dataplugin.radar.request,
|
com.raytheon.uf.common.dataplugin.radar.request,
|
||||||
com.raytheon.uf.common.ohd
|
com.raytheon.uf.common.ohd
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
package com.raytheon.edex.rpgenvdata.ndm;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import com.raytheon.edex.rpgenvdata.RcmClient;
|
||||||
|
import com.raytheon.rcm.mqsrvr.ReqObj.SendConfigFile;
|
||||||
|
import com.raytheon.uf.common.site.ingest.INationalDatasetSubscriber;
|
||||||
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
|
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
|
import com.raytheon.uf.common.util.FileUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends NDM configuration files to the RadarServer.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* 2014-02-03 DR 14762 D. Friedman Created.
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class RadarServerNdmSubscriber implements INationalDatasetSubscriber {
|
||||||
|
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||||
|
.getHandler(RadarServerNdmSubscriber.class);
|
||||||
|
|
||||||
|
// TODO: duplicate..
|
||||||
|
private class MyRcmClient extends RcmClient {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(String detail, Exception e) {
|
||||||
|
statusHandler.handle(Priority.SIGNIFICANT, detail, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void notify(String fileName, File file) {
|
||||||
|
MyRcmClient rcmClient = null;
|
||||||
|
try {
|
||||||
|
try {
|
||||||
|
rcmClient = new MyRcmClient();
|
||||||
|
rcmClient.initialize();
|
||||||
|
SendConfigFile req = new SendConfigFile();
|
||||||
|
req.fileName = file.getName();
|
||||||
|
req.fileData = FileUtil.file2bytes(file);
|
||||||
|
rcmClient.sendCheckedAndHandled(req);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO: maybe rely on caller exception handling?
|
||||||
|
rcmClient = null;
|
||||||
|
statusHandler.handle(Priority.SIGNIFICANT,
|
||||||
|
"Error initializing RadarServer connection", e);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (rcmClient != null)
|
||||||
|
rcmClient.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -44,6 +44,8 @@
|
||||||
<bean id="radarMenuCreator" class="com.raytheon.edex.plugin.radar.util.RadarMenuUtil"/>
|
<bean id="radarMenuCreator" class="com.raytheon.edex.plugin.radar.util.RadarMenuUtil"/>
|
||||||
<bean id="import88dLocations" class="com.raytheon.edex.plugin.radar.util.Import88DLocationsUtil"/>
|
<bean id="import88dLocations" class="com.raytheon.edex.plugin.radar.util.Import88DLocationsUtil"/>
|
||||||
|
|
||||||
|
<bean id="radarServerNdmListener" class="com.raytheon.edex.rpgenvdata.ndm.RadarServerNdmSubscriber"/>
|
||||||
|
|
||||||
<bean id="marineInfoListener" class="com.raytheon.uf.edex.site.ingest.MarineInfoSubscriber">
|
<bean id="marineInfoListener" class="com.raytheon.uf.edex.site.ingest.MarineInfoSubscriber">
|
||||||
<constructor-arg value="${db.port}" />
|
<constructor-arg value="${db.port}" />
|
||||||
<constructor-arg value="${edex.home}" />
|
<constructor-arg value="${edex.home}" />
|
||||||
|
@ -181,4 +183,28 @@
|
||||||
<constructor-arg value="afosMasterPIL.txt" />
|
<constructor-arg value="afosMasterPIL.txt" />
|
||||||
<constructor-arg ref="afosBrowserListener" />
|
<constructor-arg ref="afosBrowserListener" />
|
||||||
</bean>
|
</bean>
|
||||||
|
<bean factory-bean="ndmProc" factory-method="registerListener">
|
||||||
|
<constructor-arg value="prodList.txt" />
|
||||||
|
<constructor-arg ref="radarServerNdmListener" />
|
||||||
|
</bean>
|
||||||
|
<bean factory-bean="ndmProc" factory-method="registerListener">
|
||||||
|
<constructor-arg value="tdwrProdList.txt" />
|
||||||
|
<constructor-arg ref="radarServerNdmListener" />
|
||||||
|
</bean>
|
||||||
|
<bean factory-bean="ndmProc" factory-method="registerListener">
|
||||||
|
<constructor-arg value="rps-RPGOP-tcp.clear-air" />
|
||||||
|
<constructor-arg ref="radarServerNdmListener" />
|
||||||
|
</bean>
|
||||||
|
<bean factory-bean="ndmProc" factory-method="registerListener">
|
||||||
|
<constructor-arg value="rps-RPGOP-tcp.storm" />
|
||||||
|
<constructor-arg ref="radarServerNdmListener" />
|
||||||
|
</bean>
|
||||||
|
<bean factory-bean="ndmProc" factory-method="registerListener">
|
||||||
|
<constructor-arg value="rps-SPGOP-tcp.storm" />
|
||||||
|
<constructor-arg ref="radarServerNdmListener" />
|
||||||
|
</bean>
|
||||||
|
<bean factory-bean="ndmProc" factory-method="registerListener">
|
||||||
|
<constructor-arg value="wmoSiteInfo.txt" />
|
||||||
|
<constructor-arg ref="radarServerNdmListener" />
|
||||||
|
</bean>
|
||||||
</beans>
|
</beans>
|
||||||
|
|
Loading…
Add table
Reference in a new issue