88import org .springframework .stereotype .Component ;
99import org .springframework .web .reactive .function .client .WebClient ;
1010import org .springframework .web .util .UriComponentsBuilder ;
11+ import org .springframework .beans .factory .annotation .Value ;
1112import reactor .core .publisher .Mono ;
1213
1314import java .net .URI ;
2728public class ArchiverClient {
2829 private static final Logger logger = Logger .getLogger (ArchiverClient .class .getName ());
2930 private static final int STATUS_BATCH_SIZE = 100 ; // Limit comes from tomcat server maxHttpHeaderSize which by default is a header of size 8k
30- private static final List <String > AA_STATUS_ENDPOINT_ONLY_SUPPORT_QUERY_VERSION = List .of ("1.1.0" ,
31- "Before_JDK_12_Upgrade" ,
32- "v0.0.1_SNAPSHOT_03-November-2015" ,
33- "v0.0.1_SNAPSHOT_09-Oct-2018" ,
34- "v0.0.1_SNAPSHOT_10-June-2017" ,
35- "v0.0.1_SNAPSHOT_10-Sep-2015" ,
36- "v0.0.1_SNAPSHOT_12-May-2016" ,
37- "v0.0.1_SNAPSHOT_12-Oct-2016" ,
38- "v0.0.1_SNAPSHOT_13-Nov-2019" ,
39- "v0.0.1_SNAPSHOT_14-Jun-2018" ,
40- "v0.0.1_SNAPSHOT_15-Nov-2018" ,
41- "v0.0.1_SNAPSHOT_20-Sept-2016" ,
42- "v0.0.1_SNAPSHOT_22-June-2016" ,
43- "v0.0.1_SNAPSHOT_22-June-2017" ,
44- "v0.0.1_SNAPSHOT_23-Sep-2015" ,
45- "v0.0.1_SNAPSHOT_26-January-2016" ,
46- "v0.0.1_SNAPSHOT_27-Nov-2017" ,
47- "v0.0.1_SNAPSHOT_29-July-2015" ,
48- "v0.0.1_SNAPSHOT_30-March-2016" ,
49- "v0.0.1_SNAPSHOT_30-September-2021" );
5031
5132 private final WebClient client = WebClient .create ();
5233
@@ -55,23 +36,32 @@ public class ArchiverClient {
5536 private static final String PV_STATUS_RESOURCE = MGMT_RESOURCE + "/getPVStatus" ;
5637 private static final String ARCHIVER_VERSIONS_RESOURCE = MGMT_RESOURCE + "/getVersions" ;
5738 private static final ObjectMapper objectMapper = new ObjectMapper ();
58- private static final int TIMEOUT_SECONDS = 15 ;
39+
40+ @ Value ("${aa.timeout_seconds:15}" )
41+ private int timeoutSeconds ;
42+ @ Value ("${aa.post_support:}" )
43+ private List <String > postSupportArchivers ;
5944
6045 private Stream <List <String >> partitionSet (Set <String > pvSet , int pageSize ) {
6146 List <String > list = new ArrayList <>(pvSet );
6247 return IntStream .range (0 , (list .size () + pageSize - 1 ) / pageSize )
6348 .mapToObj (i -> list .subList (i * pageSize , Math .min (pageSize * (i + 1 ), list .size ())));
6449 }
6550
66- List <Map <String , String >> getStatuses (Map <String , ArchivePVOptions > archivePVS , String archiverURL , String archiverVersion ) throws JsonProcessingException {
51+ List <Map <String , String >> getStatuses (Map <String , ArchivePVOptions > archivePVS , String archiverURL , String archiverAlias ) {
6752 Set <String > pvs = archivePVS .keySet ();
68- if (AA_STATUS_ENDPOINT_ONLY_SUPPORT_QUERY_VERSION .contains (archiverVersion )) {
69-
53+ Boolean postSupportOverride = postSupportArchivers .contains (archiverAlias );
54+ logger .log (Level .INFO , "Archiver Alias: {0}" , archiverAlias );
55+ logger .log (Level .INFO , "Post Support Override Archivers: {0}" , postSupportArchivers );
56+
57+ if (Boolean .TRUE .equals (postSupportOverride )) {
58+ logger .log (Level .INFO , "Post Support" );
59+ return getStatusesFromPvListBody (archiverURL , pvs .stream ().toList ());
60+ } else {
61+ logger .log (Level .INFO , "Query Support" );
7062 Stream <List <String >> stream = partitionSet (pvs , STATUS_BATCH_SIZE );
7163
7264 return stream .map (pvList -> getStatusesFromPvListQuery (archiverURL , pvList )).flatMap (List ::stream ).toList ();
73- } else {
74- return getStatusesFromPvListBody (archiverURL , pvs .stream ().toList ());
7565 }
7666 }
7767
@@ -86,7 +76,7 @@ private List<Map<String, String>> getStatusesFromPvListQuery(String archiverURL,
8676 .uri (pvStatusURI )
8777 .retrieve ()
8878 .bodyToMono (String .class )
89- .timeout (Duration .of (TIMEOUT_SECONDS , ChronoUnit .SECONDS ))
79+ .timeout (Duration .of (timeoutSeconds , ChronoUnit .SECONDS ))
9080 .onErrorResume (e -> showError (uriString , e ))
9181 .block ();
9282
@@ -110,7 +100,7 @@ private List<Map<String, String>> getStatusesFromPvListBody(String archiverURL,
110100 .bodyValue (pvs )
111101 .retrieve ()
112102 .bodyToMono (String .class )
113- .timeout (Duration .of (TIMEOUT_SECONDS , ChronoUnit .SECONDS ))
103+ .timeout (Duration .of (timeoutSeconds , ChronoUnit .SECONDS ))
114104 .onErrorResume (e -> showError (uriString , e ))
115105 .block ();
116106
@@ -125,7 +115,7 @@ private List<Map<String, String>> getStatusesFromPvListBody(String archiverURL,
125115 } catch (JsonProcessingException e ) {
126116 logger .log (Level .WARNING , "Could not parse pv status response: " + e .getMessage ());
127117 } catch (Exception e ) {
128- logger .log (Level .WARNING , String .format ("Error when trying to get status from pv list query : %s" , e .getMessage ()));
118+ logger .log (Level .WARNING , String .format ("Error when trying to get status from pv list body : %s" , e .getMessage ()));
129119 }
130120 return List .of ();
131121 }
@@ -139,7 +129,7 @@ private void submitAction(String values, String endpoint, String aaURL) {
139129 .bodyValue (values )
140130 .retrieve ()
141131 .bodyToMono (String .class )
142- .timeout (Duration .of (TIMEOUT_SECONDS , ChronoUnit .SECONDS ))
132+ .timeout (Duration .of (timeoutSeconds , ChronoUnit .SECONDS ))
143133 .onErrorResume (e -> showError (uriString , e ))
144134 .block ();
145135 logger .log (Level .FINE , () -> response );
@@ -227,7 +217,7 @@ String getVersion(String archiverURL) {
227217 .uri (URI .create (uriString ))
228218 .retrieve ()
229219 .bodyToMono (String .class )
230- .timeout (Duration .of (TIMEOUT_SECONDS , ChronoUnit .SECONDS ))
220+ .timeout (Duration .of (timeoutSeconds , ChronoUnit .SECONDS ))
231221 .onErrorResume (e -> showError (uriString , e ))
232222 .block ();
233223 Map <String , String > versionMap = objectMapper .readValue (response , Map .class );
0 commit comments