blob: eb805221975407582701342ef124a74ebfa84651 [file] [log] [blame]
khenaidoobf6e7bb2018-08-14 22:27:29 -04001/*
2 * Copyright 2018-present Open Networking Foundation
3
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7
8 * http://www.apache.org/licenses/LICENSE-2.0
9
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
npujar1d86a522019-11-14 17:11:16 +053016
Kent Hagerman2b216042020-04-03 18:28:56 -040017package api
khenaidoobf6e7bb2018-08-14 22:27:29 -040018
19import (
20 "context"
David Bainbridge4087cc52019-11-13 18:36:03 +000021 "encoding/json"
khenaidoobf6e7bb2018-08-14 22:27:29 -040022 "errors"
khenaidood948f772021-08-11 17:49:24 -040023
khenaidoobf6e7bb2018-08-14 22:27:29 -040024 "github.com/golang/protobuf/ptypes/empty"
Kent Hagerman2b216042020-04-03 18:28:56 -040025 "github.com/opencord/voltha-go/rw_core/core/adapter"
26 "github.com/opencord/voltha-go/rw_core/core/device"
khenaidood948f772021-08-11 17:49:24 -040027 "github.com/opencord/voltha-lib-go/v7/pkg/version"
28 "github.com/opencord/voltha-protos/v5/go/common"
khenaidoo9beaaf12021-10-19 17:32:01 -040029 "github.com/opencord/voltha-protos/v5/go/health"
khenaidood948f772021-08-11 17:49:24 -040030 "github.com/opencord/voltha-protos/v5/go/omci"
31 "github.com/opencord/voltha-protos/v5/go/voltha"
khenaidoobf6e7bb2018-08-14 22:27:29 -040032)
33
khenaidood948f772021-08-11 17:49:24 -040034// APIHandler combines the partial API implementations in various components into a complete voltha implementation
35type APIHandler struct {
Kent Hagerman45a13e42020-04-13 12:23:50 -040036 *device.Manager
37 *device.LogicalManager
38 adapterManager // *adapter.Manager
khenaidoobf6e7bb2018-08-14 22:27:29 -040039}
40
Kent Hagerman45a13e42020-04-13 12:23:50 -040041// avoid having multiple embedded types with the same name (`<package>.Manager`s conflict)
42type adapterManager struct{ *adapter.Manager }
43
khenaidood948f772021-08-11 17:49:24 -040044// NewAPIHandler creates API handler instance
45func NewAPIHandler(deviceMgr *device.Manager, logicalDeviceMgr *device.LogicalManager, adapterMgr *adapter.Manager) *APIHandler {
46 return &APIHandler{
Kent Hagerman45a13e42020-04-13 12:23:50 -040047 Manager: deviceMgr,
48 LogicalManager: logicalDeviceMgr,
49 adapterManager: adapterManager{adapterMgr},
Stephane Barbarie6e1bd502018-11-05 22:44:45 -050050 }
khenaidoobf6e7bb2018-08-14 22:27:29 -040051}
khenaidoo4d4802d2018-10-04 21:59:49 -040052
khenaidoo9beaaf12021-10-19 17:32:01 -040053func (handler *APIHandler) GetHealthStatus(ctx context.Context, empty *empty.Empty) (*health.HealthStatus, error) {
54 return &health.HealthStatus{State: health.HealthStatus_HEALTHY}, nil
khenaidood948f772021-08-11 17:49:24 -040055}
56
Kent Hagerman45a13e42020-04-13 12:23:50 -040057// GetVoltha currently just returns version information
khenaidood948f772021-08-11 17:49:24 -040058func (handler *APIHandler) GetVoltha(ctx context.Context, _ *empty.Empty) (*voltha.Voltha, error) {
Rohan Agrawal31f21802020-06-12 05:38:46 +000059 logger.Debug(ctx, "GetVoltha")
David Bainbridge4087cc52019-11-13 18:36:03 +000060 /*
61 * For now, encode all the version information into a JSON object and
62 * pass that back as "version" so the client can get all the
63 * information associated with the version. Long term the API should
Kent Hagerman45a13e42020-04-13 12:23:50 -040064 * better accommodate this, but for now this will work.
David Bainbridge4087cc52019-11-13 18:36:03 +000065 */
66 data, err := json.Marshal(&version.VersionInfo)
David Bainbridge4087cc52019-11-13 18:36:03 +000067 if err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +000068 logger.Warnf(ctx, "Unable to encode version information as JSON: %s", err.Error())
Kent Hagerman45a13e42020-04-13 12:23:50 -040069 return &voltha.Voltha{Version: version.VersionInfo.Version}, nil
David Bainbridge4087cc52019-11-13 18:36:03 +000070 }
Kent Hagerman45a13e42020-04-13 12:23:50 -040071 return &voltha.Voltha{Version: string(data)}, nil
David Bainbridge4087cc52019-11-13 18:36:03 +000072}
73
Kent Hagerman45a13e42020-04-13 12:23:50 -040074var errUnimplemented = errors.New("unimplemented")
khenaidoof5a5bfa2019-01-23 22:20:29 -050075
khenaidood948f772021-08-11 17:49:24 -040076func (handler *APIHandler) ListCoreInstances(context.Context, *empty.Empty) (*voltha.CoreInstances, error) {
Kent Hagerman45a13e42020-04-13 12:23:50 -040077 return nil, errUnimplemented
khenaidoof5a5bfa2019-01-23 22:20:29 -050078}
khenaidood948f772021-08-11 17:49:24 -040079func (handler *APIHandler) GetCoreInstance(context.Context, *voltha.ID) (*voltha.CoreInstance, error) {
Kent Hagerman45a13e42020-04-13 12:23:50 -040080 return nil, errUnimplemented
khenaidoobf6e7bb2018-08-14 22:27:29 -040081}
khenaidood948f772021-08-11 17:49:24 -040082func (handler *APIHandler) CreateEventFilter(context.Context, *voltha.EventFilter) (*voltha.EventFilter, error) {
Kent Hagerman45a13e42020-04-13 12:23:50 -040083 return nil, errUnimplemented
khenaidoobf6e7bb2018-08-14 22:27:29 -040084}
khenaidood948f772021-08-11 17:49:24 -040085func (handler *APIHandler) UpdateEventFilter(context.Context, *voltha.EventFilter) (*voltha.EventFilter, error) {
Kent Hagerman45a13e42020-04-13 12:23:50 -040086 return nil, errUnimplemented
khenaidoof5a5bfa2019-01-23 22:20:29 -050087}
khenaidood948f772021-08-11 17:49:24 -040088func (handler *APIHandler) DeleteEventFilter(context.Context, *voltha.EventFilter) (*empty.Empty, error) {
Kent Hagerman45a13e42020-04-13 12:23:50 -040089 return nil, errUnimplemented
khenaidoof5a5bfa2019-01-23 22:20:29 -050090}
khenaidood948f772021-08-11 17:49:24 -040091func (handler *APIHandler) GetEventFilter(context.Context, *voltha.ID) (*voltha.EventFilters, error) {
Kent Hagerman45a13e42020-04-13 12:23:50 -040092 return nil, errUnimplemented
khenaidoof5a5bfa2019-01-23 22:20:29 -050093}
khenaidood948f772021-08-11 17:49:24 -040094func (handler *APIHandler) ListEventFilters(context.Context, *empty.Empty) (*voltha.EventFilters, error) {
Kent Hagerman45a13e42020-04-13 12:23:50 -040095 return nil, errUnimplemented
Kent Hagermanc2c73ff2019-11-20 16:22:32 -050096}
khenaidood948f772021-08-11 17:49:24 -040097func (handler *APIHandler) SelfTest(context.Context, *voltha.ID) (*voltha.SelfTestResponse, error) {
Kent Hagerman45a13e42020-04-13 12:23:50 -040098 return nil, errUnimplemented
khenaidoob3127472019-07-24 21:04:55 -040099}
khenaidood948f772021-08-11 17:49:24 -0400100func (handler *APIHandler) GetAlarmDeviceData(context.Context, *common.ID) (*omci.AlarmDeviceData, error) {
Kent Hagerman45a13e42020-04-13 12:23:50 -0400101 return nil, errUnimplemented
khenaidoobf6e7bb2018-08-14 22:27:29 -0400102}
khenaidood948f772021-08-11 17:49:24 -0400103func (handler *APIHandler) GetMibDeviceData(context.Context, *common.ID) (*omci.MibDeviceData, error) {
Kent Hagerman45a13e42020-04-13 12:23:50 -0400104 return nil, errUnimplemented
khenaidoobf6e7bb2018-08-14 22:27:29 -0400105}