blob: 7672d3f480b26a24a18e71ca4cab9118a0aacd3e [file] [log] [blame]
/*
* Copyright 2022-present Open Networking Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package format
import (
"encoding/json"
"fmt"
"io"
"log"
app "voltha-go-controller/internal/pkg/application"
"voltha-go-controller/voltha-go-controller/cli/database"
"voltha-go-controller/voltha-go-controller/cli/models"
"voltha-go-controller/voltha-go-controller/nbi"
"github.com/guumaster/tablewriter"
)
type horizontalTable struct {
writer *tablewriter.Table
title models.TableTitle
}
func newHorizontalTable(title models.TableTitle, outputBuffer io.Writer) Table {
ht := horizontalTable{}
ht.title = title
ht.writer = tablewriter.NewWriter(outputBuffer)
ht.writer.SetAlignment(tablewriter.ALIGN_RIGHT)
return &ht
}
func (ht *horizontalTable) SingleEntry(value *database.Data) {
values := make(map[string]*database.Data, 1)
values["singleEntry"] = value
ht.MultipleEntries(values)
}
func (ht *horizontalTable) SinglePortDataEntry(value map[string][]*app.VoltPort) {
ht.MultiplePortDataEntries(value)
}
func (ht *horizontalTable) SinglePonPortDataEntry(value map[string][]*app.PonPortCfg) {
ht.MultiplePonPortDataEntries(value)
}
func (ht *horizontalTable) SingleDataEntry(value map[string]map[string]bool) {
ht.MultipleDataEntries(value)
}
func (ht *horizontalTable) SingleIcmpDataEntry(value map[string]map[string]int) {
ht.MultipleIcmpDataEntries(value)
}
func (ht *horizontalTable) SingleDeviceTaskList(value map[string]map[int]*app.TaskInfo) {
ht.MultipleDeviceTaskList(value)
}
func (ht *horizontalTable) SingleDeviceInfo(value map[string]map[string]*nbi.DeviceInfo) {
ht.MultipleDeviceInfo(value)
}
func (ht *horizontalTable) SingleDhcpSessionInfo(value []*nbi.DhcpSessionInfo) {
ht.MultipleDhcpSessionInfo(value)
}
func (ht *horizontalTable) MultipleEntries(values map[string]*database.Data) {
for _, value := range values {
var data map[string]interface{}
err := json.Unmarshal(value.Value, &data)
if err != nil {
log.Fatalf("Data saved in database seems to be corrupted: %s", err)
}
sortedData := sortData(data)
var header []string
for i := range sortedData {
header = append(header, sortedData[i].Key)
}
ht.writer.Append(header)
ht.writer.AddSeparator()
break
}
var rows [][]string
for _, value := range values {
var data map[string]interface{}
err := json.Unmarshal(value.Value, &data)
if err != nil {
log.Fatalf("Data saved in database seems to be corrupted: %s", err)
}
sortedData := sortData(data)
var row []string
for i := range sortedData {
switch (sortedData[i].Value).(type) {
case float64:
row = append(row, fmt.Sprintf("%d", int((sortedData[i].Value).(float64))))
case uint64, uint32:
row = append(row, fmt.Sprintf("%d", sortedData[i].Value))
default:
row = append(row, fmt.Sprintf("%v", sortedData[i].Value))
}
}
rows = append(rows, row)
}
ht.writer.AppendBulk(rows)
ht.writer.Render()
}
func (ht *horizontalTable) MultipleDataEntries(configs map[string]map[string]bool) {
// TO DO
}
func (ht *horizontalTable) MultipleIcmpDataEntries(configs map[string]map[string]int) {
// TO DO
}
func (ht *horizontalTable) MultiplePortDataEntries(configs map[string][]*app.VoltPort) {
// TO DO
}
func (ht *horizontalTable) MultiplePonPortDataEntries(configs map[string][]*app.PonPortCfg) {
// TO DO
}
func (ht *horizontalTable) MultipleDeviceTaskList(configs map[string]map[int]*app.TaskInfo) {
// TO DO
}
func (ht *horizontalTable) MultipleDeviceInfo(configs map[string]map[string]*nbi.DeviceInfo) {
// TO DO
}
func (ht *horizontalTable) MultipleDhcpSessionInfo(configs []*nbi.DhcpSessionInfo) {
// TO DO
}