685d118ae8fb706a40fcce0926fee45268e3c8d7
[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         GetNamesFromHelmRepo() (names []string)
88 }
89
90 type Helmer interface {
91         SetCM(ConfigMapper)
92         Initialize()
93         Install(m XappDeploy) (xapp Xapp, err error)
94         Status(name string) (xapp Xapp, err error)
95         StatusAll() (xapps []Xapp, err error)
96         SearchAll() (xapps []string)
97         List() (xapps []string, err error)
98         Delete(name string) (xapp Xapp, err error)
99 }
100
101 type Helm struct {
102         host      string
103         chartPath string
104         initDone  bool
105         cm        ConfigMapper
106 }
107
108 type SubscriptionReq struct {
109         Id         string `json:"id"`
110         TargetUrl  string `json:"targetUrl"`
111         EventType  string `json:"eventType"`
112         MaxRetries int    `json:"maxRetries"`
113         RetryTimer int    `json:"retryTimer"`
114 }
115
116 type SubscriptionResp struct {
117         Id        string `json:"id"`
118         Version   int    `json:"version"`
119         EventType string `json:"eventType"`
120 }
121
122 type SubscriptionNotif struct {
123         Id        string `json:"id"`
124         Version   int    `json:"version"`
125         EventType string `json:"eventType"`
126         XappData  []Xapp `json:"xapp"`
127 }
128
129 type Subscription struct {
130         req  SubscriptionReq
131         resp SubscriptionResp
132 }
133
134 type SubscriptionDispatcher struct {
135         client        *http.Client
136         subscriptions cmap.ConcurrentMap
137         db            *DB
138         Seq           int
139 }
140
141 type MessageTypes struct {
142         TxMessages []string `json:"txMessages"`
143         RxMessages []string `json:"rxMessages"`
144 }
145
146 type EventType string
147
148 const (
149         Created EventType = "created"
150         Updated EventType = "updated"
151         Deleted EventType = "deleted"
152 )
153
154 const (
155         MdclogErr   = 1 //! Error level log entry
156         MdclogWarn  = 2 //! Warning level log entry
157         MdclogInfo  = 3 //! Info level log entry
158         MdclogDebug = 4 //! Debug level log entry
159 )