Skip to content

Commit

Permalink
add usbcamera-dmi
Browse files Browse the repository at this point in the history
Signed-off-by: luomengY <[email protected]>
  • Loading branch information
luomengY committed Dec 25, 2023
1 parent 47e60b6 commit 92c1364
Show file tree
Hide file tree
Showing 63 changed files with 8,933 additions and 16 deletions.
22 changes: 13 additions & 9 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@ go 1.17

require (
github.com/beevik/etree v1.1.0
github.com/blackjack/webcam v0.5.0
github.com/currantlabs/ble v0.0.0-20171229162446-c1d21c164cf8
github.com/eclipse/paho.mqtt.golang v1.3.0
github.com/go-resty/resty/v2 v2.7.0
github.com/goburrow/modbus v0.1.0
github.com/goburrow/serial v0.1.0
github.com/golang/protobuf v1.5.2
github.com/gopcua/opcua v0.1.13
github.com/gorilla/mux v1.8.0
github.com/influxdata/influxdb-client-go/v2 v2.12.3
github.com/kubeedge/kubeedge v1.12.0-beta.0
github.com/onsi/ginkgo v1.16.4
github.com/onsi/gomega v1.19.0
Expand All @@ -19,11 +22,12 @@ require (
github.com/sailorvii/modbus v0.1.2
github.com/spf13/cobra v1.2.1
github.com/spf13/pflag v1.0.6-0.20210604193023-d5e0c0615ace
github.com/stretchr/testify v1.7.0
github.com/stretchr/testify v1.8.0
github.com/tbrandon/mbserver v0.0.0-20210320091329-a1f8ae952881
github.com/use-go/onvif v0.0.1
golang.org/x/net v0.0.0-20220225172249-27dd8689420f
golang.org/x/net v0.7.0
google.golang.org/grpc v1.47.0
google.golang.org/protobuf v1.27.1
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.24.1
k8s.io/apimachinery v0.24.1
Expand All @@ -36,6 +40,7 @@ require (
github.com/PuerkitoBio/purell v1.1.1 // indirect
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/deepmap/oapi-codegen v1.8.2 // indirect
github.com/elgs/gostrgen v0.0.0-20161222160715-9d61ae07eeae // indirect
github.com/emicklei/go-restful v2.9.6+incompatible // indirect
github.com/fsnotify/fsnotify v1.4.9 // indirect
Expand All @@ -45,18 +50,18 @@ require (
github.com/go-openapi/swag v0.19.14 // indirect
github.com/gofrs/uuid v3.2.0+incompatible // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/google/gnostic v0.5.7-v3refs // indirect
github.com/google/go-cmp v0.5.6 // indirect
github.com/google/gofuzz v1.1.0 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/imdario/mergo v0.3.12 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/kubeedge/viaduct v0.0.0 // indirect
github.com/mailru/easyjson v0.7.6 // indirect
github.com/mattn/go-colorable v0.0.9 // indirect
github.com/mattn/go-colorable v0.1.8 // indirect
github.com/mattn/go-isatty v0.0.12 // indirect
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
github.com/mgutz/logxi v0.0.0-20161027140823-aebf8a7d67ab // indirect
Expand All @@ -67,16 +72,15 @@ require (
github.com/onsi/ginkgo/v2 v2.1.4 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e // indirect
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
golang.org/x/text v0.3.7 // indirect
golang.org/x/sys v0.14.0 // indirect
golang.org/x/term v0.5.0 // indirect
golang.org/x/text v0.7.0 // indirect
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c // indirect
google.golang.org/protobuf v1.27.1 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/client-go v0.24.1 // indirect
k8s.io/component-base v0.22.6 // indirect
k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 // indirect
Expand Down
58 changes: 51 additions & 7 deletions go.sum

Large diffs are not rendered by default.

22 changes: 22 additions & 0 deletions mappers/usbcamera-dmi/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
FROM golang:1.17-alpine AS builder

WORKDIR /build


ENV GO111MODULE=on \
GOPROXY=https://goproxy.cn,direct

COPY mappers-go ./mappers-go

RUN cd mappers-go/mappers/usbcamera-dmi && CGO_ENABLED=0 GOOS=linux go build -gcflags "all=-N -l" -o main cmd/main.go && \
cp main /build/ && cd /build


FROM ubuntu:16.04

RUN mkdir -p kubeedge

COPY --from=builder /build/main kubeedge/
COPY ./mappers-go/mappers/usbcamera-dmi/config.yaml kubeedge/

WORKDIR kubeedge
34 changes: 34 additions & 0 deletions mappers/usbcamera-dmi/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
SHELL := /bin/bash

curr_dir := $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST)))))
rest_args := $(wordlist 2, $(words $(MAKECMDGOALS)), $(MAKECMDGOALS))
$(eval $(rest_args):;@:)

