Implement subscription operatoin

Implement subscription operation for all the identified NBs.

Signed-off-by: subhash kumar singh <subh.singh@samsung.com>
Change-Id: I3d4e6a3202488662dc75c66a5a50ff57f390da8f
diff --git a/hwApp.go b/hwApp.go
index 52342b0..cd1d7b5 100755
--- a/hwApp.go
+++ b/hwApp.go
@@ -21,6 +21,8 @@
 package main
 
 import (
+       "encoding/json"
+       "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientmodel"
 	"gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
 )
 
@@ -30,6 +32,21 @@
 var (
 	A1_POLICY_QUERY      = 20013
 	POLICY_QUERY_PAYLOAD = "{\"policy_type_id\":20000}"
+        reqId               = int64(1)
+        seqId               = int64(1)
+        funId               = int64(1)
+        actionId            = int64(1)
+        actionType          = "report"
+        subsequestActioType = "continue"
+        timeToWait          = "w10ms"
+        direction           = int64(0)
+        procedureCode       = int64(27)
+        typeOfMessage       = int64(1)
+        subscriptionId      = ""
+        hPort               = int64(8080)
+        rPort               = int64(4560)
+        clientEndpoint      = clientmodel.SubscriptionParamsClientEndpoint{Host: "service-ricxapp-hw-go-http.ricxapp", HTTPPort: &hPort, RMRPort: &rPort}
+
 )
 
 func (e *HWApp) sendPolicyQuery() {
@@ -97,11 +114,66 @@
        return nbs
 }
 
+func (e *HWApp) sendSubscription(meid string) {
+
+       xapp.Logger.Info("sending subscription request for meid : %s", meid)
+
+       subscriptionParams := clientmodel.SubscriptionParams{
+                ClientEndpoint: &clientEndpoint,
+                Meid:           &meid,
+                RANFunctionID:  &funId,
+                SubscriptionDetails: clientmodel.SubscriptionDetailsList{
+                        &clientmodel.SubscriptionDetail{
+                                RequestorID: &reqId,
+                                InstanceID:  &seqId,
+                                EventTriggers: &clientmodel.EventTriggerDefinition{
+                                        OctetString: "1234",
+                                },
+                                ActionToBeSetupList: clientmodel.ActionsToBeSetup{
+                                        &clientmodel.ActionToBeSetup{
+                                                ActionDefinition: &clientmodel.ActionDefinition{
+                                                        OctetString: "5678",
+                                                },
+                                                ActionID:   &actionId,
+                                                ActionType: &actionType,
+                                                SubsequentAction: &clientmodel.SubsequentAction{
+                                                        SubsequentActionType: &subsequestActioType,
+                                                        TimeToWait:           &timeToWait,
+                                                },
+                                        },
+                                },
+                        },
+                },
+        }
+
+        b, err := json.MarshalIndent(subscriptionParams, "", "  ")
+
+       if err != nil {
+               xapp.Logger.Error("Json marshaling failed : %s", err)
+               return
+       }
+
+        xapp.Logger.Info("*****body: %s ", string(b))
+
+       resp, err := xapp.Subscription.Subscribe(&subscriptionParams)
+
+       if err != nil {
+               xapp.Logger.Error("subscription failed (%s) with error: %s", meid, err)
+               return
+       }
+       xapp.Logger.Info("Successfully subcription done (%s), subscription id : %s", meid, *resp.SubscriptionID)
+}
+
 func (e *HWApp) xAppStartCB(d interface{}) {
 	xapp.Logger.Info("xApp ready call back received")
 
        // get the list of all NBs
-       e.getnbList()
+       nbList := e.getnbList()
+
+       // send subscription request to each of the NBs
+       for _, nb := range nbList {
+       e.sendSubscription(nb.InventoryName)
+       }
 }
 
 func (e *HWApp) Consume(msg *xapp.RMRParams) (err error) {