package jar import ( "errors" "io" "net/http" "os" "strings" "gitea.com/logicamp/lc" 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 { lc.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") } return } func (jarFile *JarFile) Download() error { fileName, _ := gonanoid.New() jarFile.filePath = 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 { return err } defer resp.Body.Close() _, err = io.Copy(out, resp.Body) if err != nil { return err } return nil } func (jarFile JarFile) Delete() error { return os.Remove(jarFile.filePath) }