本文整理汇总了Golang中github.com/araddon/dateparse.ParseAny函数的典型用法代码示例。如果您正苦于以下问题:Golang ParseAny函数的具体用法?Golang ParseAny怎么用?Golang ParseAny使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ParseAny函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: TimeExtractFunc
func TimeExtractFunc(ctx expr.EvalContext, items ...value.Value) (value.StringValue, bool) {
switch len(items) {
case 0:
// if we have no "items", return time associated with ctx
// This is an alias of now()
t := ctx.Ts()
if !t.IsZero() {
return value.NewStringValue(t.String()), true
}
return value.EmptyStringValue, false
case 1:
// if only 1 item, convert item to time
dateStr, ok := value.ToString(items[0].Rv())
if !ok {
return value.EmptyStringValue, false
}
t, err := dateparse.ParseAny(dateStr)
if err != nil {
return value.EmptyStringValue, false
}
return value.NewStringValue(t.String()), true
case 2:
// if we have 2 items, the first is the time string
// and the second is the format string.
// Use leekchan/timeutil package
dateStr, ok := value.ToString(items[0].Rv())
if !ok {
return value.EmptyStringValue, false
}
formatStr, ok := value.ToString(items[1].Rv())
if !ok {
return value.EmptyStringValue, false
}
t, err := dateparse.ParseAny(dateStr)
if err != nil {
return value.EmptyStringValue, false
}
formatted := timeutil.Strftime(&t, formatStr)
return value.NewStringValue(formatted), true
default:
return value.EmptyStringValue, false
}
}
开发者ID:allisonmorgan,项目名称:qlbridge,代码行数:49,代码来源:builtins.go
示例2: Cast
func Cast(valType ValueType, val Value) (Value, error) {
switch valType {
case ByteSliceType:
return NewByteSliceValue([]byte(val.ToString())), nil
case TimeType:
switch valt := val.(type) {
case StringValue:
if t, err := dateparse.ParseAny(valt.Val()); err == nil {
return NewTimeValue(t), nil
} else {
return nil, err
}
case TimeValue:
return valt, nil
}
case StringType:
sv := val.ToString()
return NewStringValue(sv), nil
case IntType:
iv, ok := ToInt64(val.Rv())
if ok {
return NewIntValue(iv), nil
}
return nil, ErrConversion
}
return nil, ErrConvestionNotSupported
}
开发者ID:allisonmorgan,项目名称:qlbridge,代码行数:27,代码来源:coerce.go
示例3: Yy
// Get year in integer from field, must be able to convert to date
//
// yy() => 15, true // assuming it is 2015
// yy("2014-03-01") => 14, true
//
func Yy(ctx expr.EvalContext, items ...value.Value) (value.IntValue, bool) {
yy := 0
if len(items) == 0 {
if !ctx.Ts().IsZero() {
yy = ctx.Ts().Year()
} else {
// Do we want to use Now()?
}
} else if len(items) == 1 {
//u.Debugf("has 1 items? %#v", items[0].Rv())
dateStr, ok := value.ToString(items[0].Rv())
if !ok {
return value.NewIntValue(0), false
}
//u.Debugf("v=%v %v", dateStr, items[0].Rv())
if t, err := dateparse.ParseAny(dateStr); err != nil {
return value.NewIntValue(0), false
} else {
yy = t.Year()
}
} else {
return value.NewIntValue(0), false
}
if yy >= 2000 {
yy = yy - 2000
} else if yy >= 1900 {
yy = yy - 1900
}
//u.Debugf("yy = %v", yy)
return value.NewIntValue(int64(yy)), true
}
开发者ID:kyledj,项目名称:qlbridge,代码行数:38,代码来源:builtins.go
示例4: TestStaticDataSource
func TestStaticDataSource(t *testing.T) {
static := NewStaticDataSource("users", 0, nil, []string{"user_id", "name", "email", "created", "roles"})
created, _ := dateparse.ParseAny("2015/07/04")
static.Put(nil, &datasource.KeyInt{123}, []driver.Value{123, "aaron", "[email protected]", created.In(time.UTC), []string{"admin"}})
assert.Tf(t, static.Length() == 1, "has 1 rows after Put()")
row, _ := static.Get(123)
assert.Tf(t, row != nil, "Should find row with Get() part of Seeker interface")
di, ok := row.Body().(*datasource.SqlDriverMessageMap)
assert.Tf(t, ok, "Must be []driver.Value type: %T", row.Body())
vals := di.Values()
assert.Tf(t, len(vals) == 5, "want 5 cols in user but got %v", len(vals))
assert.Tf(t, vals[0].(int) == 123, "want user_id=123 but got %v", vals[0])
assert.Tf(t, vals[2].(string) == "[email protected]", "want [email protected] but got %v", vals[2])
static.Put(nil, &datasource.KeyInt{123}, []driver.Value{123, "aaron", "[email protected]", created.In(time.UTC), []string{"root", "admin"}})
assert.Tf(t, static.Length() == 1, "has 1 rows after Put()")
row, _ = static.Get(123)
assert.Tf(t, row != nil, "Should find row with Get() part of Seeker interface")
vals2 := row.Body().(*datasource.SqlDriverMessageMap).Values()
assert.Tf(t, vals2[2].(string) == "[email protected]", "want [email protected] but got %v", vals2[2])
assert.Equal(t, []string{"root", "admin"}, vals2[4], "Roles should match updated vals")
assert.Equal(t, created, vals2[3], "created date should match updated vals")
}
开发者ID:kyledj,项目名称:qlbridge,代码行数:27,代码来源:btree_test.go
示例5: ToDate
// todate: convert to Date
//
// todate(field) uses araddon\dateparse util to recognize formats
//
// todate("01/02/2006", field ) uses golang date parse rules
// first parameter is the layout/format
//
//
func ToDate(ctx expr.EvalContext, items ...value.Value) (value.TimeValue, bool) {
if len(items) == 1 {
dateStr, ok := value.ToString(items[0].Rv())
if !ok {
return value.TimeZeroValue, false
}
//u.Infof("v=%v %v ", v, item.Rv())
if t, err := dateparse.ParseAny(dateStr); err == nil {
return value.NewTimeValue(t), true
}
} else if len(items) == 2 {
dateStr, ok := value.ToString(items[1].Rv())
if !ok {
return value.TimeZeroValue, false
}
formatStr, ok := value.ToString(items[0].Rv())
if !ok {
return value.TimeZeroValue, false
}
//u.Infof("hello layout=%v time=%v", formatStr, dateStr)
if t, err := time.Parse(formatStr, dateStr); err == nil {
return value.NewTimeValue(t), true
}
}
return value.TimeZeroValue, false
}
开发者ID:kyledj,项目名称:qlbridge,代码行数:36,代码来源:builtins.go
示例6: Yy
// Get year in integer from date
func Yy(ctx expr.EvalContext, items ...value.Value) (value.IntValue, bool) {
yy := 0
if len(items) == 0 {
if !ctx.Ts().IsZero() {
yy = ctx.Ts().Year()
}
} else if len(items) == 1 {
dateStr, ok := value.ToString(items[0].Rv())
if !ok {
return value.NewIntValue(0), false
}
//u.Infof("v=%v %v ", v, item.Rv())
if t, err := dateparse.ParseAny(dateStr); err != nil {
return value.NewIntValue(0), false
} else {
yy = t.Year()
}
} else {
return value.NewIntValue(0), false
}
if yy >= 2000 {
yy = yy - 2000
} else if yy >= 1900 {
yy = yy - 1900
}
//u.Infof("%v yy = %v", item, yy)
return value.NewIntValue(int64(yy)), true
}
开发者ID:jmptrader,项目名称:qlbridge,代码行数:31,代码来源:builtins.go
示例7: TestMemDb
func TestMemDb(t *testing.T) {
created, _ := dateparse.ParseAny("2015/07/04")
db, err := NewMemDb("users", []string{"user_id", "name", "email", "created", "roles"})
assert.Tf(t, err == nil, "wanted no error got %v", err)
c, err := db.Open("users")
assert.Tf(t, err == nil, "wanted no error got %v", err)
dc, ok := c.(schema.ConnAll)
assert.T(t, ok)
dc.Put(nil, &datasource.KeyInt{123}, []driver.Value{123, "aaron", "[email protected]", created.In(time.UTC), []string{"admin"}})
row, err := dc.Get(123)
assert.T(t, err == nil)
assert.Tf(t, row != nil, "Should find row with Get() part of Seeker interface")
di, ok := row.(*datasource.SqlDriverMessage)
assert.Tf(t, ok, "Must be []driver.Value type: %T", row)
vals := di.Vals
assert.Tf(t, len(vals) == 5, "want 5 cols in user but got %v", len(vals))
assert.Tf(t, vals[0].(int) == 123, "want user_id=123 but got %v", vals[0])
assert.Tf(t, vals[2].(string) == "[email protected]", "want [email protected] but got %v", vals[2])
dc.Put(nil, &datasource.KeyInt{123}, []driver.Value{123, "aaron", "[email protected]", created.In(time.UTC), []string{"root", "admin"}})
row, _ = dc.Get(123)
assert.Tf(t, row != nil, "Should find row with Get() part of Seeker interface")
vals2 := row.Body().([]driver.Value)
assert.Tf(t, vals2[2].(string) == "[email protected]", "want [email protected] but got %v", vals2[2])
assert.Equal(t, []string{"root", "admin"}, vals2[4], "Roles should match updated vals")
assert.Equal(t, created, vals2[3], "created date should match updated vals")
}
开发者ID:allisonmorgan,项目名称:qlbridge,代码行数:32,代码来源:db_test.go
示例8: guessValueType
func guessValueType(val string) value.ValueType {
if _, err := strconv.ParseInt(val, 10, 64); err == nil {
return value.IntType
} else if _, err := strconv.ParseBool(val); err == nil {
return value.IntType
} else if _, err := strconv.ParseFloat(val, 64); err == nil {
return value.NumberType
} else if _, err := dateparse.ParseAny(val); err == nil {
return value.TimeType
}
return value.StringType
}
开发者ID:allisonmorgan,项目名称:qlbridge,代码行数:12,代码来源:introspect.go
示例9: ToTimestamp
// totimestamp: convert to date, then to unix Seconds
//
func ToTimestamp(ctx expr.EvalContext, item value.Value) (value.IntValue, bool) {
dateStr, ok := value.ToString(item.Rv())
if !ok {
return value.NewIntValue(0), false
}
if t, err := dateparse.ParseAny(dateStr); err == nil {
//u.Infof("v=%v %v unix=%v", item, item.Rv(), t.Unix())
return value.NewIntValue(int64(t.Unix())), true
}
return value.NewIntValue(0), false
}
开发者ID:allisonmorgan,项目名称:qlbridge,代码行数:15,代码来源:builtins.go
示例10: ToDate
// todate
func ToDate(ctx expr.EvalContext, item value.Value) (value.TimeValue, bool) {
dateStr, ok := value.ToString(item.Rv())
if !ok {
return value.TimeZeroValue, false
}
//u.Infof("v=%v %v ", v, item.Rv())
if t, err := dateparse.ParseAny(dateStr); err == nil {
return value.NewTimeValue(t), true
}
return value.TimeZeroValue, false
}
开发者ID:jmptrader,项目名称:qlbridge,代码行数:14,代码来源:builtins.go
示例11: Scan
func (m *TimeValue) Scan(src interface{}) error {
//u.Debugf("scan: '%v'", src)
var t time.Time
switch val := src.(type) {
case string:
//u.Infof("trying to scan string: '%v'", val)
t2, err := dateparse.ParseAny(val)
if err == nil {
*m = TimeValue(t2)
return nil
}
//u.Infof("%v %v", t2, err)
err = json.Unmarshal([]byte(val), &t)
if err == nil {
*m = TimeValue(t)
} else {
u.Warnf("error for %q err=%v", val, err)
return err
}
case []byte:
t2, err := dateparse.ParseAny(string(val))
if err == nil {
*m = TimeValue(t2)
return nil
}
err = json.Unmarshal(val, &t)
if err == nil {
*m = TimeValue(t)
} else {
return err
}
case nil:
return nil
default:
u.Warnf("unknown type: %T", m)
return errors.New("Incompatible type for TimeValue")
}
return nil
}
开发者ID:allisonmorgan,项目名称:qlbridge,代码行数:39,代码来源:datatypes.go
示例12: HourOfDay
// hour of day [0-23]
func HourOfDay(ctx expr.EvalContext, items ...value.Value) (value.IntValue, bool) {
if len(items) == 0 {
if !ctx.Ts().IsZero() {
return value.NewIntValue(int64(ctx.Ts().Hour())), true
}
} else if len(items) == 1 {
dateStr, ok := value.ToString(items[0].Rv())
if !ok {
return value.NewIntValue(0), false
}
//u.Infof("v=%v %v ", v, items[0].Rv())
if t, err := dateparse.ParseAny(dateStr); err == nil {
return value.NewIntValue(int64(t.Hour())), true
}
}
return value.NewIntValue(0), false
}
开发者ID:kyledj,项目名称:qlbridge,代码行数:20,代码来源:builtins.go
示例13: YyMm
// Get yymm in 4 digits from argument if supplied, else uses message context ts
//
func YyMm(ctx expr.EvalContext, items ...value.Value) (value.StringValue, bool) {
if len(items) == 0 {
if !ctx.Ts().IsZero() {
t := ctx.Ts()
return value.NewStringValue(t.Format(yymmTimeLayout)), true
}
} else if len(items) == 1 {
dateStr, ok := value.ToString(items[0].Rv())
if !ok {
return value.EmptyStringValue, false
}
//u.Infof("v=%v %v ", v, items[0].Rv())
if t, err := dateparse.ParseAny(dateStr); err == nil {
return value.NewStringValue(t.Format(yymmTimeLayout)), true
}
}
return value.EmptyStringValue, false
}
开发者ID:kyledj,项目名称:qlbridge,代码行数:22,代码来源:builtins.go
示例14: Yy
func Yy(ctx expr.EvalContext, item value.Value) (value.IntValue, bool) {
//u.Info("yy: %T", item)
val, ok := value.ToString(item.Rv())
if !ok || val == "" {
return value.NewIntValue(0), false
}
//u.Infof("v=%v %v ", val, item.Rv())
if t, err := dateparse.ParseAny(val); err == nil {
yy := t.Year()
if yy >= 2000 {
yy = yy - 2000
} else if yy >= 1900 {
yy = yy - 1900
}
//u.Infof("Yy = %v yy = %v", item, yy)
return value.NewIntValue(int64(yy)), true
}
return value.NewIntValue(0), false
}
开发者ID:schmichael,项目名称:qlbridge,代码行数:21,代码来源:vm_test.go
示例15: TestStructWrapper
func TestStructWrapper(t *testing.T) {
t1, _ := dateparse.ParseAny("12/18/2015")
tr := true
user := &User{
Name: "Yoda",
Created: t1,
Updated: &t1,
Authenticated: true,
HasSession: &tr,
Roles: []string{"admin", "api"},
BankAmount: 55.5,
}
readers := []expr.ContextReader{
datasource.NewContextWrapper(user),
datasource.NewContextSimpleNative(map[string]interface{}{
"str1": "str1",
"int1": 1,
"t1": t1,
"Name": "notyoda",
}),
}
nc := datasource.NewNestedContextReader(readers, time.Now())
expected := value.NewMapValue(map[string]interface{}{
"str1": "str1",
"int1": 1,
"Name": "Yoda",
"Authenticated": true,
"bankamount": 55.5,
"FullName": "Yoda, Jedi",
"Roles": []string{"admin", "api"},
})
for k, v := range expected.Val() {
//u.Infof("k:%v v:%#v", k, v)
checkval(t, nc, k, v)
}
}
开发者ID:allisonmorgan,项目名称:qlbridge,代码行数:40,代码来源:context_wrapper_test.go
示例16: MakeFileFlattener
// This formatter reads go files and performs:
// 1. Squashes multiple lines into one (as needed), Tries to squash panics(go) into one line
// 2. Reads out the LineType/Level [DEBUG,INFO,METRIC] into a field
//
// This expects log files in this format
// 2013-05-25 13:25:32.475 authctx.go:169: [DEBUG] sink Building sink for kafka from factory method
func MakeFileFlattener(filename string, msgChan chan *LineEvent) func(string) {
// Builder used to build the colored string.
buf := new(bytes.Buffer)
startsDate := false
prevWasDate := false
pos := 0
posEnd := 0
var dataType []byte
var loglevel string
var dateStr, prevDateStr string
var prevLogTs time.Time
lineCt := 0
return func(line string) {
lineCt++
if len(line) < 8 {
buf.WriteString(line)
return
}
startsDate = false
spaceCt := 0
// [DATE] [SOURCE] [LEVEL] [MESSAGE]
// 2014/07/10 11:04:20.653185 filter_fluentd.go:16: [DEBUG] %s
for i := 0; i < len(line); i++ {
r := line[i]
if r == ' ' {
if spaceCt == 1 {
dateStr = string(line[:i])
if dts, err := dateparse.ParseAny(dateStr); err == nil {
startsDate = true
defer func() {
// defer will run after prevDateStr already used to send message
prevLogTs = dts
prevDateStr = dateStr
}()
}
break
}
spaceCt++
}
}
// Find first square bracket wrapper: [WARN]
// 2014/07/10 11:04:20.653185 filter_fluentd.go:16: [DEBUG] %s
// datestr pos, posEnd
pos = strings.IndexRune(line, '[')
posEnd = strings.IndexRune(line, ']')
if pos > 0 && posEnd > 0 && pos < posEnd && len(line) > pos && len(line) > posEnd {
loglevel = line[pos+1 : posEnd]
// If we don't find, it probably wasn't one of [INFO],[WARN] etc so accumulate
if _, ok := expectedLevels[loglevel]; !ok {
buf.WriteString(line)
return
}
}
//u.Debugf("pos=%d datatype=%s num?=%v", pos, dataType, startsDate)
//u.Infof("starts with date?=%v prev?%v pos=%d lvl=%s short[]%v len=%d buf.len=%d", startsDate, prevWasDate, pos, loglevel, (posEnd-pos) < 8, len(line), buf.Len())
if pos == -1 && !prevWasDate {
// accumulate in buffer, probably/possibly a panic?
buf.WriteString(line)
buf.WriteString(" \n")
} else if !startsDate {
// accumulate in buffer
buf.WriteString(line)
buf.WriteString(" \n")
} else if posEnd-8 > pos {
// position of [block] too long, so ignore
buf.WriteString(line)
buf.WriteString(" \n")
} else if pos > 80 {
// [WARN] should be at beginning of line
buf.WriteString(line)
buf.WriteString(" \n")
} else {
// Line had [LEVEL] AND startsDate at start so go ahead and log it
if buf.Len() == 0 {
// lets buffer it, ensuring we have the completion of this line
buf.WriteString(line)
return
}
// we already have previous line in buffer
data, err := ioutil.ReadAll(buf)
if err == nil {
pos = bytes.IndexRune(data, '[')
posEnd = bytes.IndexRune(data, ']')
preFix := ""
if posEnd-8 > pos {
//.........这里部分代码省略.........
开发者ID:araddon,项目名称:loges,代码行数:101,代码来源:filter_fileflatten.go
示例17: init
var (
VerboseTests *bool = flag.Bool("vv", false, "Verbose Logging?")
)
func init() {
flag.Parse()
if *VerboseTests {
u.SetupLogging("debug")
u.SetColorOutput()
}
builtins.LoadAllBuiltins()
}
var (
t1, _ = dateparse.ParseAny("12/18/2019")
// This is the message context which will be added to all tests below
// and be available to the VM runtime for evaluation by using
// key's such as "int5" or "user_id"
msgContext = datasource.NewContextSimpleData(map[string]value.Value{
"int5": value.NewIntValue(5),
"str5": value.NewStringValue("5"),
"created": value.NewTimeValue(t1),
"bvalt": value.NewBoolValue(true),
"bvalf": value.NewBoolValue(false),
"user_id": value.NewStringValue("abc"),
"urls": value.NewStringsValue([]string{"abc", "123"}),
"hits": value.NewMapIntValue(map[string]int64{"google.com": 5, "bing.com": 1}),
"email": value.NewStringValue("[email protected]"),
})
vmTestsx = []vmTest{
开发者ID:allisonmorgan,项目名称:qlbridge,代码行数:30,代码来源:vm_test.go
示例18: TimeSeconds
func TimeSeconds(ctx expr.EvalContext, val value.Value) (value.NumberValue, bool) {
switch vt := val.(type) {
case value.StringValue:
ts := vt.ToString()
// First, lets try to treat it as a time/date and
// then extract unix seconds
if tv, err := dateparse.ParseAny(ts); err == nil {
return value.NewNumberValue(float64(tv.In(time.UTC).Unix())), true
}
// Since that didn't work, lets look for a variety of seconds/minutes type
// pseudo standards
// M10:30
// 10:30
// 100:30
//
if strings.HasPrefix(ts, "M") {
ts = ts[1:]
}
if strings.Contains(ts, ":") {
parts := strings.Split(ts, ":")
switch len(parts) {
case 1:
if iv, err := strconv.ParseInt(parts[0], 10, 64); err == nil {
return value.NewNumberValue(float64(iv)), true
}
if fv, err := strconv.ParseFloat(parts[0], 64); err == nil {
return value.NewNumberValue(fv), true
}
case 2:
min, sec := float64(0), float64(0)
if iv, err := strconv.ParseInt(parts[0], 10, 64); err == nil {
min = float64(iv)
} else if fv, err := strconv.ParseFloat(parts[0], 64); err == nil {
min = fv
}
if iv, err := strconv.ParseInt(parts[1], 10, 64); err == nil {
sec = float64(iv)
} else if fv, err := strconv.ParseFloat(parts[1], 64); err == nil {
sec = fv
}
if min > 0 || sec > 0 {
return value.NewNumberValue(60*min + sec), true
}
case 3:
}
} else {
parts := strings.Split(ts, ":")
if iv, err := strconv.ParseInt(parts[0], 10, 64); err == nil {
return value.NewNumberValue(float64(iv)), true
}
if fv, err := strconv.ParseFloat(parts[0], 64); err == nil {
return value.NewNumberValue(fv), true
}
}
case value.NumberValue:
return vt, true
case value.IntValue:
return vt.NumberValue(), true
}
return value.NewNumberValue(0), false
}
开发者ID:kyledj,项目名称:qlbridge,代码行数:65,代码来源:builtins.go
示例19: MakeFileFlattener
// This formatter reads go files and performs:
// 1. Squashes multiple lines into one (as needed), Tries to squash panics(go) into one line
// 2. Reads out the LineType/Level [DEBUG,INFO,METRIC] into a field
//
// This expects log files in this format
// 2013-05-25 13:25:32.475 authctx.go:169: [DEBUG] sink Building sink for kafka from factory method
func MakeFileFlattener(filename string, msgChan chan *LineEvent) func(string) {
// Builder used to build the colored string.
buf := new(bytes.Buffer)
startsDate := false
prevWasDate := false
pos := 0
posEnd := 0
var dataType []byte
var loglevel string
var dateStr string
lineCt := 0
return func(line string) {
lineCt++
if len(line) < 8 {
buf.WriteString(line)
return
}
startsDate = false
spaceCt := 0
// 2014/07/10 11:04:20.653185 filter_fluentd.go:16: [DEBUG] %s %s
for i := 0; i < len(line); i++ {
r := line[i]
if r == ' ' {
if spaceCt == 1 {
dateStr = string(line[:i])
if _, err := dateparse.ParseAny(dateStr); err == nil {
startsDate = true
}
break
}
spaceCt++
}
}
// Find first square bracket wrapper: [WARN]
pos = strings.IndexRune(line, '[')
posEnd = strings.IndexRune(line, ']')
if pos > 0 && posEnd > 0 && pos < posEnd && len(line) > pos && len(line) > posEnd {
loglevel = line[pos+1 : posEnd]
if _, ok := expectedLevels[loglevel]; !ok {
buf.WriteString(line)
return
}
}
//u.Debugf("pos=%d datatype=%s num?=%v", pos, dataType, startsDate)
//u.Infof("starts with date?=%v prev?%v pos=%d lvl=%s short[]%v len=%d buf.len=%d", startsDate, prevWasDate, pos, loglevel, (posEnd-pos) < 8, len(line), buf.Len())
if pos == -1 && !prevWasDate {
// accumulate in buffer, probably/possibly a panic?
buf.WriteString(line)
buf.WriteString(" \n")
} else if !startsDate {
// accumulate in buffer
buf.WriteString(line)
buf.WriteString(" \n")
} else if posEnd-8 > pos {
// position of [block] too long, so ignore
buf.WriteString(line)
buf.WriteString(" \n")
} else if pos > 80 {
// [WARN] should be at beginning of line
buf.WriteString(line)
buf.WriteString(" \n")
} else {
// Line had [STUFF] AND startsDate at start
if buf.Len() == 0 {
// lets buffer it, ensuring we have the completion of this line
buf.WriteString(line)
return
}
// we already have previous line in buffer
data, err := ioutil.ReadAll(buf)
if err == nil {
pos = bytes.IndexRune(data, '[')
posEnd = bytes.IndexRune(data, ']')
if posEnd-8 > pos {
//u.Warnf("level:%s \n\nline=%s", string(data[pos+1:posEnd]), string(data))
//buf.WriteString(line)
return
} else if pos > 0 && posEnd > 0 && pos < posEnd && len(data) > pos && len(data) > posEnd {
dataType = data[pos+1 : posEnd]
} else {
dataType = []byte("NA")
//u.Warnf("level:%s \n\nline=%s", string(data[pos+1:posEnd]), string(data))
}
// if !bytes.HasPrefix(data, datePrefix) {
// u.Warnf("ct=%d level:%s \n\nline=%s", lineCt, string(data[pos+1:posEnd]), string(data))
// }
//.........这里部分代码省略.........
开发者ID:morya,项目名称:loges,代码行数:101,代码来源:filter_fileflatten.go
示例20: walkBinary
//.........这里部分代码省略.........
for _, astr := range at.Val() {
for _, bval := range bt.Val() {
if astr == bval.ToString() {
return value.BoolValueTrue, true
}
}
}
return value.BoolValueFalse, true
case value.StringsValue:
for _, astr := range at.Val() {
for _, bstr := range bt.Val() {
if astr == bstr {
return value.BoolValueTrue, true
}
}
}
return value.BoolValueFalse, true
}
}
return nil, false
case value.TimeValue:
rht := time.Time{}
lht := at.Val()
var err error
switch bv := br.(type) {
case value.TimeValue:
rht = bv.Val()
case value.StringValue:
te := bv.Val()
if len(te) > 3 && strings.ToLower(te[:3]) == "now" {
// Is date math
rht, err = datemath.Eval(te[3:])
} else {
rht, err = dateparse.ParseAny(te)
}
if err != nil {
u.Warnf("error? %s err=%v", te, err)
return value.BoolValueFalse, false
}
case value.IntValue:
// really? we are going to try ints?
rht, err = dateparse.ParseAny(bv.ToString())
if err != nil {
return value.BoolValueFalse, false
}
if rht.Year() < 1800 || rht.Year() > 2300 {
return value.BoolValueFalse, false
}
default:
//u.Warnf("un-handled? %#v", bv)
}
// if rht.IsZero() {
// return nil, false
// }
switch node.Operator.T {
case lex.TokenEqual, lex.TokenEqualEqual:
if lht.Unix() == rht.Unix() {
return value.BoolValueTrue, true
}
return value.BoolValueFalse, true
case lex.TokenGT:
// lhexpr > rhexpr
if lht.Unix() > rht.Unix() {
return value.BoolValueTrue, true
}
return value.BoolValueFalse, true
开发者ID:allisonmorgan,项目名称:qlbridge,代码行数:67,代码来源:vm.go
注:本文中的github.com/araddon/dateparse.ParseAny函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论