1010import ml .comet .experiment .impl .utils .JsonUtils ;
1111import ml .comet .experiment .model .AddExperimentTagsRest ;
1212import ml .comet .experiment .model .AddGraphRest ;
13- import ml .comet .experiment .model .GitMetadata ;
13+ import ml .comet .experiment .model .CreateExperimentRequest ;
14+ import ml .comet .experiment .model .CreateExperimentResponse ;
1415import ml .comet .experiment .model .ExperimentAssetListResponse ;
1516import ml .comet .experiment .model .ExperimentMetadataRest ;
1617import ml .comet .experiment .model .ExperimentStatusResponse ;
2122import ml .comet .experiment .model .GetOutputResponse ;
2223import ml .comet .experiment .model .GetProjectsResponse ;
2324import ml .comet .experiment .model .GetWorkspacesResponse ;
25+ import ml .comet .experiment .model .GitMetadata ;
2426import ml .comet .experiment .model .GitMetadataRest ;
2527import ml .comet .experiment .model .HtmlRest ;
2628import ml .comet .experiment .model .LogDataResponse ;
3436import java .util .Collections ;
3537import java .util .HashMap ;
3638import java .util .Map ;
37- import java .util .Optional ;
3839
3940import static ml .comet .experiment .impl .constants .ApiEndpoints .ADD_GIT_METADATA ;
4041import static ml .comet .experiment .impl .constants .ApiEndpoints .ADD_GRAPH ;
5657import static ml .comet .experiment .impl .constants .ApiEndpoints .GET_OUTPUT ;
5758import static ml .comet .experiment .impl .constants .ApiEndpoints .GET_PARAMETERS ;
5859import static ml .comet .experiment .impl .constants .ApiEndpoints .GET_TAGS ;
60+ import static ml .comet .experiment .impl .constants .ApiEndpoints .NEW_EXPERIMENT ;
5961import static ml .comet .experiment .impl .constants .ApiEndpoints .PROJECTS ;
6062import static ml .comet .experiment .impl .constants .ApiEndpoints .SET_EXPERIMENT_STATUS ;
6163import static ml .comet .experiment .impl .constants .ApiEndpoints .WORKSPACES ;
@@ -78,113 +80,118 @@ final class RestApiClient implements Disposable {
7880 }
7981
8082 Single <GetWorkspacesResponse > getAllWorkspaces () {
81- return singleGetResponse (WORKSPACES , Collections .emptyMap (), GetWorkspacesResponse .class );
83+ return singleFromSyncGet (WORKSPACES , Collections .emptyMap (), GetWorkspacesResponse .class );
8284 }
8385
8486 Single <GetProjectsResponse > getAllProjects (String workspaceName ) {
85- return singleGetResponse (
87+ return singleFromSyncGet (
8688 PROJECTS , Collections .singletonMap (WORKSPACE_NAME , workspaceName ), GetProjectsResponse .class );
8789 }
8890
8991 Single <GetExperimentsResponse > getAllExperiments (String projectId ) {
90- return singleGetResponse (
92+ return singleFromSyncGet (
9193 EXPERIMENTS , Collections .singletonMap (PROJECT_ID , projectId ), GetExperimentsResponse .class );
9294 }
9395
9496 Single <ExperimentMetadataRest > getMetadata (String experimentKey ) {
95- return singleGetForExperiment (GET_METADATA , experimentKey , ExperimentMetadataRest .class );
97+ return singleFromSyncGet (GET_METADATA , experimentKey , ExperimentMetadataRest .class );
9698 }
9799
98100 Single <GitMetadataRest > getGitMetadata (String experimentKey ) {
99- return singleGetForExperiment (GET_GIT_METADATA , experimentKey , GitMetadataRest .class );
101+ return singleFromSyncGet (GET_GIT_METADATA , experimentKey , GitMetadataRest .class );
100102 }
101103
102104 Single <GetHtmlResponse > getHtml (String experimentKey ) {
103- return singleGetForExperiment (GET_HTML , experimentKey , GetHtmlResponse .class );
105+ return singleFromSyncGet (GET_HTML , experimentKey , GetHtmlResponse .class );
104106 }
105107
106108 Single <GetOutputResponse > getOutput (String experimentKey ) {
107- return singleGetForExperiment (GET_OUTPUT , experimentKey , GetOutputResponse .class );
109+ return singleFromSyncGet (GET_OUTPUT , experimentKey , GetOutputResponse .class );
108110 }
109111
110112 Single <GetGraphResponse > getGraph (String experimentKey ) {
111- return singleGetForExperiment (GET_GRAPH , experimentKey , GetGraphResponse .class );
113+ return singleFromSyncGet (GET_GRAPH , experimentKey , GetGraphResponse .class );
112114 }
113115
114116 Single <MinMaxResponse > getParameters (String experimentKey ) {
115- return singleGetForExperiment (GET_PARAMETERS , experimentKey , MinMaxResponse .class );
117+ return singleFromSyncGet (GET_PARAMETERS , experimentKey , MinMaxResponse .class );
116118 }
117119
118120 Single <MinMaxResponse > getMetrics (String experimentKey ) {
119- return singleGetForExperiment (GET_METRICS , experimentKey , MinMaxResponse .class );
121+ return singleFromSyncGet (GET_METRICS , experimentKey , MinMaxResponse .class );
120122 }
121123
122124 Single <MinMaxResponse > getLogOther (String experimentKey ) {
123- return singleGetForExperiment (GET_LOG_OTHER , experimentKey , MinMaxResponse .class );
125+ return singleFromSyncGet (GET_LOG_OTHER , experimentKey , MinMaxResponse .class );
124126 }
125127
126128 Single <TagsResponse > getTags (String experimentKey ) {
127- return singleGetForExperiment (GET_TAGS , experimentKey , TagsResponse .class );
129+ return singleFromSyncGet (GET_TAGS , experimentKey , TagsResponse .class );
128130 }
129131
130132 Single <ExperimentAssetListResponse > getAssetList (String experimentKey , AssetType type ) {
131133 HashMap <QueryParamName , String > params = new HashMap <QueryParamName , String >() {{
132134 put (EXPERIMENT_KEY , experimentKey );
133135 put (TYPE , type .type ());
134136 }};
135- return singleGetResponse (GET_ASSET_INFO , params , ExperimentAssetListResponse .class );
137+ return singleFromSyncGet (GET_ASSET_INFO , params , ExperimentAssetListResponse .class );
136138 }
137139
138140 Single <ExperimentStatusResponse > sendExperimentStatus (String experimentKey ) {
139- return singleGetForExperiment (SET_EXPERIMENT_STATUS , experimentKey , ExperimentStatusResponse .class );
141+ return singleFromSyncGet (SET_EXPERIMENT_STATUS , experimentKey , ExperimentStatusResponse .class );
140142 }
141143
142144 Single <LogDataResponse > logMetric (final MetricRest request , String experimentKey ) {
143145 request .setExperimentKey (experimentKey );
144- return singleFromPost (request , ADD_METRIC , LogDataResponse .class );
146+ return singleFromAsyncPost (request , ADD_METRIC , LogDataResponse .class );
145147 }
146148
147149 Single <LogDataResponse > logParameter (final ParameterRest request , String experimentKey ) {
148150 request .setExperimentKey (experimentKey );
149- return singleFromPost (request , ADD_PARAMETER , LogDataResponse .class );
151+ return singleFromAsyncPost (request , ADD_PARAMETER , LogDataResponse .class );
150152 }
151153
152154 Single <LogDataResponse > logOutputLine (final OutputUpdate request , String experimentKey ) {
153155 request .setExperimentKey (experimentKey );
154- return singleFromPost (request , ADD_OUTPUT , LogDataResponse .class );
156+ return singleFromAsyncPost (request , ADD_OUTPUT , LogDataResponse .class );
155157 }
156158
157159 Single <LogDataResponse > logHtml (final HtmlRest request , String experimentKey ) {
158160 request .setExperimentKey (experimentKey );
159- return singleFromPost (request , ADD_HTML , LogDataResponse .class );
161+ return singleFromAsyncPost (request , ADD_HTML , LogDataResponse .class );
160162 }
161163
162164 Single <LogDataResponse > logOther (final LogOtherRest request , String experimentKey ) {
163165 request .setExperimentKey (experimentKey );
164- return singleFromPost (request , ADD_LOG_OTHER , LogDataResponse .class );
166+ return singleFromAsyncPost (request , ADD_LOG_OTHER , LogDataResponse .class );
165167 }
166168
167169 Single <LogDataResponse > addTag (final AddExperimentTagsRest request , String experimentKey ) {
168170 request .setExperimentKey (experimentKey );
169- return singleFromPost (request , ADD_TAG , LogDataResponse .class );
171+ return singleFromAsyncPost (request , ADD_TAG , LogDataResponse .class );
170172 }
171173
172174 Single <LogDataResponse > logGraph (final AddGraphRest request , String experimentKey ) {
173175 request .setExperimentKey (experimentKey );
174- return singleFromPost (request , ADD_GRAPH , LogDataResponse .class );
176+ return singleFromAsyncPost (request , ADD_GRAPH , LogDataResponse .class );
175177 }
176178
177179 Single <LogDataResponse > logStartEndTime (final ExperimentTimeRequest request , String experimentKey ) {
178180 request .setExperimentKey (experimentKey );
179- return singleFromPost (request , ADD_START_END_TIME , LogDataResponse .class );
181+ return singleFromAsyncPost (request , ADD_START_END_TIME , LogDataResponse .class );
180182 }
181183
182- Single <LogDataResponse >logGitMetadata (final GitMetadata request , String experimentKey ) {
184+ Single <LogDataResponse > logGitMetadata (final GitMetadata request , String experimentKey ) {
183185 request .setExperimentKey (experimentKey );
184- return singleFromPost (request , ADD_GIT_METADATA , LogDataResponse .class );
186+ return singleFromAsyncPost (request , ADD_GIT_METADATA , LogDataResponse .class );
187+ }
188+
189+ Single <CreateExperimentResponse > registerExperiment (final CreateExperimentRequest request ) {
190+ return singleFromSyncPost (request , NEW_EXPERIMENT , true , CreateExperimentResponse .class );
185191 }
186192
187- private <T > Single <T > singleFromPost (@ NonNull Object payload , @ NonNull String endpoint , @ NonNull Class <T > clazz ) {
193+ private <T > Single <T > singleFromAsyncPost (
194+ @ NonNull Object payload , @ NonNull String endpoint , @ NonNull Class <T > clazz ) {
188195 if (isDisposed ()) {
189196 return Single .error (ALREADY_DISPOSED );
190197 }
@@ -194,31 +201,39 @@ private <T> Single<T> singleFromPost(@NonNull Object payload, @NonNull String en
194201 .map (response -> JsonUtils .fromJson (response .getResponseBody (), clazz ));
195202 }
196203
197- private <T > Single <T > singleGetForExperiment (@ NonNull String endpoint ,
198- @ NonNull String experimentKey ,
199- @ NonNull Class <T > clazz ) {
200- return singleGetResponse (endpoint , Collections .singletonMap (EXPERIMENT_KEY , experimentKey ), clazz );
204+ private <T > Single <T > singleFromSyncPost (@ NonNull Object payload ,
205+ @ NonNull String endpoint ,
206+ boolean throwOnFailure ,
207+ @ NonNull Class <T > clazz ) {
208+ if (isDisposed ()) {
209+ return Single .error (ALREADY_DISPOSED );
210+ }
211+
212+ String request = JsonUtils .toJson (payload );
213+ return this .connection .sendPostWithRetries (request , endpoint , throwOnFailure )
214+ .map (body -> Single .just (JsonUtils .fromJson (body , clazz )))
215+ .orElse (Single .error (new CometApiException (
216+ String .format ("No response was returned by endpoint: %s" , endpoint ))));
201217 }
202218
203- private <T > Single <T > singleGetResponse (@ NonNull String endpoint ,
219+ private <T > Single <T > singleFromSyncGet (@ NonNull String endpoint ,
220+ @ NonNull String experimentKey ,
221+ @ NonNull Class <T > clazz ) {
222+ return singleFromSyncGet (endpoint , Collections .singletonMap (EXPERIMENT_KEY , experimentKey ), clazz );
223+ }
224+
225+ private <T > Single <T > singleFromSyncGet (@ NonNull String endpoint ,
204226 @ NonNull Map <QueryParamName , String > params ,
205227 @ NonNull Class <T > clazz ) {
206228 if (isDisposed ()) {
207229 return Single .error (ALREADY_DISPOSED );
208230 }
209- return optionalGetRestObject (endpoint , params , clazz )
210- .map (Single :: just )
231+ return this . connection . sendGetWithRetries (endpoint , params )
232+ .map (body -> Single . just ( JsonUtils . fromJson ( body , clazz )) )
211233 .orElse (Single .error (new CometApiException (
212234 String .format ("No response was returned by endpoint: %s" , endpoint ))));
213235 }
214236
215- private <T > Optional <T > optionalGetRestObject (@ NonNull String endpoint ,
216- @ NonNull Map <QueryParamName , String > params ,
217- @ NonNull Class <T > clazz ) {
218- return connection .sendGet (endpoint , params )
219- .map (body -> JsonUtils .fromJson (body , clazz ));
220- }
221-
222237 @ Override
223238 public void dispose () {
224239 this .disposed = true ;
0 commit comments