From 88a68aacb8c6e3b992176b1b3662b5eadc830b06 Mon Sep 17 00:00:00 2001 From: Carlo Strub Date: Sat, 11 Mar 2017 20:02:17 +0000 Subject: [PATCH] create database --- database.go | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++ filter_test.go | 12 +++++++++ glide.lock | 6 +++-- glide.yaml | 2 ++ main.go | 21 ++++++++++------ 5 files changed, 100 insertions(+), 9 deletions(-) create mode 100644 database.go create mode 100644 filter_test.go diff --git a/database.go b/database.go new file mode 100644 index 0000000..3318680 --- /dev/null +++ b/database.go @@ -0,0 +1,68 @@ +package main + +import ( + "github.com/boltdb/bolt" +) + +// openDB creates and opens a new database and its respective buckets (if required) +func openDB(path string) (db *bolt.DB, err error) { + + // Open the sisyphus.db data file in your current directory. + // It will be created if it doesn't exist. + db, err = bolt.Open(path, 0600, nil) + if err != nil { + return db, err + } + + // Create DB bucket for the map of processed e-mail IDs + err = db.Update(func(tx *bolt.Tx) error { + _, err := tx.CreateBucketIfNotExists([]byte("Processed")) + if err != nil { + return err + } + return nil + }) + if err != nil { + return db, err + } + + // Create DB bucket for word lists + err = db.Update(func(tx *bolt.Tx) error { + _, err := tx.CreateBucketIfNotExists([]byte("Wordlists")) + if err != nil { + return err + } + return nil + }) + if err != nil { + return db, err + } + + // Create DB bucket for Junk inside bucket Wordlists + err = db.Update(func(tx *bolt.Tx) error { + b := tx.Bucket([]byte("Wordlists")) + _, err := b.CreateBucketIfNotExists([]byte("Junk")) + if err != nil { + return err + } + return nil + }) + if err != nil { + return db, err + } + + // Create DB bucket for Junk inside bucket Wordlists + err = db.Update(func(tx *bolt.Tx) error { + b := tx.Bucket([]byte("Wordlists")) + _, err := b.CreateBucketIfNotExists([]byte("Good")) + if err != nil { + return err + } + return nil + }) + if err != nil { + return db, err + } + + return db, nil +} diff --git a/filter_test.go b/filter_test.go new file mode 100644 index 0000000..abc00b1 --- /dev/null +++ b/filter_test.go @@ -0,0 +1,12 @@ +package main_test + +import ( + . "github.com/carlostrub/sisyphus" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Filter", func() { + +}) diff --git a/glide.lock b/glide.lock index b333d09..71f9cbc 100644 --- a/glide.lock +++ b/glide.lock @@ -1,6 +1,8 @@ -hash: 05d37c1ae8f818b05d066dce22d2e3fa625b8cce35ddfe4d746eaf49b11320b2 -updated: 2017-03-10T19:22:40.441940049Z +hash: 278ebf659dc6f1d5de92408300483b75e76c9f5d81febc25b83bfc585d7457ad +updated: 2017-03-10T22:33:54.628681045Z imports: +- name: github.com/boltdb/bolt + version: 583e8937c61f1af6513608ccc75c97b6abdf4ff9 - name: github.com/jbrukh/bayesian version: bf3f261f9a9c61145c60d47665b0518cc32c774f - name: github.com/kennygrant/sanitize diff --git a/glide.yaml b/glide.yaml index 8281373..8da1a86 100644 --- a/glide.yaml +++ b/glide.yaml @@ -3,6 +3,8 @@ import: - package: github.com/jbrukh/bayesian - package: github.com/kennygrant/sanitize - package: github.com/luksen/maildir +- package: github.com/boltdb/bolt + version: ^1.3.0 testImport: - package: github.com/onsi/ginkgo - package: github.com/onsi/gomega diff --git a/main.go b/main.go index 441f3b6..f3d20ef 100644 --- a/main.go +++ b/main.go @@ -13,22 +13,29 @@ var ( ) func main() { - // Get the Maildir to be handled + + // Get the Maildir to be handled and the DB wd, err := os.Getwd() if err != nil { - log.Fatal(err) + return log.Fatalf("get working directory: %s", err) } - maildir := flag.String("d", wd+"/Maildir", "Path of the Maildir to be handled") + maildir := flag.String("maildir", wd+"/Maildir", "Path to the Maildir") + database := flag.String("database", wd+"/sisyphus.db", "Path to the sisyphus database") flag.Parse() - // Load the Maildir content + // Load the Maildir mails, err := Index(*maildir) if err != nil { - log.Fatal(err) + return log.Fatalf("load Maildir content: %s", err) } fmt.Println(mails) - // Create a classifier - //classifier := bayesian.NewClassifier(Good, Junk) + // Open the database + db, err := openDB("sisyphus.db", 0600, nil) + if err != nil { + return log.Fatalf("open database: %s", err) + } + defer db.Close() + }