Merge "Add monitor web page to Health Check test"
[nonrtric.git] / docs / policy-agent-api.rst
1 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
2 .. http://creativecommons.org/licenses/by/4.0
3 .. Copyright (C) 2020 Nordix
4
5 .. |nbsp| unicode:: 0xA0
6    :trim:
7
8 .. |nbh| unicode:: 0x2011
9    :trim:
10
11 .. _policy-agent-api:
12
13 ################################
14 A1 Policy Management Service API
15 ################################
16
17
18 *******************************************
19 A1 Policy Management Service - Introduction
20 *******************************************
21
22 The A1 Policy Management Service ("Policy Agent") is an SMO/NONRTRIC service above the NONRTRIC A1 Adapter/Controller
23 that provides:
24
25 * Unified REST & DMAAP APIs for managing A1 Policies in all Near |nbh| RT |nbsp| RICs
26 * Synchronized view of registered "services" (e.g. R-APP, GUI, etc)
27 * Synchronized view of policy instances for each "service"
28 * Synchronized view of policy instances in all Near |nbh| RT |nbsp| RICs
29 * Synchronized view of policy types in all Near |nbh| RT |nbsp| RICs
30 * Policy Query API (e.g. per Near |nbh| RT |nbsp| RIC, per "service", per policy type)
31 * An initial interface for unified Near |nbh| RT |nbsp| RIC ID to Near |nbh| RT |nbsp| RIC address mapping.
32   (Note:  may also later act as adapter to A&AI, CMDBs etc. to "find" Near |nbh| RT |nbsp| RICs - TBC)
33 * An Initial "O1 ManagedElement" mapping database & interface to find appropriate Near |nbh| RT |nbsp| RIC for RAN elements.
34   (Note: may also later act as adapter to A&AI, RuntimeDB, other CMDBs etc. - TBC)
35 * Monitors all Near |nbh| RT |nbsp| RICs and recovers from inconsistencies (Note: e.g. Near |nbh| RT |nbsp| RIC restarts)
36 * Support for different Southbound connectors on a per Near |nbh| RT |nbsp| RIC basis. (Note: e.g. different A1
37   versions, different Near |nbh| RT |nbsp| RIC versions, different A1 adapters, different or proprietary A1
38   controllers/EMSs)
39
40 ***************************************
41 A1 Policy Management Service - REST NBI
42 ***************************************
43
44 This is the north bound API of the A1 Policy Management Service ("Policy Agent"). This API allows *services* to interact
45 with the Policy Agent using REST.
46
47 By registering with the Policy Agent, the Policy Agent takes responsibility for synchronizing the policies created by
48 the service in the Near |nbh| RT |nbsp| RICs. This means that if a Near |nbh| RT |nbsp| RIC restarts, the Policy Agent
49 will try to recreate all the policies residing in the Near |nbh| RT |nbsp| RIC once it is started again. If this is not
50 possible, it will remove all policies belonging to the Near |nbh| RT |nbsp| RIC.
51
52 The Policy Agent also keeps an updated view of the policy types available, and which Near |nbh| RT |nbsp| RICs that
53 support which types. Also, the Policy Agent can tell if a Managed Element is managed by a certain
54 Near |nbh| RT |nbsp| RIC.
55
56 The Policy Agent NBI has five distinct parts, described in the sections below:
57
58 * Service Management
59 * Policy Types
60 * Policy Management
61 * Near-RT RIC Repository
62 * Health Check
63
64 ******************
65 Service Management
66 ******************
67
68 A service can register itself in the Policy Agent.
69
70 By providing a callback URL the service can get notifications from the Policy Agent.
71
72 A service can also register a "*Keep Alive Interval*", in seconds. By doing this the service promises to call the
73 Policy Agent's "*Keep Alive*" method, or else create or delete policies, more often than the "*Keep Alive Interval*"
74 measured in seconds. If the service, for some reason, is not able to do this, the Policy Agent will consider that the
75 service has died or vanished and will then delete all its policies, both in the internal repository and in the
76 Near |nbh| RT |nbsp| RICs where they were earlier created. **Note!** |nbsp| If the service does not provide a value for
77 "*Keep Alive Interval*", then the service maintains full responsibility to delete all of its policies when they are no
78 longer needed.
79
80 /service
81 ~~~~~~~~
82
83 PUT
84 +++
85
86 Register a service.
87
88 Definition
89 """"""""""
90
91 **URL path:**
92
93 /service
94
95 **Parameters:**
96
97 None.
98
99 **Body:**  (*Required*)
100
101 A JSON object (ServiceRegistrationInfo): ::
102
103   {
104     "callbackUrl": "string",         (An empty string means the service will never get any callbacks.)
105     "keepAliveIntervalSeconds": 0,   (0 means the service will always be considered alive.)
106     "serviceName": "string"          (Required, must be unique.)
107   }
108
109 **Responses:**
110
111 200:
112
113 Service updated.
114
115 201:
116
117 Service created.
118
119 400:
120
121 The ServiceRegistrationInfo is not accepted.
122
123 Examples
124 """"""""
125
126 **Call**: ::
127
128   curl -X PUT "http://localhost:8081/service" -H "Content-Type: application/json" -d '{
129       "callbackUrl": "URL",
130       "keepAliveIntervalSeconds": 0,
131       "serviceName": "existing"
132     }'
133
134 **Result**:
135
136 201: ::
137
138    OK
139
140 **Call**: ::
141
142    curl -X PUT "http://localhost:8081/service" -H  "Content-Type: application/json" -d "{}"
143
144 **Result**:
145
146 400: ::
147
148   Missing mandatory parameter 'serviceName'
149
150 /services
151 ~~~~~~~~~
152
153 GET
154 +++
155
156 Query service information.
157
158 Definition
159 """"""""""
160
161 **URL path:**
162
163 /services?name=<service-name>
164
165 **Parameters:**
166
167 name: (*Optional*)
168
169 The name of the service.
170
171 **Responses:**
172
173 200:
174
175 Array of JSON objects (ServiceStatus). ::
176
177   {
178     "callbackUrl": "string",             (Callback URL)
179     "keepAliveIntervalSeconds": 0,       (Policy keep alive interval)
180     "serviceName": "string",             (Identity of the service)
181     "timeSinceLastActivitySeconds": 0    (Time since last invocation by the service)
182   }
183
184 404:
185
186 Service is not found.
187
188 Examples
189 """"""""
190
191 **Call**: ::
192
193   curl -X GET "http://localhost:8081/services?name=existing"
194
195 **Result**:
196
197 200: ::
198
199   [
200     {
201       "serviceName":"existing",
202       "keepAliveIntervalSeconds":0,
203       "timeSinceLastActivitySeconds":7224,
204       "callbackUrl":"URL"
205     }
206   ]
207
208 **Call**: ::
209
210   curl -X GET "http://localhost:8081/services?name=nonexistent"
211
212 Result:
213
214 404: ::
215
216   Service not found
217
218 DELETE
219 ++++++
220
221 Delete a service.
222
223 Definition
224 """"""""""
225
226 **URL path:**
227
228 /services?name=<service-name>
229
230 **Parameters:**
231
232 name: (*Required*)
233
234 The name of the service.
235
236 **Responses:**
237
238 204:
239   OK
240
241 404:
242   Service not found.
243
244 Examples
245 """"""""
246
247 **Call**: ::
248
249   curl -X DELETE "http://localhost:8081/services?name=existing"
250
251 **Result**:
252
253 204: ::
254
255   OK
256
257 **Call**: ::
258
259   curl -X DELETE "http://localhost:8081/services?name=nonexistent"
260
261 Result:
262
263 404: ::
264
265   Could not find service: nonexistent
266
267 /services/keepalive
268 ~~~~~~~~~~~~~~~~~~~
269
270 PUT
271 +++
272
273 Heart beat from a service.
274
275 Definition
276 """"""""""
277
278 **URL path:**
279
280 /services/keepalive?name=<service-name>
281
282 **Parameters:**
283
284 name: (*Required*)
285
286 The name of the service.
287
288 **Responses:**
289
290 200:
291
292 OK
293
294 404:
295
296 Service is not found.
297
298 Examples
299 """"""""
300
301 **Call**: ::
302
303   curl -X PUT "http://localhost:8081/services/keepalive?name=existing"
304
305 **Result**:
306
307 200: ::
308
309   OK
310
311 **Call**: ::
312
313   curl -X PUT "http://localhost:8081/services/keepalive?name=nonexistent"
314
315 **Result**:
316
317 404: ::
318
319   Could not find service: nonexistent
320
321 .. _policy-management:
322
323 ************
324 Policy Types
325 ************
326
327 Policies are based on types. The set of available policy types is determined by the set of policy types supported by
328 Near |nbh| RT |nbsp| RICs. At startup, the Policy Agent queries all Near |nbh| RT |nbsp| RICs for their supported types
329 and stores them in its internal repository. It then checks this at regular intervals to keep the repository of types up
330 to date. Policy types cannot be created, updated or deleted using this interface since this must be done via the
331 Near |nbh| RT |nbsp| RICs.
332
333 A policy type defines a name and a JSON schema that constrains the content of a policy of that type.
334
335 /policy_types
336 ~~~~~~~~~~~~~
337
338 GET
339 +++
340
341 Query policy type names.
342
343 Definition
344 """"""""""
345
346 **URL path:**
347
348 /policy_types?ric=<name-of-ric>
349
350 **Parameters:**
351
352 ric: (*Optional*)
353
354 The name of the Near |nbh| RT |nbsp| RIC to get types for.
355
356 **Responses:**
357
358 200:
359
360   Array of policy type names.
361
362 404:
363
364   Near |nbh| RT |nbsp| RIC is not found.
365
366 Examples
367 """"""""
368
369 **Call**: ::
370
371   curl -X GET "http://localhost:8081/policy_types"
372
373 **Result**:
374
375 200: ::
376
377   [
378     "STD_PolicyModelUnconstrained_0.2.0",
379     "Example_QoETarget_1.0.0",
380     "ERIC_QoSNudging_0.2.0"
381   ]
382
383 **Call**: ::
384
385   curl -X GET "http://localhost:8081/policy_types?ric=nonexistent"
386
387 **Result**:
388
389 404: ::
390
391   org.oransc.policyagent.exceptions.ServiceException: Could not find ric: nonexistent
392
393 /policy_schema
394 ~~~~~~~~~~~~~~
395
396 GET
397 +++
398
399 Returns one policy type schema definition.
400
401 Definition
402 """"""""""
403
404 **URL path:**
405
406 /policy_schema?id=<name-of-type>
407
408 **Parameters:**
409
410 id: (*Required*)
411
412 The ID of the policy type to get the definition for.
413
414 **Responses:**
415
416 200:
417
418 Policy schema as JSON schema.
419
420 404:
421
422 Policy type is not found.
423
424 Examples
425 """"""""
426
427 **Call**: ::
428
429  curl -X GET "http://localhost:8081/policy_schema?id=STD_PolicyModelUnconstrained_0.2.0"
430
431 **Result**:
432
433 200: ::
434
435   {
436     "$schema": "http://json-schema.org/draft-07/schema#",
437     "title": "STD_PolicyModelUnconstrained_0.2.0",
438     "description": "Standard model of a policy with unconstrained scope id combinations",
439     "type": "object",
440     "properties": {
441      "scope": {
442         "type": "object",
443         "properties": {
444           "ueId": {"type": "string"},
445           "groupId": {"type": "string"}
446         },
447         "minProperties": 1,
448         "additionalProperties": false
449       },
450       "qosObjectives": {
451         "type": "object",
452         "properties": {
453           "gfbr": {"type": "number"},
454           "mfbr": {"type": "number"}
455         },
456         "additionalProperties": false
457       },
458       "resources": {
459         "type": "array",
460         "items": {
461           "type": "object",
462           "properties": {
463             "cellIdList": {
464               "type": "array",
465               "minItems": 1,
466               "uniqueItems": true,
467               "items": {
468                 "type": "string"
469               }
470             },
471           "additionalProperties": false,
472           "required": ["cellIdList"]
473         }
474       }
475     },
476     "minProperties": 1,
477     "additionalProperties": false,
478     "required": ["scope"]
479   }
480
481 **Call**: ::
482
483   curl -X GET "http://localhost:8081/policy_schema?id=nonexistent"
484
485 **Result**:
486
487 404: ::
488
489   org.oransc.policyagent.exceptions.ServiceException: Could not find type: nonexistent
490
491 /policy_schemas
492 ~~~~~~~~~~~~~~~
493
494 GET
495 +++
496
497 Returns policy type schema definitions.
498
499 Definition
500 """"""""""
501
502 **URL path:**
503
504 /policy_schemas?ric=<name-of-ric>
505
506 **Parameters:**
507
508 ric: (*Optional*)
509
510 The name of the Near |nbh| RT |nbsp| RIC to get the definitions for.
511
512 **Responses:**
513
514 200:
515
516 An array of policy schemas as JSON schemas.
517
518 404:
519
520 Near |nbh| RT |nbsp| RIC is not found.
521
522 Examples
523 """"""""
524
525 **Call**: ::
526
527   curl -X GET "http://localhost:8081/policy_schemas"
528
529 **Result**:
530
531 200: ::
532
533   [
534     {
535       "$schema": "http://json-schema.org/draft-07/schema#",
536       "title": "STD_PolicyModelUnconstrained_0.2.0",
537       "description": "Standard model of a policy with unconstrained scope id combinations",
538       "type": "object",
539       "properties": {
540         "scope": {
541           "type": "object",
542             .
543             .
544             .
545         }
546         "additionalProperties": false,
547         "required": ["scope"]
548       },
549         .
550         .
551         .
552       {
553         "$schema": "http://json-schema.org/draft-07/schema#",
554         "title": "Example_QoETarget_1.0.0",
555         "description": "Example QoE Target policy type",
556         "type": "object",
557           "properties": {
558             "scope": {
559               "type": "object",
560                 .
561                 .
562                 .
563             }
564             "additionalProperties": false,
565            "required": ["scope"]
566         }
567       }
568     }
569   ]
570
571 **Call**: ::
572
573   curl -X GET "http://localhost:8081/policy_schemas?ric=nonexistent"
574
575 **Result**:
576
577 404: ::
578
579   org.oransc.policyagent.exceptions.ServiceException: Could not find ric: nonexistent
580
581 *****************
582 Policy Management
583 *****************
584
585 Policies can be queried, created, updated, and deleted. A policy is always created in a specific
586 Near |nbh| RT |nbsp| RIC.
587
588 A policy is defined by its policy type schema.
589
590 When a policy is created, the Policy Agent stores information about it in its internal repository. At regular intervals,
591 it then checks with all Near |nbh| RT |nbsp| RICs that this repository is synchronized. If, for some reason, there is an
592 inconsistency, the Policy Agent will start a synchronization job and try to inconsistency, the Policy Agent will start a
593 synchronization job and try to reset the Near |nbh| RT |nbsp| RIC to its last-known-good status. If this fails, the
594 Policy Agent will clear all policies for the specific Near |nbh| RT |nbsp| RIC in the internal repository and set its
595 state to *UNKNOWN*. This means that no interaction with the Near |nbh| RT |nbsp| RIC is possible until the Policy Agent
596 has been able to contact it again and re-synchronize its state in the repository.
597
598 Once a service has created a policy, it is the service's responsibility to maintain its life cycle. When a Near |nbh| RT
599 |nbsp| RIC has been restarted, the Policy Agent will try to recreate policies in the Near |nbh| RT |nbsp| RIC according
600 to the policies maintained in its local repository.
601 This means that the service must delete any policies it has created.
602 A policy may be created as a "transient policy", whereby if this policy "disappears" at any stage it will not be
603 re-synchronized to the Near |nbh| RT |nbsp| RIC.
604 For example, this is useful if the policy should not survive a restart of the Near |nbh| RT |nbsp| RIC.
605 A non-transient policy will continue to be maintained in the Near |nbh| RT |nbsp| RIC until it is explicitly deleted
606 (or the service that created it fails to update its Keep Alive status).
607
608 There are some exceptions where policy instances are not re-synchronized after a Near |nbh| RT |nbsp| RIC restart or
609 when some inconsistency is identified:
610
611 - The service has registered a "*Keep Alive Interval*", but the service then fails to update its Keep Alive status.
612 - The Policy Agent completely fails to synchronize with a Near |nbh| RT |nbsp| RIC, as described above.
613 - Policies that are marked as transient policies.
614
615 /policies
616 ~~~~~~~~~
617
618 GET
619 +++
620
621 Query policies.
622
623 Definition
624 """"""""""
625
626 **URL path:**
627
628 /policies?ric=<name-of-ric>&service=<name-of-service>&type=<name-of-type>
629
630 **Parameters:**
631
632 ric: (*Optional*)
633
634 The name of the Near |nbh| RT |nbsp| RIC to get policies for.
635
636 service: (*Optional*)
637
638 The name of the service to get policies for.
639
640 type: (*Optional*)
641
642 The name of the policy type to get policies for.
643
644 **Responses:**
645
646 200:
647
648 Array of JSON objects (PolicyInfo). ::
649
650   {
651     "id": "string",              (Identity of the policy)
652     "json": "object",            (The configuration of the policy)
653     "lastModified": "string",    (Timestamp, last modification time)
654     "ric": "string",             (Identity of the target Near |nbh| RT |nbsp| RIC)
655     "service": "string",         (The name of the service owning the policy)
656     "type": "string"             (Name of the policy type)
657   }
658
659 404:
660   Near |nbh| RT |nbsp| RIC or policy type not found.
661
662 Examples
663 """"""""
664
665 **Call**: ::
666
667   curl -X GET "http://localhost:8081/policies?ric=existing"
668
669 **Result**:
670
671 200: ::
672
673   [
674     {
675       "id": "Policy 1",
676       "json": {
677         "scope": {
678           "ueId": "UE 1",
679           "groupId": "Group 1"
680         },
681         "qosObjectives": {
682           "gfbr": 1,
683           "mfbr": 2
684         },
685         "cellId": "Cell 1"
686       },
687       "lastModified": "Wed, 01 Apr 2020 07:45:45 GMT",
688       "ric": "existing",
689       "service": "Service 1",
690       "type": "STD_PolicyModelUnconstrained_0.2.0"
691     },
692     {
693       "id": "Policy 2",
694       "json": {
695           .
696           .
697           .
698       },
699       "lastModified": "Wed, 01 Apr 2020 07:45:45 GMT",
700       "ric": "existing",
701       "service": "Service 2",
702       "type": "Example_QoETarget_1.0.0"
703     }
704   ]
705
706 **Call**: ::
707
708   curl -X GET "http://localhost:8081/policies?type=nonexistent"
709
710 **Result**:
711
712 404: ::
713
714   Policy type not found
715
716 /policy
717 ~~~~~~~
718
719 GET
720 +++
721
722 Returns a policy configuration.
723
724 Definition
725 """"""""""
726
727 **URL path:**
728
729 /policy?id=<policy-id>
730
731 **Parameters:**
732
733 id: (*Required*)
734
735 The ID of the policy instance.
736
737 **Responses:**
738
739 200:
740
741 JSON object containing policy information. ::
742
743   {
744     "id": "string",                  (ID of policy)
745     "json": "object",                (JSON with policy data speified by the type)
746     "ownerServiceName": "string",    (Name of the service that created the policy)
747     "ric": "string",                 (Name of the Near |nbh| RT |nbsp| RIC where the policy resides)
748     "type": "string",                (Name of the policy type of the policy)
749     "lastModified"                   (Timestamp, last modification time)
750   }
751
752 404:
753
754 Policy is not found.
755
756 Examples
757 """"""""
758
759 **Call**: ::
760
761   curl -X GET "http://localhost:8081/policy?id=Policy 1"
762
763 **Result**:
764
765 200: ::
766
767   {
768     "id": "Policy 1",
769     "json", {
770       "scope": {
771         "ueId": "UE1 ",
772         "cellId": "Cell 1"
773       },
774       "qosObjectives": {
775         "gfbr": 319.5,
776         "mfbr": 782.75,
777         "priorityLevel": 268.5,
778         "pdb": 44.0
779       },
780       "qoeObjectives": {
781         "qoeScore": 329.0,
782         "initialBuffering": 27.75,
783         "reBuffFreq": 539.0,
784         "stallRatio": 343.0
785       },
786       "resources": []
787     },
788     "ownerServiceName": "Service 1",
789     "ric": "ric1",
790     "type": "STD_PolicyModelUnconstrained_0.2.0",
791     "lastModified": "Wed, 01 Apr 2020 07:45:45 GMT"
792   }
793
794 **Call**: ::
795
796   curl -X GET "http://localhost:8081/policy?id=nonexistent"
797
798 **Result**:
799
800 404: ::
801
802   Policy is not found
803
804 PUT
805 +++
806
807 Create/Update a policy. **Note!** Calls to this method will also trigger "*Keep Alive*" for a service which has a
808 "*Keep Alive Interval*" registered.
809
810 Definition
811 """"""""""
812
813 **URL path:**
814
815 /policy?id=<policy-id>&ric=<name-of-ric>&service=<name-of-service>&type=<name-of-policy-type>
816
817 **Parameters:**
818
819 id: (*Required*)
820
821 The ID of the policy instance.
822
823 ric: (*Required*)
824
825 The name of the Near |nbh| RT |nbsp| RIC where the policy will be created.
826
827 service: (*Required*)
828
829 The name of the service creating the policy.
830
831 transient: (*Optional*)
832
833 If the policy is transient or not (boolean defaulted to false).
834 A policy is transient if it will be forgotten when the service needs to reconnect to the Near |nbh| RT |nbsp| RIC.
835
836 type: (*Optional*)
837
838 The name of the policy type.
839
840 **Body:** (*Required*)
841
842 A JSON object containing the data specified by the type.
843
844 **Responses:**
845
846 200:
847
848 Policy updated.
849
850 201:
851
852 Policy created.
853
854 404:
855
856 Near |nbh| RT |nbsp| RIC or policy type is not found.
857
858 423:
859
860 Near |nbh| RT |nbsp| RIC is not operational.
861
862 Examples
863 """"""""
864
865 **Call**: ::
866
867   curl -X PUT "http://localhost:8081/policy?id=Policy%201&ric=ric1&service=Service%201&type=STD_PolicyModelUnconstrained_0.2.0"
868     -H  "Content-Type: application/json"
869     -d '{
870           "scope": {
871             "ueId": "UE 1",
872             "cellId": "Cell 1"
873           },
874           "qosObjectives": {
875             "gfbr": 319.5,
876             "mfbr": 782.75,
877             "priorityLevel": 268.5,
878             "pdb": 44.0
879           },
880           "qoeObjectives": {
881             "qoeScore": 329.0,
882             "initialBuffering": 27.75,
883             "reBuffFreq": 539.0,
884             "stallRatio": 343.0
885           },
886           "resources": []
887         }'
888
889 **Result**:
890
891 200
892
893 DELETE
894 ++++++
895
896 Deletes a policy. **Note!** Calls to this method will also trigger "*Keep Alive*" for a service which has a
897 "*Keep Alive Interval*" registered.
898
899 Definition
900 """"""""""
901
902 **URL path:**
903
904 /policy?id=<policy-id>
905
906 **Parameters:**
907
908 id: (*Required*)
909
910 The ID of the policy instance.
911
912 **Responses:**
913
914 204:
915
916 Policy deleted.
917
918 404:
919
920 Policy is not found.
921
922 423:
923
924 Near |nbh| RT |nbsp| RIC is not operational.
925
926 Examples
927 """"""""
928
929 **Call**: ::
930
931   curl -X DELETE "http://localhost:8081/policy?id=Policy 1"
932
933 **Result**:
934
935 204
936
937 /policy_ids
938 ~~~~~~~~~~~
939
940 GET
941 +++
942
943 Query policy type IDs.
944
945 Definition
946 """"""""""
947
948 **URL path:**
949
950 /policy_ids?ric=<name-of-ric>&service=<name-of-service>&type=<name-of-policy-type>
951
952 **Parameters:**
953
954 ric: (*Optional*)
955
956 The name of the Near |nbh| RT |nbsp| RIC to get policies for.
957
958 service: (*Optional*)
959
960 The name of the service to get policies for.
961
962 type: (*Optional*)
963
964 The name of the policy type to get policies for.
965
966 **Responses:**
967
968 200:
969
970 Array of policy type names.
971
972 404:
973
974 RIC or policy type not found.
975
976 Examples
977 """"""""
978
979 **Call**: ::
980
981   curl -X GET "http://localhost:8081/policy_ids"
982
983 **Result**:
984
985 200: ::
986
987   [
988     "Policy 1",
989     "Policy 2",
990     "Policy 3"
991   ]
992
993 **Call**: ::
994
995   curl -X GET "http://localhost:8081/policy_ids?ric=nonexistent"
996
997 **Result**:
998
999 404: ::
1000
1001   Ric not found
1002
1003 /policy_status
1004 ~~~~~~~~~~~~~~
1005
1006 GET
1007 +++
1008
1009 Returns the status of a policy.
1010
1011 Definition
1012 """"""""""
1013
1014 **URL path:**
1015
1016 /policy_status?id=<policy-id>
1017
1018 **Parameters:**
1019
1020 id: (*Required*)
1021
1022 The ID of the policy.
1023
1024 **Responses:**
1025
1026 200:
1027
1028 JSON object with policy status.
1029
1030 404:
1031
1032 Policy not found.
1033
1034 **********************
1035 Near-RT RIC Repository
1036 **********************
1037
1038 The Policy Agent keeps an updated view of the Near |nbh| RT |nbsp| RICs that are available in the system. A service can
1039 find out which Near |nbh| RT |nbsp| RIC that manages a specific element in the network or which
1040 Near |nbh| RT |nbsp| RICs that support a specific policy type.
1041
1042 /ric
1043 ~~~~
1044
1045 GET
1046 +++
1047
1048 Returns the name of a Near |nbh| RT |nbsp| RIC managing a specific Mananged Element.
1049
1050 Definition
1051 """"""""""
1052
1053 **URL path:**
1054
1055 /ric?managedElementId=<id-of-managed-element>
1056
1057 **Parameters:**
1058
1059 managedElementId: (*Required*)
1060
1061 The ID of the Managed Element.
1062
1063 **Responses:**
1064
1065 200:
1066
1067 Name of the Near |nbh| RT |nbsp| RIC managing the Managed Element.
1068
1069 404:
1070
1071 No Near |nbh| RT |nbsp| RIC manages the given Managed Element.
1072
1073 Examples
1074 """"""""
1075
1076 **Call**: ::
1077
1078   curl -X GET "http://localhost:8081/ric?managedElementId=Node 1"
1079
1080 **Result**:
1081
1082 200: ::
1083
1084   Ric 1
1085
1086 **Call**: ::
1087
1088   curl -X GET "http://localhost:8081/ric?managedElementId=notmanaged"
1089
1090 **Result**:
1091
1092 404
1093
1094 /rics
1095 ~~~~~
1096
1097 GET
1098 +++
1099
1100 Query Near |nbh| RT |nbsp| RIC information.
1101
1102 Definition
1103 """"""""""
1104
1105 **URL path:**
1106
1107 /rics?policyType=<name-of-policy-type>
1108
1109 **Parameters:**
1110
1111 policyType: (*Optional*)
1112
1113 The name of the policy type.
1114
1115 **Responses:**
1116
1117 200:
1118
1119 Array of JSON objects containing Near |nbh| RT |nbsp| RIC information. ::
1120
1121   [
1122     {
1123       "managedElementIds": [
1124         "string"
1125       ],
1126       "policyTypes": [
1127         "string"
1128       ],
1129       "ricName": "string",
1130       "state": "string"
1131     }
1132   ]
1133
1134 404:
1135
1136 Policy type is not found.
1137
1138 Examples
1139 """"""""
1140
1141 **Call**: ::
1142
1143   curl -X GET "http://localhost:8081/rics?policyType=STD_PolicyModelUnconstrained_0.2.0"
1144
1145 **Result**:
1146
1147 200: ::
1148
1149   [
1150     {
1151       "managedElementIds": [
1152         "ME 1",
1153         "ME 2"
1154       ],
1155       "policyTypes": [
1156         "STD_PolicyModelUnconstrained_0.2.0",
1157         "Example_QoETarget_1.0.0",
1158         "ERIC_QoSNudging_0.2.0"
1159       ],
1160       "ricName": "Ric 1",
1161       "state": "AVAILABLE"
1162     },
1163       .
1164       .
1165       .
1166     {
1167       "managedElementIds": [
1168         "ME 3"
1169       ],
1170       "policyTypes": [
1171         "STD_PolicyModelUnconstrained_0.2.0"
1172       ],
1173       "ricName": "Ric X",
1174       "state": "UNAVAILABLE"
1175     }
1176   ]
1177
1178 **Call**: ::
1179
1180   curl -X GET "http://localhost:8081/rics?policyType=nonexistent"
1181
1182 **Result**:
1183
1184 404: ::
1185
1186   Policy type not found
1187
1188 ************
1189 Health Check
1190 ************
1191
1192 The status of the Policy Agent.
1193
1194 /status
1195 ~~~~~~~
1196
1197 GET
1198 +++
1199
1200 Returns the status of the Policy Agent.
1201
1202 Definition
1203 """"""""""
1204
1205 **URL path:**
1206
1207 /status
1208
1209 **Parameters:**
1210
1211 None.
1212
1213 **Responses:**
1214
1215 200:
1216
1217 Service is living.
1218
1219 Examples
1220 """"""""
1221
1222 **Call**: ::
1223
1224   curl -X GET "http://localhost:8081/status"
1225
1226 **Result**:
1227
1228 200
1229
1230 ****************
1231 A1 through DMaaP
1232 ****************
1233
1234 The Policy Agent also provides the possibility to use DMaap to handle policies according to the A1 specification. The
1235 Policy Agent polls the DMaaP Message Router regularly and processes any messages targeted to it. The response is then
1236 published back to the DMaaP Message Router with the result of the call.
1237
1238 Send Message
1239 ~~~~~~~~~~~~
1240
1241 The message to send is a JSON like the one below. The "*url*" is one of the URLs described under
1242 :ref:`policy-management`. The "*target*" must always be "*policy-agent*" for the message to be processed by the Policy
1243 Agent. The "*operation*" can be one of the following: "*GET | PUT | POST | DELETE*". ::
1244
1245   {
1246     "type": "string",
1247     "correlationId": "string",
1248     "target": "string",
1249     "timestamp": "timestamp",
1250     "apiVersion": "string",
1251     "originatorId": "string",
1252     "requestId": "string",
1253     "operation": "string",
1254     "url": "string"
1255   }
1256
1257 Example
1258 +++++++
1259
1260 To get all policy types for a specific Near |nbh| RT |nbsp| RIC the following message should be sent to DMaaP Message
1261 Router: ::
1262
1263   {
1264     "type":"request",
1265     "correlationId":"c09ac7d1-de62-0016-2000-e63701125557-201",
1266     "target":"policy-agent",
1267     "timestamp":"2019-05-14T11:44:51.36Z",
1268     "apiVersion":"1.0",
1269     "originatorId":"849e6c6b420",
1270     "requestId":"23343221",
1271     "operation":"GET",
1272     "url":"/policy_schemas?ric=ric_ric-simulator_1"
1273   }
1274
1275 Receive Message
1276 ~~~~~~~~~~~~~~~
1277
1278 The message the Policy Agent sends back to the DMaaP Message Router is a JSON like the one below. The "*requestId*"
1279 "*correlationId*", and "*originatorId*" are the same as in the message sent to DMaaP MR. ::
1280
1281   {
1282     "requestId": "string",
1283     "correlationId": "string",
1284     "originatorId": "string",
1285     "type": "string",
1286     "message": "string",
1287     "type":  "string",
1288     "timestamp": "string",
1289     "status": "string"
1290   }
1291
1292 Example
1293 +++++++
1294
1295 The response containing all policy types for a specific Near |nbh| RT |nbsp| RIC sent to the DMaaP Message Router from
1296 the Policy Agent: ::
1297
1298   {
1299     \"requestId\":\"23343221\",
1300     \"correlationId\":\"c09ac7d1-de62-0016-2000-e63701125557-201\",
1301     \"originatorId\":\"849e6c6b420\",
1302     \"type\":\"response\",
1303     \"message\":\"[
1304       {
1305       \\\"$schema\\\":\\\"http://json-schema.org/draft-07/schema#\\\",
1306       \\\"description\\\":\\\"QoS policy type\\\",
1307       \\\"title\\\":\\\"STD_QoSNudging_0.2.0\\\",
1308       \\\"type\\\":\\\"object\\\",
1309       \\\"properties\\\":{\\\"scope\\\":{\\\"additionalProperties\\\":true,
1310       \\\"type\\\":\\\"object\\\",
1311       \\\"properties\\\":{\\\"qosId\\\":{\\\"type\\\":\\\"string\\\"},
1312       \\\"ueId\\\":{\\\"type\\\":\\\"string\\\"}},
1313       \\\"required\\\":[\\\"ueId\\\",
1314       \\\"qosId\\\"]},
1315       \\\"statement\\\":{\\\"additionalProperties\\\":false,
1316       \\\"type\\\":\\\"object\\\",
1317       \\\"properties\\\":{\\\"priorityLevel\\\":{\\\"type\\\":\\\"number\\\"}},
1318       \\\"required\\\":[\\\"priorityLevel\\\"]}}
1319       }
1320     ]\",
1321     \"timestamp\":\"2019-05-14T11:44:51.36Z\",
1322     \"status\":\"200 OK\"
1323   }