help:
#
# Usage:
# make generate : generate a mapper based on a template.
# make mapper {mapper-name} <action> <parameter>: execute mapper building process.
#
# Actions:
# - mod, m : download code dependencies.
# - lint, l : verify code via go fmt and `golangci-lint`.
# - build, b : compile code.
# - package, p : package docker image.
# - clean, c : clean output binary.
#
# Parameters:
# ARM : true or undefined
# ARM64 : true or undefined
#
# Example:
# - make mapper modbus ARM64=true : execute `build` "modbus" mapper for ARM64.
# - make mapper modbus test : execute `test` "modbus" mapper.
@echo

make_rules := $(shell ls $(curr_dir)/hack/make-rules | sed 's/.sh//g')
$(make_rules):
@$(curr_dir)/hack/make-rules/$@.sh $(rest_args)

.DEFAULT_GOAL := help
.PHONY: $(make_rules) build test package
67 changes: 67 additions & 0 deletions mappers/usbcamera-dmi/cmd/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package main

import (
"errors"
"os"

"k8s.io/klog/v2"

"github.com/kubeedge/mappers-go/mappers/usbcamera-dmi/device"
"github.com/kubeedge/mappers-go/mappers/usbcamera-dmi/pkg/common"
"github.com/kubeedge/mappers-go/mappers/usbcamera-dmi/pkg/config"
"github.com/kubeedge/mappers-go/mappers/usbcamera-dmi/pkg/grpcserver"
"github.com/kubeedge/mappers-go/mappers/usbcamera-dmi/pkg/httpserver"
"github.com/kubeedge/mappers-go/mappers/usbcamera-dmi/pkg/util/grpcclient"
"github.com/kubeedge/mappers-go/mappers/usbcamera-dmi/pkg/util/parse"
)

func main() {
var err error
var c config.Config

klog.InitFlags(nil)
defer klog.Flush()

if err = c.Parse(); err != nil {
klog.Fatal(err)
os.Exit(1)
}
klog.Infof("config: %+v", c)

grpcclient.Init(&c)

// start grpc server
grpcServer := grpcserver.NewServer(
grpcserver.Config{
SockPath: c.GrpcServer.SocketPath,
Protocol: common.ProtocolCustomized,
},
device.NewDevPanel(),
)

panel := device.NewDevPanel()
err = panel.DevInit(&c)
if err != nil && !errors.Is(err, parse.ErrEmptyData) {
klog.Fatal(err)
}
klog.Infoln("devInit finished")

// register to edgecore
// if dev init mode is register, mapper's dev will init when registry to edgecore
if c.DevInit.Mode != common.DevInitModeRegister {
klog.Infoln("======dev init mode is not register, will register to edgecore")
if _, _, err = grpcclient.RegisterMapper(&c, false); err != nil {
klog.Fatal(err)
}
klog.Infoln("registerMapper finished")
}
go panel.DevStart()

httpServer := httpserver.NewRestServer(panel)
go httpServer.StartServer()

defer grpcServer.Stop()
if err = grpcServer.Start(); err != nil {
klog.Fatal(err)
}
}
12 changes: 12 additions & 0 deletions mappers/usbcamera-dmi/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
grpc_server:
socket_path: /etc/kubeedge/usb.sock
common:
name: Usb-mapper
version: v1.13.0
api_version: v1.0.0
protocol: camera-usb # TODO add your protocol name
address: 127.0.0.1
edgecore_sock: /etc/kubeedge/dmi.sock
dev_init:
mode: register

115 changes: 115 additions & 0 deletions mappers/usbcamera-dmi/data/dbmethod/influxdb2/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package influxdb2

import (
"context"
"encoding/json"
"fmt"
"os"
"strings"
"time"

"k8s.io/klog/v2"

influxdb2 "github.com/influxdata/influxdb-client-go/v2"
"github.com/kubeedge/mappers-go/mappers/usbcamera-dmi/pkg/common"
)

type DataBaseConfig struct {
Influxdb2ClientConfig *Influxdb2ClientConfig `json:"influxdb2ClientConfig,omitempty"`
Influxdb2DataConfig *Influxdb2DataConfig `json:"influxdb2DataConfig,omitempty"`
}

type Influxdb2ClientConfig struct {
Url string `json:"url,omitempty"`
Org string `json:"org,omitempty"`
Bucket string `json:"bucket,omitempty"`
}

type Influxdb2DataConfig struct {
Measurement string `json:"measurement,omitempty"`
Tag map[string]string `json:"tag,omitempty"`
FieldKey string `json:"fieldKey,omitempty"`
}

