Rainbond/builder/api/controller/versionController.go

171 lines
5.2 KiB
Go

// Copyright (C) 2014-2018 Goodrain Co., Ltd.
// RAINBOND, Application Management Platform
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version. For any non-GPL usage of Rainbond,
// one or multiple Commercial Licenses authorized by Goodrain Co., Ltd.
// must be obtained first.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package controller
import (
"errors"
"io/ioutil"
"net/http"
"os/exec"
"strings"
"github.com/Sirupsen/logrus"
"github.com/bitly/go-simplejson"
"github.com/go-chi/chi"
"github.com/goodrain/rainbond/builder"
"github.com/goodrain/rainbond/db"
httputil "github.com/goodrain/rainbond/util/http"
)
func GetVersionByEventID(w http.ResponseWriter, r *http.Request) {
eventID := strings.TrimSpace(chi.URLParam(r, "eventID"))
version, err := db.GetManager().VersionInfoDao().GetVersionByEventID(eventID)
if err != nil {
httputil.ReturnError(r, w, 404, err.Error())
}
httputil.ReturnSuccess(r, w, version)
}
func UpdateVersionByEventID(w http.ResponseWriter, r *http.Request) {
eventID := strings.TrimSpace(chi.URLParam(r, "eventID"))
version, err := db.GetManager().VersionInfoDao().GetVersionByEventID(eventID)
if err != nil {
httputil.ReturnError(r, w, 404, err.Error())
return
}
in, err := ioutil.ReadAll(r.Body)
json, err := simplejson.NewJson(in)
if err != nil {
httputil.ReturnError(r, w, 400, err.Error())
return
}
if author, err := json.Get("code_commit_author").String(); err != nil || author == "" {
logrus.Debugf("error get code_commit_author from version body ,details %s", err.Error())
} else {
version.Author = author
}
if msg, err := json.Get("code_commit_msg").String(); err != nil || msg == "" {
logrus.Debugf("error get code_commit_msg from version body ,details %s", err.Error())
} else {
version.CommitMsg = msg
}
if cVersion, err := json.Get("code_version").String(); err != nil || cVersion == "" {
logrus.Debugf("error get code_version from version body ,details %s", err.Error())
} else {
version.CodeVersion = cVersion
}
if status, err := json.Get("final_status").String(); err != nil || status == "" {
logrus.Debugf("error get final_status from version body ,details %s", err.Error())
} else {
version.FinalStatus = status
}
err = db.GetManager().VersionInfoDao().UpdateModel(version)
if err != nil {
httputil.ReturnError(r, w, 500, err.Error())
return
}
httputil.ReturnSuccess(r, w, nil)
}
func GetVersionByServiceID(w http.ResponseWriter, r *http.Request) {
serviceID := strings.TrimSpace(chi.URLParam(r, "serviceID"))
versions, err := db.GetManager().VersionInfoDao().GetVersionByServiceID(serviceID)
if err != nil {
httputil.ReturnError(r, w, 404, err.Error())
}
httputil.ReturnSuccess(r, w, versions)
}
func DeleteVersionByEventID(w http.ResponseWriter, r *http.Request) {
eventID := strings.TrimSpace(chi.URLParam(r, "eventID"))
versionInfo, err := db.GetManager().VersionInfoDao().GetVersionByEventID(eventID)
if versionInfo.DeliveredType == "" || versionInfo.DeliveredPath == "" {
httputil.ReturnError(r, w, 500, errors.New("交付物类型及交付路径为空").Error())
return
}
if versionInfo.DeliveredType == "code" {
//todo 挺危险的。
} else {
cmd := exec.Command("docker", "rmi", versionInfo.DeliveredPath)
err := cmd.Start()
if err != nil {
logrus.Errorf("error delete image :%s ,details %s", versionInfo.DeliveredPath, err.Error())
}
}
err = db.GetManager().VersionInfoDao().DeleteVersionByEventID(eventID)
if err != nil {
httputil.ReturnError(r, w, 404, err.Error())
return
}
httputil.ReturnSuccess(r, w, nil)
}
func UpdateDeliveredPath(w http.ResponseWriter, r *http.Request) {
in, err := ioutil.ReadAll(r.Body)
if err != nil {
httputil.ReturnError(r, w, 400, err.Error())
return
}
logrus.Infof("update build info to %s", string(in))
jsonc, err := simplejson.NewJson(in)
if err != nil {
httputil.ReturnError(r, w, 400, err.Error())
return
}
event, err := jsonc.Get("event_id").String()
if err != nil {
httputil.ReturnError(r, w, 400, err.Error())
return
}
dt, err := jsonc.Get("type").String()
if err != nil {
httputil.ReturnError(r, w, 400, err.Error())
return
}
dp, err := jsonc.Get("path").String()
if err != nil {
httputil.ReturnError(r, w, 400, err.Error())
return
}
version, err := db.GetManager().VersionInfoDao().GetVersionByEventID(event)
if err != nil {
httputil.ReturnError(r, w, 404, err.Error())
return
}
version.DeliveredType = dt
version.DeliveredPath = dp
if version.DeliveredType == "slug" {
version.ImageName = builder.RUNNERIMAGENAME
} else {
version.ImageName = dp
}
err = db.GetManager().VersionInfoDao().UpdateModel(version)
if err != nil {
httputil.ReturnError(r, w, 500, err.Error())
return
}
httputil.ReturnSuccess(r, w, nil)
return
}