Update logging interface
[ric-plt/appmgr.git] / cmd / appmgr / types.go
1 /*
2 ==================================================================================
3   Copyright (c) 2019 AT&T Intellectual Property.
4   Copyright (c) 2019 Nokia
5
6    Licensed under the Apache License, Version 2.0 (the "License");
7    you may not use this file except in compliance with the License.
8    You may obtain a copy of the License at
9
10        http://www.apache.org/licenses/LICENSE-2.0
11
12    Unless required by applicable law or agreed to in writing, software
13    distributed under the License is distributed on an "AS IS" BASIS,
14    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15    See the License for the specific language governing permissions and
16    limitations under the License.
17 ==================================================================================
18 */
19
20 package main
21
22 import (
23         "github.com/gorilla/mux"
24         cmap "github.com/orcaman/concurrent-map"
25         "net/http"
26 )
27
28 type CmdOptions struct {
29         hostAddr      *string
30         helmHost      *string
31         helmChartPath *string
32 }
33
34 type Resource struct {
35         Method      string
36         Url         string
37         HandlerFunc http.HandlerFunc
38 }
39
40 type Xapp struct {
41         Name      string         `json:"name"`
42         Status    string         `json:"status"`
43         Version   string         `json:"version"`
44         Instances []XappInstance `json:"instances"`
45 }
46
47 type XappInstance struct {
48         Name       string   `json:"name"`
49         Status     string   `json:"status"`
50         Ip         string   `json:"ip"`
51         Port       int      `json:"port"`
52         TxMessages []string `json:"txMessages"`
53         RxMessages []string `json:"rxMessages"`
54 }
55
56 type XappDeploy struct {
57         Name        string `json:"name"`
58         ConfigName  string `json:"configName, omitempty"`
59         Namespace   string `json:"namespace, omitempty"`
60         ServiceName string `json:"serviceName, omitempty"`
61         ImageRepo   string `json:"imageRepo, omitempty"`
62         Hostname    string `json:"hostname, omitempty"`
63 }
64
65 type XappManager struct {
66         router *mux.Router
67         helm   Helmer
68         cm     ConfigMapper
69         sd     SubscriptionDispatcher
70         opts   CmdOptions
71         ready  bool
72 }
73
74 type ConfigMapper interface {
75         UploadConfig() (cfg []XAppConfig)
76         GetConfigMap(m XappDeploy, c *interface{}) (err error)
77         CreateConfigMap(r XAppConfig) (errList []CMError, err error)
78         UpdateConfigMap(r XAppConfig) (errList []CMError, err error)
79         DeleteConfigMap(r XAppConfig) (cm interface{}, err error)
80         ReadSchema(name string, c *XAppConfig) (err error)
81         PurgeConfigMap(m XappDeploy) (cm interface{}, err error)
82         RestoreConfigMap(m XappDeploy, cm interface{}) (err error)
83         ReadConfigMap(name string, ns string, c *interface{}) (err error)
84         ApplyConfigMap(r XAppConfig, action string) (err error)
85         GetMessages(name string) (msgs MessageTypes)
86         GetNamespace(ns string) string
87 }
88
89 type Helmer interface {
90         SetCM(ConfigMapper)
91         Initialize()
92         Install(m XappDeploy) (xapp Xapp, err error)
93         Status(name string) (xapp Xapp, err error)
94         StatusAll() (xapps []Xapp, err error)
95         List() (xapps []string, err error)
96         Delete(name string) (xapp Xapp, err error)
97 }
98
99 type Helm struct {
100         host      string
101         chartPath string
102         initDone  bool
103         cm        ConfigMapper
104 }
105
106 type SubscriptionReq struct {
107         Id         string `json:"id"`
108         TargetUrl  string `json:"targetUrl"`
109         EventType  string `json:"eventType"`
110         MaxRetries int    `json:"maxRetries"`
111         RetryTimer int    `json:"retryTimer"`
112 }
113
114 type SubscriptionResp struct {
115         Id        string `json:"id"`
116         Version   int    `json:"version"`
117         EventType string `json:"eventType"`
118 }
119
120 type SubscriptionNotif struct {
121         Id        string `json:"id"`
122         Version   int    `json:"version"`
123         EventType string `json:"eventType"`
124         XappData  []Xapp `json:"xapp"`
125 }
126
127 type Subscription struct {
128         req  SubscriptionReq
129         resp SubscriptionResp
130 }
131
132 type SubscriptionDispatcher struct {
133         client        *http.Client
134         subscriptions cmap.ConcurrentMap
135         db            *DB
136         Seq           int
137 }
138
139 type MessageTypes struct {
140         TxMessages []string `json:"txMessages"`
141         RxMessages []string `json:"rxMessages"`
142 }
143
144 type EventType string
145
146 const (
147         Created EventType = "created"
148         Updated EventType = "updated"
149         Deleted EventType = "deleted"
150 )
151
152 const (
153         MdclogErr   = 1 //! Error level log entry
154         MdclogWarn  = 2 //! Warning level log entry
155         MdclogInfo  = 3 //! Info level log entry
156         MdclogDebug = 4 //! Debug level log entry
157 )