77 lines
1.5 KiB
Go

package jar
import (
"errors"
"io"
"net/http"
"os"
"strings"
"flink-kube-operator/pkg"
api "github.com/logi-camp/go-flink-client"
gonanoid "github.com/matoous/go-nanoid/v2"
"go.uber.org/zap"
)
type JarFile struct {
uri string
filePath string
}
func NewJarFile(URI string) (*JarFile, error) {
jarFile := &JarFile{
uri: URI,
}
err := jarFile.Download()
if err != nil {
return nil, err
}
return jarFile, nil
}
func (jarFile *JarFile) Upload(flinkClient *api.Client) (fileName string, err error) {
resp, err := flinkClient.UploadJar(jarFile.filePath)
if err != nil {
pkg.Logger.Error("[main] error uploading jar", zap.Error(err))
}
filePathParts := strings.Split(resp.FileName, "/")
fileName = filePathParts[len(filePathParts)-1]
if resp.Status != "success" {
err = errors.New("jar upload was not success")
}
jarFile.filePath = fileName
jarFile.delete()
return
}
func (jarFile *JarFile) Download() error {
fileName, _ := gonanoid.New()
jarFile.filePath = "/tmp/" + fileName + ".jar"
out, err := os.Create(jarFile.filePath)
if err != nil {
return err
}
defer out.Close()
resp, err := http.Get(jarFile.uri)
if err != nil || resp.StatusCode > 200 {
os.Remove(jarFile.filePath)
return err
}
defer resp.Body.Close()
_, err = io.Copy(out, resp.Body)
if err != nil {
return err
}
return nil
}
func (jarFile *JarFile) delete() error {
err := os.Remove(jarFile.filePath)
pkg.Logger.Debug("[jar] [delete]", zap.Error(err))
return err
}