func NewDataBaseClient(clientConfig json.RawMessage, dataConfig json.RawMessage) (*DataBaseConfig, error) {
// parse influx database config data
influxdb2ClientConfig := new(Influxdb2ClientConfig)
influxdb2DataConfig := new(Influxdb2DataConfig)
err := json.Unmarshal(clientConfig, influxdb2ClientConfig)
if err != nil {
return nil, err
}
err = json.Unmarshal(dataConfig, influxdb2DataConfig)
if err != nil {
return nil, err
}
return &DataBaseConfig{
Influxdb2ClientConfig: influxdb2ClientConfig,
Influxdb2DataConfig: influxdb2DataConfig,
}, nil
}

func (d *DataBaseConfig) InitDbClient() influxdb2.Client {
var usrtoken string
usrtoken = os.Getenv("TOKEN")
client := influxdb2.NewClient(d.Influxdb2ClientConfig.Url, usrtoken)

return client
}

func (d *DataBaseConfig) CloseSession(client influxdb2.Client) {
client.Close()
}

func (d *DataBaseConfig) AddData(data *common.DataModel, client influxdb2.Client) error {
// write device data to influx database
orgName := d.Influxdb2ClientConfig.Org
bucketName := d.Influxdb2ClientConfig.Bucket
ctx := context.Background()
errMark := "not found"
org, err := client.OrganizationsAPI().FindOrganizationByName(ctx, orgName)
if err != nil {
if strings.Contains(err.Error(), errMark) {
org, err := client.OrganizationsAPI().CreateOrganizationWithName(ctx, orgName)
if err != nil {
return fmt.Errorf("create organization '%s' faild with err:%v", orgName, err)
}
_, err = client.BucketsAPI().CreateBucketWithName(ctx, org, bucketName)
if err != nil {
return fmt.Errorf("create bucket '%s' faild with err:%v", bucketName, err)
}
} else {
return fmt.Errorf("find organization '%s' faild with err:%v", orgName, err)
}
} else {
buckets, err := client.BucketsAPI().FindBucketsByOrgName(ctx, orgName)
if err != nil {
return fmt.Errorf("find buckets faild with err:%v", err)
}
var flag = false
for _, bucket := range *buckets {
if bucket.Name == bucketName {
flag = true
break
}
}
if !flag {
_, err = client.BucketsAPI().CreateBucketWithName(ctx, org, bucketName)
if err != nil {
return fmt.Errorf("create bucket '%s' faild with err:%v", bucketName, err)
}
}
}
writeAPI := client.WriteAPIBlocking(d.Influxdb2ClientConfig.Org, d.Influxdb2ClientConfig.Bucket)
p := influxdb2.NewPoint(d.Influxdb2DataConfig.Measurement,
d.Influxdb2DataConfig.Tag,
map[string]interface{}{d.Influxdb2DataConfig.FieldKey: data.Value},
time.Now())
// write point immediately
err = writeAPI.WritePoint(context.Background(), p)
if err != nil {
klog.V(4).Info("Exit AddData")
return err
}
return nil
}
48 changes: 48 additions & 0 deletions mappers/usbcamera-dmi/data/dbmethod/redis/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package redis

import (
"github.com/kubeedge/mappers-go/mappers/usbcamera-dmi/pkg/common"
"github.com/kubeedge/mappers-go/mappers/usbcamera-dmi/pkg/global"
)

type DataBaseConfig struct {
}

func NewDataBaseClient() (global.DataBaseClient, error) {
return &DataBaseConfig{}, nil
}

func (d *DataBaseConfig) InitDbClient() error {
//TODO implement me
panic("implement me")
}

func (d *DataBaseConfig) CloseSession() {
//TODO implement me
panic("implement me")
}

func (d *DataBaseConfig) AddData(data *common.DataModel) {
//TODO implement me
panic("implement me")
}

func (d *DataBaseConfig) GetDataByDeviceName(deviceName string) ([]*common.DataModel, error) {
//TODO implement me
panic("implement me")
}

func (d *DataBaseConfig) GetPropertyDataByDeviceName(deviceName string, propertyData string) ([]*common.DataModel, error) {
//TODO implement me
panic("implement me")
}

func (d *DataBaseConfig) GetDataByTimeRange(start int64, end int64) ([]*common.DataModel, error) {
//TODO implement me
panic("implement me")
}

func (d *DataBaseConfig) DeleteDataByTimeRange(start int64, end int64) ([]*common.DataModel, error) {
//TODO implement me
panic("implement me")
}
Loading

0 comments on commit 92c1364

Please sign in to comment.