mirror of
https://codeberg.org/scip/anydb.git
synced 2025-12-17 04:20:59 +01:00
added db info command
This commit is contained in:
committed by
T.v.Dein
parent
3de65aa1c3
commit
8e400c6831
42
app/db.go
42
app/db.go
@@ -49,6 +49,17 @@ type DbEntry struct {
|
|||||||
Size int
|
Size int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type BucketInfo struct {
|
||||||
|
Name string
|
||||||
|
Keys int
|
||||||
|
Size int
|
||||||
|
}
|
||||||
|
|
||||||
|
type DbInfo struct {
|
||||||
|
Buckets []BucketInfo
|
||||||
|
Path string
|
||||||
|
}
|
||||||
|
|
||||||
// Post process an entry for list output.
|
// Post process an entry for list output.
|
||||||
// Do NOT call it during write processing!
|
// Do NOT call it during write processing!
|
||||||
func (entry *DbEntry) Normalize() {
|
func (entry *DbEntry) Normalize() {
|
||||||
@@ -352,3 +363,34 @@ func (db *DB) Import(attr *DbAttr) (string, error) {
|
|||||||
return fmt.Sprintf("backed up database file to %s\nimported %d database entries\n",
|
return fmt.Sprintf("backed up database file to %s\nimported %d database entries\n",
|
||||||
newfile, len(entries)), nil
|
newfile, len(entries)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db *DB) Info() (*DbInfo, error) {
|
||||||
|
if err := db.Open(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
info := &DbInfo{Path: db.Dbfile}
|
||||||
|
|
||||||
|
err := db.DB.View(func(tx *bolt.Tx) error {
|
||||||
|
tx.ForEach(func(name []byte, bucket *bolt.Bucket) error {
|
||||||
|
binfo := BucketInfo{Name: string(name)}
|
||||||
|
err := bucket.ForEach(func(key, entry []byte) error {
|
||||||
|
binfo.Size += len(entry)
|
||||||
|
binfo.Keys++
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
info.Buckets = append(info.Buckets, binfo)
|
||||||
|
return nil
|
||||||
|
|
||||||
|
})
|
||||||
|
return nil
|
||||||
|
|
||||||
|
})
|
||||||
|
return info, err
|
||||||
|
}
|
||||||
|
|||||||
23
cmd/crud.go
23
cmd/crud.go
@@ -352,3 +352,26 @@ func Serve(conf *cfg.Config) *cobra.Command {
|
|||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Info(conf *cfg.Config) *cobra.Command {
|
||||||
|
var cmd = &cobra.Command{
|
||||||
|
Use: "info",
|
||||||
|
Short: "info",
|
||||||
|
Long: `show info about database`,
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
// errors at this stage do not cause the usage to be shown
|
||||||
|
cmd.SilenceUsage = true
|
||||||
|
|
||||||
|
info, err := conf.DB.Info()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return output.Info(os.Stdout, conf, info)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd.PersistentFlags().StringVarP(&conf.Listen, "listen", "l", "localhost:8787", "host:port")
|
||||||
|
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ func Execute() {
|
|||||||
rootCmd.PersistentFlags().StringVarP(&conf.Dbfile, "dbfile", "f",
|
rootCmd.PersistentFlags().StringVarP(&conf.Dbfile, "dbfile", "f",
|
||||||
filepath.Join(home, ".config", "anydb", "default.db"), "DB file to use")
|
filepath.Join(home, ".config", "anydb", "default.db"), "DB file to use")
|
||||||
rootCmd.PersistentFlags().StringVarP(&conf.Dbbucket, "bucket", "b",
|
rootCmd.PersistentFlags().StringVarP(&conf.Dbbucket, "bucket", "b",
|
||||||
app.BucketData, "use other bucket (default: " + app.BucketData +")")
|
app.BucketData, "use other bucket (default: "+app.BucketData+")")
|
||||||
|
|
||||||
rootCmd.AddCommand(Set(&conf))
|
rootCmd.AddCommand(Set(&conf))
|
||||||
rootCmd.AddCommand(List(&conf))
|
rootCmd.AddCommand(List(&conf))
|
||||||
@@ -103,6 +103,7 @@ func Execute() {
|
|||||||
rootCmd.AddCommand(Import(&conf))
|
rootCmd.AddCommand(Import(&conf))
|
||||||
rootCmd.AddCommand(Serve(&conf))
|
rootCmd.AddCommand(Serve(&conf))
|
||||||
rootCmd.AddCommand(Man(&conf))
|
rootCmd.AddCommand(Man(&conf))
|
||||||
|
rootCmd.AddCommand(Info(&conf))
|
||||||
|
|
||||||
err = rootCmd.Execute()
|
err = rootCmd.Execute()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import (
|
|||||||
"github.com/tlinden/anydb/app"
|
"github.com/tlinden/anydb/app"
|
||||||
"github.com/tlinden/anydb/cfg"
|
"github.com/tlinden/anydb/cfg"
|
||||||
"golang.org/x/term"
|
"golang.org/x/term"
|
||||||
|
//"github.com/alecthomas/repr"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Print(writer io.Writer, conf *cfg.Config, attr *app.DbAttr, entry *app.DbEntry) error {
|
func Print(writer io.Writer, conf *cfg.Config, attr *app.DbAttr, entry *app.DbEntry) error {
|
||||||
@@ -93,3 +94,14 @@ func WriteFile(writer io.Writer, conf *cfg.Config, attr *app.DbAttr, entry *app.
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Info(writer io.Writer, conf *cfg.Config, info *app.DbInfo) error {
|
||||||
|
// repr.Println(info)
|
||||||
|
fmt.Fprintf(writer, "Database: %s\n", info.Path)
|
||||||
|
|
||||||
|
for _, bucket := range info.Buckets {
|
||||||
|
|
||||||
|
fmt.Fprintf(writer, "Bucket: %s\n Size: %d\n Keys: %d\n\n", bucket.Name, bucket.Size, bucket.Keys)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user