func httpLog(c *echo.Context) error { r := c.Request() w := c.Response() e := c.Get("engine").(storage.Engine) domain := c.Param("domain") iter, code, err := domainIteratorResource(domain, r, e) if err != nil { return c.JSON(code, map[string]interface{}{ "error": fmt.Sprint(err), }) } facts, err := origins.ReadAll(iter) if err != nil { return c.JSON(code, map[string]interface{}{ "error": fmt.Sprint(err), }) } return json.NewEncoder(w).Encode(facts) }
func TestLogReader(t *testing.T) { domain := "test" // Transactions n := 100 // Size of write m := 100 engine := randStorage(domain, n, m) // Open the commit log. log, err := view.OpenLog(engine, domain, "commit") if err != nil { t.Fatal(err) } iter := log.Now() facts, err := origins.ReadAll(iter) if err != nil { t.Fatal(err) } if len(facts) != n*m { t.Errorf("expected %d facts, got %d", n*m, len(facts)) } }
func TestLogSince(t *testing.T) { domain := "test" // Transactions n := 100 // Size of write m := 100 engine := randStorage(domain, n, m) // Open the commit log. log, err := view.OpenLog(engine, domain, "commit") // 1 minute before min := time.Now().Add(-time.Minute) iter := log.Since(min) facts, err := origins.ReadAll(iter) if err != nil { t.Fatal(err) } if len(facts) != n*m { t.Errorf("expected %d facts, got %d", n*m, len(facts)) } // 1 minute later min = time.Now().Add(time.Minute) iter = log.Since(min) facts, err = origins.ReadAll(iter) if err != nil { t.Fatal(err) } if len(facts) != 0 { t.Errorf("expected 0 facts, got %d", len(facts)) } }
func (p *Pipeline) initCache() error { logrus.Debugf("transactor.Pipeline(%s): initializing cache", p.Domain) p.initialized = true log, err := view.OpenLog(p.engine, p.Domain, commitLogName) // This denotes the domain is new. if err == view.ErrDoesNotExist { return nil } else if err != nil { return err } facts, err := origins.ReadAll(log.Asof(p.segment.Time)) if err != nil { return err } // Sort facts by entity. origins.Timsort(facts, origins.EAVTComparator) // Group the facts by entity. giter := origins.Groupby(origins.NewBuffer(facts), func(f1, f2 *origins.Fact) bool { return f1.Entity.Is(f2.Entity) }) // Initializing ctrie. cache := ctrie.New(nil) err = origins.MapFacts(giter, func(facts origins.Facts) error { cache.Insert([]byte(facts[0].Entity.Name), facts) return nil }) p.cache = cache logrus.Debugf("transactor.Pipeline(%s): cache initialized", p.Domain) return err }