Skip to content

Commit

Permalink
add new func
Browse files Browse the repository at this point in the history
  • Loading branch information
mylxsw committed Sep 3, 2020
1 parent 2ba009f commit 3c5248d
Show file tree
Hide file tree
Showing 9 changed files with 1,455 additions and 1,403 deletions.
2,774 changes: 1,387 additions & 1,387 deletions api/static.go

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions cmd/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package main
import (
"context"
"fmt"
"math/rand"
"os"
"runtime/debug"
"time"
Expand Down Expand Up @@ -235,6 +236,8 @@ func main() {
})

app.Main(func(conf *configs.Config, router *mux.Router, em event.Manager) {
rand.Seed(time.Now().Unix())

log.WithFields(log.Fields{
"config": conf,
}).Debug("configuration")
Expand Down
4 changes: 4 additions & 0 deletions dashboard/src/views/RuleEdit.vue
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,10 @@ let helpers = {
text: 'format "FORMAT" VAL',
displayText: 'format(format string, a ...interface{}) string | 格式化展示,调用 fmt.Sprintf'
},
{
text: 'number_beauty VAL',
displayText: 'number_beauty(num interface{}) string | 数字格式化展示,自动添加千分位分隔符'
},
{text: 'integer STR', displayText: 'integer(str string) int | 字符串转整数 '},
{
text: 'mysql_slowlog STR',
Expand Down
2 changes: 2 additions & 0 deletions internal/matcher/message_finger.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ import (
"github.com/mylxsw/adanos-alert/internal/repository"
)

// MessageFinger 消息指纹
type MessageFinger struct {
expr string
program *vm.Program
}

// NewMessageFinger create a new MessageFinger instance
func NewMessageFinger(fingerExpr string) (*MessageFinger, error) {
if fingerExpr == "" {
fingerExpr = `""`
Expand Down
1 change: 1 addition & 0 deletions internal/matcher/rule.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"time"
)

// Helpers 用于规则引擎的助手函数
type Helpers struct{}

// Lower returns a copy of the string s with all Unicode letters mapped to their lower case.
Expand Down
6 changes: 5 additions & 1 deletion internal/queue/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
"math/rand"
"sync"
"time"

Expand All @@ -13,6 +14,7 @@ import (
"github.com/mylxsw/container"
)

// Manager 队列管理接口
type Manager interface {
Enqueue(item repository.QueueJob) (string, error)
StartWorker(ctx context.Context, workerID string)
Expand All @@ -22,8 +24,10 @@ type Manager interface {
RegisterHandler(name string, handler Handler)
}

// Handler 队列消息处理器
type Handler func(item repository.QueueJob) error

// Info 队列状态信息
type Info struct {
StartAt time.Time `json:"start_at"`
WorkerNum int `json:"worker_num"`
Expand Down Expand Up @@ -208,7 +212,7 @@ func (manager *queueManager) handle(ctx context.Context, item repository.QueueJo
}

// try again latter
item.NextExecuteAt = time.Now().Add(time.Duration((item.RequeueTimes+1)*30) * time.Second)
item.NextExecuteAt = time.Now().Add(time.Duration((item.RequeueTimes+1)*30+rand.Intn(10)) * time.Second)
if _, err := manager.repo.Enqueue(item); err != nil {
log.WithFields(log.Fields{
"err": err.Error(),
Expand Down
48 changes: 36 additions & 12 deletions pkg/template/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,24 +32,25 @@ func Parse(templateStr string, data interface{}) (string, error) {
// CreateParse create a template parser
func CreateParser(templateStr string) (*template.Template, error) {
funcMap := template.FuncMap{
"cutoff": cutOff,
"Implode": Implode,
"explode": strings.Split,
"ident": leftIdent,
"json": jsonFormatter,
"datetime": datetimeFormat,
"datetime_noloc": datetimeFormatNoLoc,
"json_get": pkgJSON.Get,
"json_gets": pkgJSON.Gets,
"json_array": pkgJSON.GetArray,
"json_flatten": jsonFlatten,
"starts_with": startsWith,
"cutoff": cutOff,
"Implode": Implode,
"explode": strings.Split,
"ident": leftIdent,
"json": jsonFormatter,
"datetime": datetimeFormat,
"datetime_noloc": datetimeFormatNoLoc,
"json_get": pkgJSON.Get,
"json_gets": pkgJSON.Gets,
"json_array": pkgJSON.GetArray,
"json_flatten": jsonFlatten,
"starts_with": startsWith,
"ends_with": endsWith,
"trim": strings.Trim,
"trim_right": strings.TrimSuffix,
"trim_left": strings.TrimPrefix,
"trim_space": strings.TrimSpace,
"format": fmt.Sprintf,
"number_beauty": NumberBeauty,
"integer": toInteger,
"mysql_slowlog": parseMySQLSlowlog,
"open_falcon_im": ParseOpenFalconImMessage,
Expand Down Expand Up @@ -332,3 +333,26 @@ func Implode(elems interface{}, sep string) string {

return fmt.Sprintf("%v", elems)
}

// NumberBeauty 字符串数字格式化
func NumberBeauty(number interface{}) string {
str, ok := number.(string)
if !ok {
str = fmt.Sprintf("%.2f", number)
}

length := len(str)
if length < 4 {
return str
}
arr := strings.Split(str, ".") //用小数点符号分割字符串,为数组接收
length1 := len(arr[0])
if length1 < 4 {
return str
}
count := (length1 - 1) / 3
for i := 0; i < count; i++ {
arr[0] = arr[0][:length1-(i+1)*3] + "," + arr[0][length1-(i+1)*3:]
}
return strings.Join(arr, ".")
}
11 changes: 11 additions & 0 deletions pkg/template/template_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -307,3 +307,14 @@ func TestImplode(t *testing.T) {

assert.Equal(t, "{zhangsan 11},{lisi 22}", Implode(users, ","))
}

func TestNumberBeauty(t *testing.T) {
parsed, _ := Parse(`{{ index .Data "number" | format "%.0f" | number_beauty }} | {{ index .Data "number" | number_beauty }}`, struct {
Data map[string]interface{}
}{
Data: map[string]interface{}{
"number": 111133448958232.0,
},
})
assert.Equal(t, "111,133,448,958,232 | 111,133,448,958,232.00", parsed)
}
9 changes: 6 additions & 3 deletions pubsub/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,35 +13,38 @@ import (
"github.com/mylxsw/glacier/infra"
)

// ServiceProvider 消息监听 Provider
type ServiceProvider struct {
}

// Register 实现 ServiceProvider 接口
func (s ServiceProvider) Register(app container.Container) {
}

// Boot 实现 ServiceProvider 接口
func (s ServiceProvider) Boot(app infra.Glacier) {
app.MustResolve(func(em event.Manager, auditRepo repository.AuditLogRepo) {
// 用户变更事件监听
em.Listen(func(ev UserChangedEvent) {
auditRepo.Add(repository.AuditLog{
Type: repository.AuditLogTypeAction,
Body: fmt.Sprintf("[%s] User %s: %s", ev.CreatedAt.Format(time.RFC3339), ev.Type, serialize(ev.User)),
Body: fmt.Sprintf("[%s] User %s %s", ev.CreatedAt.Format(time.RFC3339), ev.Type, serialize(ev.User)),
})
})

// 规则变更事件监听
em.Listen(func(ev RuleChangedEvent) {
auditRepo.Add(repository.AuditLog{
Type: repository.AuditLogTypeAction,
Body: fmt.Sprintf("[%s] Rule %s: %s", ev.CreatedAt.Format(time.RFC3339), ev.Type, serialize(ev.Rule)),
Body: fmt.Sprintf("[%s] Rule %s %s", ev.CreatedAt.Format(time.RFC3339), ev.Type, serialize(ev.Rule)),
})
})

// 钉钉机器人变更事件监听
em.Listen(func(ev DingdingRobotEvent) {
auditRepo.Add(repository.AuditLog{
Type: repository.AuditLogTypeAction,
Body: fmt.Sprintf("[%s] DingdingRobot %s: %s", ev.CreatedAt.Format(time.RFC3339), ev.Type, serialize(ev.DingDingRobot)),
Body: fmt.Sprintf("[%s] DingdingRobot %s %s", ev.CreatedAt.Format(time.RFC3339), ev.Type, serialize(ev.DingDingRobot)),
})
})

Expand Down

0 comments on commit 3c5248d

Please sign in to comment.