package lm import ( "fmt" "net/http" "os/exec" "time" "be.ems/lib/config" "be.ems/lib/global" "be.ems/lib/log" "be.ems/lib/services" "be.ems/src/framework/database/db" "github.com/gorilla/mux" ) type XormResponse struct { Data interface{} `json:"data"` } type XormInsertResponse struct { Data interface{} `json:"data"` } var ( ExtBackupDataUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{dataStorage}/{dataObject}/backup" // for external CustomExtBackupDataUri = config.UriPrefix + "/dataManagement/{apiVersion}/{dataStorage}/{dataObject}/backup" // for external ) // func init() { // conf := config.GetYamlConfig() // InitDbClient(conf.Database.Type, conf.Database.User, conf.Database.Password, // conf.Database.Host, conf.Database.Port, conf.Database.Name) // } func ExtDatabaseBackupData(w http.ResponseWriter, r *http.Request) { log.Debug("ExtDatabaseBackupData processing... ") // token, err := services.CheckExtValidRequest(w, r) // if err != nil { // log.Error("Request error:", err) // return // } vars := mux.Vars(r) module := vars["managementModule"] dbname := vars["dataStorage"] tbname := vars["dataObject"] pack := "lm" log.Debugf("method:%s, module:%s dbname:%s, tbname:%s pack:%s", r.Method, module, dbname, tbname, pack) // exist, err := services.CheckUserPermission(token, strings.ToLower(r.Method), module, dbname, tbname, pack) // if err != nil { // log.Error("Failed to get permission:", err) // services.ResponseForbidden403NotPermission(w) // return // } // if !exist { // log.Error("permission deny!") // services.ResponseForbidden403NotPermission(w) // return // } var sql string var filePath string switch tbname { case "operation_log": filePath = fmt.Sprintf("/tmp/%s-%s.csv", tbname, time.Now().Local().Format(global.DateData)) sql = fmt.Sprintf("select * into outfile '%s' fields terminated by ',' escaped by '' optionally enclosed by '' lines terminated by '\n' from (select 'op_id','account_name','op_ip','subsys_tag','op_type','op_content','op_result','begin_time','end_time','vnf_flag','log_time' union select op_id,account_name,op_ip,subsys_tag,op_type,op_content,op_result,begin_time,end_time,vnf_flag,log_time from operation_log) b", filePath) case "security_log": filePath = fmt.Sprintf("/tmp/%s-%s.csv", tbname, time.Now().Local().Format(global.DateData)) sql = fmt.Sprintf("select * into outfile '%s' fields terminated by ',' escaped by '' optionally enclosed by '' lines terminated by '\n' from (select 'id','account_name','account_type','op_ip','op_type','op_content','op_result','op_time' union select id,account_name,account_type,op_ip,op_type,op_content,op_result,op_time from security_log) b", filePath) case "alarm_log": filePath = fmt.Sprintf("/tmp/%s-%s.csv", tbname, time.Now().Local().Format(global.DateData)) sql = fmt.Sprintf("select * into outfile '%s' fields terminated by ',' escaped by '' optionally enclosed by '' lines terminated by '\n' from (select 'id','ne_type','ne_id','alarm_seq','alarm_id','alarm_code','alarm_status','event_time','log_time' union select id,ne_type,ne_id,alarm_seq,alarm_id,alarm_code,alarm_status,event_time,log_time from alarm_log) b", filePath) default: log.Error("error target table") services.ResponseInternalServerError500DatabaseOperationFailed(w) return } affected, err := db.ExecDB("", sql, nil) if err != nil { log.Error("Failed to exec SQL:", err) services.ResponseInternalServerError500DatabaseOperationFailed(w) return } log.Debugf("filePath:%s backup dir:%s", filePath, config.GetYamlConfig().OMC.Backup) cmd := exec.Command("cp", "-rf", filePath, config.GetYamlConfig().OMC.Backup) out, err := cmd.CombinedOutput() log.Debugf("Exec output: %v", string(out)) if err != nil { log.Error("Faile to exec:", err) services.ResponseInternalServerError500ProcessError(w, err) return } mapRow := make(map[string]interface{}) row := map[string]interface{}{"affectedRows": affected} mapRow[tbname] = row services.ResponseWithJson(w, http.StatusOK, mapRow) }