Skip to content

Commit

Permalink
working realtime visitors
Browse files Browse the repository at this point in the history
  • Loading branch information
gernest committed Feb 8, 2024
1 parent 48d323f commit 6fdbe3b
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 23 deletions.
17 changes: 17 additions & 0 deletions camel/case.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package camel

import (
"strings"
"unicode"
)

func Case(name string) string {
first := true
return strings.Map(func(r rune) rune {
if first {
first = false
return unicode.ToLower(r)
}
return r
}, name)
}
3 changes: 2 additions & 1 deletion db/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ package db
import (
"github.com/apache/arrow/go/v15/arrow"
"github.com/apache/arrow/go/v15/arrow/array"
"github.com/vinceanalytics/vince/camel"
v1 "github.com/vinceanalytics/vince/gen/go/staples/v1"
)

func Timestamps(r arrow.Record) (lo, hi int64) {
for i := 0; i < int(r.NumCols()); i++ {
if r.ColumnName(i) == v1.Filters_Timestamp.String() {
if r.ColumnName(i) == camel.Case(v1.Filters_Timestamp.String()) {
ts := r.Column(i).(*array.Int64)
lo = ts.Value(0)
hi = ts.Value(ts.Len() - 1)
Expand Down
13 changes: 11 additions & 2 deletions filters/filters.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package filters

import (
"github.com/blevesearch/vellum/regexp"
"github.com/vinceanalytics/vince/camel"
v1 "github.com/vinceanalytics/vince/gen/go/staples/v1"
)

var PropToProjection = map[v1.Property]v1.Filters_Projection{
var propToProjection = map[v1.Property]v1.Filters_Projection{
v1.Property_event: v1.Filters_Event,
v1.Property_page: v1.Filters_Path,
v1.Property_entry_page: v1.Filters_EntryPage,
Expand All @@ -28,6 +29,14 @@ var PropToProjection = map[v1.Property]v1.Filters_Projection{
v1.Property_city: v1.Filters_City,
}

func Column(p v1.Property) string {
return camel.Case(propToProjection[p].String())
}

func Projection(p v1.Property) v1.Filters_Projection {
return propToProjection[p]
}

type CompiledFilter struct {
Column string
Op v1.Filter_OP
Expand All @@ -49,7 +58,7 @@ func CompileFilters(f *v1.Filters) ([]*CompiledFilter, error) {

func compileFilter(f *v1.Filter) (*CompiledFilter, error) {
o := &CompiledFilter{
Column: PropToProjection[f.Property].String(),
Column: Column(f.Property),
Op: f.Op,
}
o.Value = []byte(f.Value)
Expand Down
3 changes: 2 additions & 1 deletion lsm/lsm.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"github.com/apache/arrow/go/v15/arrow/util"
"github.com/docker/go-units"
"github.com/oklog/ulid/v2"
"github.com/vinceanalytics/vince/camel"
"github.com/vinceanalytics/vince/db"
"github.com/vinceanalytics/vince/filters"
v1 "github.com/vinceanalytics/vince/gen/go/staples/v1"
Expand Down Expand Up @@ -173,7 +174,7 @@ func (lsm *Tree[T]) Scan(
}
project := make([]int, 0, len(fs.Projection))
for _, name := range fs.Projection {
col, ok := lsm.mapping[staples.Camel(name.String())]
col, ok := lsm.mapping[camel.Case(name.String())]
if !ok {
return nil, fmt.Errorf("column %s does not exist", name)
}
Expand Down
20 changes: 4 additions & 16 deletions staples/arrow.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@ package staples
import (
"fmt"
"reflect"
"strings"
"unicode"

"github.com/apache/arrow/go/v15/arrow"
"github.com/apache/arrow/go/v15/arrow/array"
"github.com/apache/arrow/go/v15/arrow/memory"
"github.com/vinceanalytics/vince/camel"
)

type Arrow[T any] struct {
Expand Down Expand Up @@ -62,7 +61,7 @@ func build(r reflect.Type) (o []arrow.Field) {
}
if base, ok := baseTypes[typ.Kind()]; ok {
o = append(o, arrow.Field{
Name: Camel(f.Name),
Name: camel.Case(f.Name),
Type: base,
Nullable: f.Type.Kind() == reflect.Ptr || typ.Kind() == reflect.String,
})
Expand All @@ -73,17 +72,6 @@ func build(r reflect.Type) (o []arrow.Field) {
return
}

func Camel(name string) string {
first := true
return strings.Map(func(r rune) rune {
if first {
first = false
return unicode.ToLower(r)
}
return r
}, name)
}

var baseTypes = map[reflect.Kind]arrow.DataType{
reflect.Bool: arrow.FixedWidthTypes.Boolean,
reflect.String: &arrow.DictionaryType{
Expand Down Expand Up @@ -229,8 +217,8 @@ func NewTaker(mem memory.Allocator, as *arrow.Schema) (*array.RecordBuilder, fun
fields[i] = take(b.Field(i))
}
return b, func(v arrow.Record, columns []int, rows []uint32) {
for _, i := range columns {
fields[i](v.Column(i), rows)
for idx, col := range columns {
fields[idx](v.Column(col), rows)
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion staples/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/RoaringBitmap/roaring"
"github.com/apache/arrow/go/v15/arrow"
"github.com/apache/arrow/go/v15/arrow/array"
"github.com/vinceanalytics/vince/camel"
"github.com/vinceanalytics/vince/filters"
"github.com/vinceanalytics/vince/index"
"github.com/vinceanalytics/vince/logger"
Expand Down Expand Up @@ -70,7 +71,7 @@ func NewIndex() *Index {
if !f.IsExported() {
continue
}
idx.mapping[Camel(f.Name)] = r.Field(i).Interface().(*index.ColumnImpl)
idx.mapping[camel.Case(f.Name)] = r.Field(i).Interface().(*index.ColumnImpl)
}
return idx
}
Expand Down
2 changes: 1 addition & 1 deletion stats/breakdown.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func BreakDown(w http.ResponseWriter, r *http.Request) {
// TODO: run this concurrently
for _, prop := range req.Property {
var groups []*v1.BreakDown_Response_Group
for key, bitmap := range hashProp(mapping[filters.PropToProjection[prop].String()]) {
for key, bitmap := range hashProp(mapping[filters.Column(prop)]) {
b.AppendValues(bitmap.ToArray(), nil)
idx := b.NewUint32Array()
var values []*v1.Value
Expand Down
2 changes: 1 addition & 1 deletion stats/timeseries.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ func metricsToProjection(f *v1.Filters, me []v1.Metric, props ...v1.Property) {
m := make(map[v1.Filters_Projection]struct{})
m[v1.Filters_Timestamp] = struct{}{}
for _, p := range props {
m[filters.PropToProjection[p]] = struct{}{}
m[filters.Projection(p)] = struct{}{}
}
for _, v := range me {
switch v {
Expand Down

0 comments on commit 6fdbe3b

Please sign in to comment.