From 2d8d01fc2b0f951bf2b237b177f12b04a656cf7e Mon Sep 17 00:00:00 2001 From: Noah Hilverling Date: Wed, 15 May 2019 11:16:31 +0200 Subject: [PATCH] Add user refs #4 --- configobject/user/user.go | 102 ++++++++++++++++++++++++++++++++++++++ main.go | 12 +++++ 2 files changed, 114 insertions(+) create mode 100644 configobject/user/user.go diff --git a/configobject/user/user.go b/configobject/user/user.go new file mode 100644 index 00000000..3c37ba1c --- /dev/null +++ b/configobject/user/user.go @@ -0,0 +1,102 @@ +package user + +import ( + "git.icinga.com/icingadb/icingadb-main/configobject" + "git.icinga.com/icingadb/icingadb-main/connection" + "git.icinga.com/icingadb/icingadb-main/utils" +) + +var ( + BulkInsertStmt *connection.BulkInsertStmt + BulkDeleteStmt *connection.BulkDeleteStmt + BulkUpdateStmt *connection.BulkUpdateStmt + Fields = []string{ + "id", + "env_id", + "name_checksum", + "properties_checksum", + "customvars_checksum", + "groups_checksum", + "name", + "name_ci", + "display_name", + "email", + "pager", + "notifications_enabled", + "period_id", + "states", + "types", + "zone_id", + } +) + +type User struct { + Id string `json:"id"` + EnvId string `json:"environment_id"` + NameChecksum string `json:"name_checksum"` + PropertiesChecksum string `json:"properties_checksum"` + CustomvarsChecksum string `json:"customvars_checksum"` + GroupsChecksum string `json:"groups_checksum"` + Name string `json:"name"` + NameCi *string `json:"name_ci"` + DisplayName string `json:"display_name"` + EMail string `json:"email"` + Pager string `json:"pager"` + NotificationsEnabled bool `json:"notifications_enabled"` + PeriodId string `json:"period_id"` + States int `json:"states"` + Types int `json:"types"` + ZoneId string `json:"zone_id"` +} + +func NewUser() configobject.Row { + u := User{} + u.NameCi = &u.Name + + return &u +} + +func (u *User) InsertValues() []interface{} { + v := u.UpdateValues() + + return append([]interface{}{utils.Checksum(u.Id)}, v...) +} + +func (u *User) UpdateValues() []interface{} { + v := make([]interface{}, 0) + + v = append( + v, + utils.Checksum(u.EnvId), + utils.Checksum(u.NameChecksum), + utils.Checksum(u.PropertiesChecksum), + utils.Checksum(u.CustomvarsChecksum), + utils.Checksum(u.GroupsChecksum), + u.Name, + u.NameCi, + u.DisplayName, + u.EMail, + u.Pager, + u.NotificationsEnabled, + utils.Checksum(u.PeriodId), + u.States, + u.Types, + utils.Checksum(u.ZoneId), + ) + + return v +} + +func (u *User) GetId() string { + return u.Id +} + +func (u *User) SetId(id string) { + u.Id = id +} + +func init() { + BulkInsertStmt = connection.NewBulkInsertStmt("user", Fields) + BulkDeleteStmt = connection.NewBulkDeleteStmt("user") + BulkUpdateStmt = connection.NewBulkUpdateStmt("user", Fields) +} \ No newline at end of file diff --git a/main.go b/main.go index f56afdd6..3265abc4 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ import ( "git.icinga.com/icingadb/icingadb-main/configobject/service" "git.icinga.com/icingadb/icingadb-main/configobject/servicegroup" "git.icinga.com/icingadb/icingadb-main/configobject/statesync" + "git.icinga.com/icingadb/icingadb-main/configobject/user" "git.icinga.com/icingadb/icingadb-main/connection" "git.icinga.com/icingadb/icingadb-main/ha" "git.icinga.com/icingadb/icingadb-main/jsondecoder" @@ -104,6 +105,17 @@ func main() { }) }() + chHAUser := haInstance.RegisterNotificationListener() + go func() { + super.ChErr <- configsync.Operator(&super, chHAUser, &configsync.Context{ + ObjectType: "user", + Factory: user.NewUser, + InsertStmt: user.BulkInsertStmt, + DeleteStmt: user.BulkDeleteStmt, + UpdateStmt: user.BulkUpdateStmt, + }) + }() + statesync.StartStateSync(&super) go prometheus.HandleHttp("0.0.0.0:8080", super.ChErr)