Commit ec2e097229d9f86122141aa18bba0b94dfb16b6d
Committed by
Andrew Shvayka
1 parent
90c84f84
UI: Add parse persistent RPC status for send RPC command
Showing
3 changed files
with
18 additions
and
29 deletions
... | ... | @@ -69,27 +69,11 @@ public class RpcV2Controller extends AbstractRpcController { |
69 | 69 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
70 | 70 | @RequestMapping(value = "/persistent/{rpcId}", method = RequestMethod.GET) |
71 | 71 | @ResponseBody |
72 | - public ResponseEntity<Rpc> getPersistedRpc(@PathVariable("rpcId") String strRpc) throws ThingsboardException { | |
72 | + public Rpc getPersistedRpc(@PathVariable("rpcId") String strRpc) throws ThingsboardException { | |
73 | 73 | checkParameter("RpcId", strRpc); |
74 | 74 | try { |
75 | 75 | RpcId rpcId = new RpcId(UUID.fromString(strRpc)); |
76 | - Rpc rpc = checkRpcId(rpcId, Operation.READ); | |
77 | - HttpStatus status; | |
78 | - switch (rpc.getStatus()) { | |
79 | - case FAILED: | |
80 | - status = HttpStatus.BAD_GATEWAY; | |
81 | - break; | |
82 | - case TIMEOUT: | |
83 | - status = HttpStatus.GATEWAY_TIMEOUT; | |
84 | - break; | |
85 | - case QUEUED: | |
86 | - case DELIVERED: | |
87 | - status = HttpStatus.ACCEPTED; | |
88 | - break; | |
89 | - default: | |
90 | - status = HttpStatus.OK; | |
91 | - } | |
92 | - return new ResponseEntity<>(rpc, status); | |
76 | + return checkRpcId(rpcId, Operation.READ); | |
93 | 77 | } catch (Exception e) { |
94 | 78 | throw handleException(e); |
95 | 79 | } | ... | ... |
... | ... | @@ -35,7 +35,7 @@ import { |
35 | 35 | LegendKeyData, |
36 | 36 | widgetType |
37 | 37 | } from '@app/shared/models/widget.models'; |
38 | -import { HttpErrorResponse, HttpResponse } from '@angular/common/http'; | |
38 | +import { HttpErrorResponse } from '@angular/common/http'; | |
39 | 39 | import { |
40 | 40 | calculateIntervalStartEndTime, |
41 | 41 | calculateTsOffset, |
... | ... | @@ -69,7 +69,7 @@ import { |
69 | 69 | } from '@shared/models/query/query.models'; |
70 | 70 | import { filter, map, switchMap, takeUntil } from 'rxjs/operators'; |
71 | 71 | import { AlarmDataListener } from '@core/api/alarm-data.service'; |
72 | -import { PersistentRpc } from '@shared/models/rpc.models'; | |
72 | +import { RpcStatus } from '@shared/models/rpc.models'; | |
73 | 73 | |
74 | 74 | const moment = moment_; |
75 | 75 | |
... | ... | @@ -710,8 +710,17 @@ export class WidgetSubscription implements IWidgetSubscription { |
710 | 710 | if (persistent && persistentPollingInterval > 0) { |
711 | 711 | return timer(persistentPollingInterval / 2, persistentPollingInterval).pipe( |
712 | 712 | switchMap(() => this.ctx.deviceService.getPersistedRpc(response.rpcId, true)), |
713 | - filter((persistentResponse: HttpResponse<PersistentRpc>) => persistentResponse.status !== 202), | |
714 | - map(persistentResponse => persistentResponse.body.response), | |
713 | + filter(persistentRespons => | |
714 | + persistentRespons.status !== RpcStatus.DELIVERED && persistentRespons.status !== RpcStatus.QUEUED), | |
715 | + switchMap(persistentResponse => { | |
716 | + if (persistentResponse.status === RpcStatus.TIMEOUT) { | |
717 | + return throwError({status: 504}); | |
718 | + } else if (persistentResponse.status === RpcStatus.FAILED) { | |
719 | + return throwError({status: 502, statusText: persistentResponse.response.error}); | |
720 | + } else { | |
721 | + return of(persistentResponse.response); | |
722 | + } | |
723 | + }), | |
715 | 724 | takeUntil(rpcSubject) |
716 | 725 | ); |
717 | 726 | } | ... | ... |
... | ... | @@ -17,7 +17,7 @@ |
17 | 17 | import { Injectable } from '@angular/core'; |
18 | 18 | import { defaultHttpOptionsFromConfig, RequestConfig } from './http-utils'; |
19 | 19 | import { Observable, ReplaySubject } from 'rxjs'; |
20 | -import { HttpClient, HttpResponse } from '@angular/common/http'; | |
20 | +import { HttpClient } from '@angular/common/http'; | |
21 | 21 | import { PageLink } from '@shared/models/page/page-link'; |
22 | 22 | import { PageData } from '@shared/models/page/page-data'; |
23 | 23 | import { |
... | ... | @@ -138,12 +138,8 @@ export class DeviceService { |
138 | 138 | return this.http.post<Device>(`/api/rpc/twoway/${deviceId}`, requestBody, defaultHttpOptionsFromConfig(config)); |
139 | 139 | } |
140 | 140 | |
141 | - public getPersistedRpc(rpcId: string, fullResponse = false, | |
142 | - config?: RequestConfig): Observable<PersistentRpc | HttpResponse<PersistentRpc>> { | |
143 | - return this.http.get<PersistentRpc>(`/api/rpc/persistent/${rpcId}`, { | |
144 | - ...defaultHttpOptionsFromConfig(config), | |
145 | - observe: fullResponse ? 'response' : undefined | |
146 | - }); | |
141 | + public getPersistedRpc(rpcId: string, fullResponse = false, config?: RequestConfig): Observable<PersistentRpc> { | |
142 | + return this.http.get<PersistentRpc>(`/api/rpc/persistent/${rpcId}`, defaultHttpOptionsFromConfig(config)); | |
147 | 143 | } |
148 | 144 | |
149 | 145 | public findByQuery(query: DeviceSearchQuery, | ... | ... |