@@ 3,11 3,18 @@ package main
import (
"git.sr.ht/~emersion/drmdb"
"github.com/labstack/echo/v4/middleware"
+ "github.com/labstack/gommon/log"
)
func main() {
e := drmdb.New()
- e.Use(middleware.Logger())
+ e.HideBanner = true
+ if l, ok := e.Logger.(*log.Logger); ok {
+ l.SetHeader("${time_rfc3339} ${level}")
+ }
+ e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
+ Format: "${time_rfc3339} method=${method}, uri=${uri}, status=${status}, latency=${latency_human}\n",
+ }))
e.Use(middleware.Recover())
e.Logger.Fatal(e.Start(":1323"))
}
@@ 1,127 1,1 @@
package database
-
-import (
- "bytes"
- "crypto/sha256"
- "encoding/hex"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
-
- "git.sr.ht/~emersion/drmdb/drmtree"
-)
-
-const Dir = "db"
-
-var ErrStop = fmt.Errorf("drmdb: stop walking")
-
-func generateKey(n *drmtree.Node) (string, error) {
- if n.Driver == nil || n.Device == nil {
- return "", fmt.Errorf("node is missing driver/device")
- }
-
- ver := &n.Driver.Version
-
- var b bytes.Buffer
- b.WriteString(n.Driver.Name)
- b.WriteByte(0)
- fmt.Fprintf(&b, "%v.%v.%v-%v", ver.Major, ver.Minor, ver.Patch, ver.Date)
- b.WriteByte(0)
- b.WriteString(n.Driver.Kernel.SysName)
- b.WriteByte(0)
- b.WriteString(n.Driver.Kernel.Release)
- b.WriteByte(0)
- switch dev := n.Device.DeviceData.(type) {
- case *drmtree.DevicePCI:
- b.WriteString("pci")
- b.WriteByte(0)
- fmt.Fprintf(&b, "%04X:%04X", dev.Vendor, dev.Device)
- case *drmtree.DevicePlatform:
- b.WriteString("platform")
- if len(dev.Compatible) == 0 {
- return "", fmt.Errorf("platform device is missing compatibility info")
- }
- for _, compat := range dev.Compatible {
- b.WriteByte(0)
- b.WriteString(compat)
- }
- default:
- return "", fmt.Errorf("device bus type %v not supported", n.Device.BusType)
- }
-
- sum := sha256.Sum256(b.Bytes())
- return hex.EncodeToString(sum[:])[:12], nil
-}
-
-func Init() error {
- return os.MkdirAll(Dir, 0755)
-}
-
-func Store(n *drmtree.Node) (string, error) {
- k, err := generateKey(n)
- if err != nil {
- return "", err
- }
-
- p := filepath.Join(Dir, k+".json")
- f, err := os.OpenFile(p, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0666)
- if err != nil {
- if os.IsExist(err) {
- return "", fmt.Errorf("data has already been submitted")
- }
- return "", err
- }
- defer f.Close()
-
- if err := json.NewEncoder(f).Encode(n); err != nil {
- return "", err
- }
-
- return k, f.Close()
-}
-
-func Load(k string) (*drmtree.Node, error) {
- p := filepath.Join(Dir, k+".json")
- f, err := os.Open(p)
- if err != nil {
- return nil, err
- }
- defer f.Close()
-
- var n drmtree.Node
- if err := json.NewDecoder(f).Decode(&n); err != nil {
- return nil, err
- }
-
- return &n, f.Close()
-}
-
-func Walk(fn func(k string, n *drmtree.Node) error) error {
- files, err := ioutil.ReadDir(Dir)
- if err != nil {
- return err
- }
-
- for _, fi := range files {
- if !strings.HasSuffix(fi.Name(), ".json") {
- continue
- }
- k := strings.TrimSuffix(fi.Name(), ".json")
-
- n, err := Load(k)
- if err != nil {
- return err
- }
-
- if err := fn(k, n); err == ErrStop {
- return nil
- } else if err != nil {
- return err
- }
- }
-
- return nil
-}
@@ 7,6 7,7 @@ require (
git.sr.ht/~emersion/go-hwids v0.0.0-20190518090256-f59e5efa82bd
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/labstack/echo/v4 v4.1.17
+ github.com/labstack/gommon v0.3.0
github.com/mattn/go-colorable v0.1.8 // indirect
github.com/mcuadros/go-version v0.0.0-20190830083331-035f6764e8d2
golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9 // indirect