package handler
import (
"fmt"
"github.com/goodrain/rainbond/db"
"github.com/sirupsen/logrus"
)
type EtcdKeyType int
const (
ServiceCheckEtcdKey EtcdKeyType = iota
ShareResultEtcdKey
BackupRestoreEtcdKey
)
type CleanDateBaseHandler struct {
}
func NewCleanDateBaseHandler() *CleanDateBaseHandler {
return &CleanDateBaseHandler{}
}
func (h *CleanDateBaseHandler) CleanAllServiceData(keys []string) {
for _, key := range keys {
h.cleanDateBaseByKey(key, ServiceCheckEtcdKey, ShareResultEtcdKey, BackupRestoreEtcdKey)
}
}
func (h *CleanDateBaseHandler) CleanServiceCheckData(key string) {
h.cleanDateBaseByKey(key, ServiceCheckEtcdKey)
}
func (h *CleanDateBaseHandler) cleanDateBaseByKey(key string, keyTypes ...EtcdKeyType) {
if key == "" {
logrus.Warn("get empty etcd data key, ignore it")
return
}
for _, keyType := range keyTypes {
prefix := ""
switch keyType {
case ServiceCheckEtcdKey:
prefix = fmt.Sprintf("/servicecheck/%s", key)
case ShareResultEtcdKey:
prefix = fmt.Sprintf("/rainbond/shareresult/%s", key)
case BackupRestoreEtcdKey:
prefix = fmt.Sprintf("/rainbond/backup_restore/%s", key)
}
h.cleanDateBaseData(prefix)
}
}
func (h *CleanDateBaseHandler) cleanDateBaseData(prefix string) {
err := db.GetManager().KeyValueDao().DeleteWithPrefix(prefix)
if err != nil {
logrus.Warnf("delete db key[%s] failed: %s", prefix, err.Error())
}
}