Compare commits

...

4 Commits

Author SHA1 Message Date
algotao
232a2c9d2e 更新docker版本 2026-01-19 14:56:22 +08:00
algotao
5cf860acfb 支持ds重置(当前限geo) 2026-01-19 14:54:18 +08:00
algotao
369023b81d 优化error输出 2026-01-11 17:24:11 +08:00
algotao
5e102ea8e7 script run调整为script debug;优化错误信息输出 2026-01-11 17:23:51 +08:00
48 changed files with 906 additions and 901 deletions

947
cmd.pb.go

File diff suppressed because it is too large Load Diff

View File

@@ -12,6 +12,7 @@ message SaasReq {
Read read = 10; // 批量读取
Write write = 11; // 批量写入
ColumnWrite column_write = 12; // 全量列式写入
ResetDs reset_ds = 13; // 清空数据区
Task task_create = 20; // 任务创建
TaskList task_list = 21; // 列出任务
@@ -26,11 +27,11 @@ message SaasReq {
BindSet bind_set = 61; // 设置绑定
BindDelete bind_delete = 62; // 解除绑定
GrantList grant_list = 70; // 列出数据授权
Grant grant_add = 71; // 增加数据授权
Grant grant_delete = 72; // 删除数据授权
GrantList grant_list = 70; // 列出数据授权
Grant grant_add = 71; // 增加数据授权
Grant grant_delete = 72; // 删除数据授权
ScriptRun script_run = 90; // 运行脚本
ScriptDebug script_debug = 90; // 调试脚本
ScriptCreate script_create = 91; // 脚本创建
ScriptList script_list = 92; // 列出脚本
ScriptDelete script_delete = 93; // 删除脚本
@@ -76,15 +77,15 @@ message WriteItem {
Bytes write_bytes = 2 [deprecated = true]; // byte区域。!!!弃用请使用bytes_kv
Uint32s write_uint32s = 3 [deprecated = true]; // uint32区域。!!!弃用请使用uint32s_kv
FlagsWithExpire write_flags_with_expire = 4 [deprecated = true]; // 标志位区域。!!!弃用请使用flags_with_expire_kv
map<uint32, uint32> bytes_kv = 5; // 写入bytekey为1-64索引值value为0-255数值。index/value超限会丢弃
map<uint32, uint32> bytes_kv = 5; // 写入uint8key为1-64索引值value为0-255数值。index/value超限会丢弃
map<uint32, uint32> uint32s_kv = 6; // 写入uint32key为1-8索引值value为uint32数值。index超限会丢弃
map<uint32, FlagWithExpire> flags_with_expire_kv = 7; // 写入标志位key为1-4索引值index超限会丢弃
}
// Bytes 写入byte区域
// Bytes 写入uint8区域
message Bytes {
bytes bytes = 1; // 写入的byte
uint64 index_1 = 2; // 写入byte的索引值(0..63)
bytes bytes = 1; // 写入的uint8
uint64 index_1 = 2; // 写入uint8的索引值(0..63)
}
// Uint32s 写入uint32区域
@@ -115,6 +116,11 @@ message ColumnWrite {
FlagsWithExpire write_flags_with_expire = 5; // 标志位区域
}
// ResetDs 清空数据区命令
message ResetDs {
string dataspace_id = 1; // 数据空间ID
}
message Task {
string dataspace_id = 1; // 数据空间ID
string appid = 2; // 小程序/小游戏/公众号/视频号的appid
@@ -208,8 +214,8 @@ message Grant {
}
// ScriptRun 运行脚本
message ScriptRun {
// ScriptDebug 调试脚本
message ScriptDebug {
string lua_script = 1; // 要调试的lua脚本
string server_did = 2; // 将从服务端读取该DID下的数据
string appid = 3; // 小程序/小游戏/公众号/视频号的appid
@@ -283,6 +289,7 @@ message SaasRes {
ReadRes read_res = 10; // 读取命令返回
WriteRes write_res = 11; // 写入命令返回
ResetDsRes reset_ds_res = 13; // 清空数据区命令返回
Task task_create_res = 20; // 创建任务返回状态
TaskListRes task_list_res = 21; // 任务列表返回状态
@@ -301,7 +308,7 @@ message SaasRes {
Grant grant_add_res = 71; // 增加数据授权返回状态
Grant grant_delete_res = 72; // 删除数据授权返回状态
ScriptRunRes script_run_res = 90; // 运行脚本返回
ScriptDebugRes script_debug_res = 90; // 调试脚本返回
ScriptCreateRes script_create_res = 91; // 创建脚本返回
ScriptListRes script_list_res = 92; // 列出脚本返回
ScriptDeleteRes script_delete_res = 93; // 删除脚本返回
@@ -320,6 +327,8 @@ message DataSpace {
repeated string did = 1; // 设备ID区
repeated string wuid = 2; // OpenID区
repeated string geo = 7; // GEO区
repeated string geoip = 8; // GEOIP区
repeated string geofac = 9; // GEOFAC区(经常活动城市)
}
// InfoRes 账号信息返回
@@ -357,6 +366,11 @@ message ValueItem {
map<uint32, FlagWithExpire> flags_with_expire_kv = 10; // 标志位区域
}
// ResetDsRes 清空数据区返回
message ResetDsRes {
string dataspace_id = 1; // 数据空间ID
}
// TaskListRes 任务列表返回
message TaskListRes {
repeated Task tasks = 1; // 任务列表
@@ -436,8 +450,8 @@ message GrantListRes {
repeated Grant to = 2; // 向外授权列表
}
// ScriptRunRes 运行脚本返回
message ScriptRunRes {
// ScriptDebugRes 调试脚本返回
message ScriptDebugRes {
string print_output = 1; // print输出
string error_output = 2; // 错误信息
string targets_output = 3; // 策略输出

View File

@@ -2,7 +2,6 @@ package main
import (
"fmt"
"os"
"strings"
)
@@ -20,10 +19,7 @@ func RunBind(args ...string) error {
case "delete":
return RunBindDelete(args...)
default:
err := fmt.Errorf(`unknown command "%s"`+"\n"+`Run 'saastool bind help' for usage`, name)
fmt.Fprintln(os.Stderr, err)
return err
return fmt.Errorf(`Unknown command "%s"`+"\n"+`Run 'saastool bind help' for usage`, name)
}
}

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"strconv"
"strings"
@@ -26,8 +25,7 @@ func RunBindDelete(args ...string) error {
ids := paramIDs(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
// 切割字符串
@@ -45,16 +43,14 @@ func RunBindDelete(args ...string) error {
for _, v := range idsSlice {
n, err := strconv.ParseInt(v, 10, 64)
if err != nil {
fmt.Fprintln(os.Stderr, "id parse error", "value", v, "err", err)
return err
return fmt.Errorf("Id parse error. value: %v. %w", v, err)
}
numIds = append(numIds, n)
}
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
bindDeleteParams := bindDeleteParams{
@@ -87,15 +83,12 @@ func doBindDeleteAccount(p bindDeleteParams) error {
}
res, err := p.saasHttp.BindDelete(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Bind Delete error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "Bind Delete failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
bindRes := res.GetBindDeleteRes()

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"strconv"
"strings"
@@ -26,8 +25,7 @@ func RunBindSetAccount(args ...string) error {
accounts := paramAccounts(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
// 切割字符串
@@ -45,16 +43,14 @@ func RunBindSetAccount(args ...string) error {
for _, v := range idsSlice {
n, err := strconv.ParseInt(v, 10, 64)
if err != nil {
fmt.Fprintln(os.Stderr, "account parse error", "value", v, "err", err)
return err
return fmt.Errorf("Account parse error. value: %v. %w", v, err)
}
numAccounts = append(numAccounts, n)
}
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
bindSetAccountParams := bindSetAccountParams{
@@ -89,15 +85,12 @@ func doBindSetAccount(p bindSetAccountParams) error {
}
res, err := p.saasHttp.BindSet(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Bind Set error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "Bind Set failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
fmt.Printf("bind res: %v\n", protojson.Format(res.GetBindSetRes()))

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"strconv"
"strings"
@@ -28,8 +27,7 @@ func RunBindSetAd(args ...string) error {
ads := paramAds(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
// 切割字符串
@@ -47,16 +45,14 @@ func RunBindSetAd(args ...string) error {
for _, v := range idsSlice {
n, err := strconv.ParseInt(v, 10, 64)
if err != nil {
fmt.Fprintln(os.Stderr, "account parse error", "value", v, "err", err)
return err
return fmt.Errorf("AD parse error. value: %v. %w", v, err)
}
numAds = append(numAds, n)
}
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
bindSetAdParams := bindSetAdParams{
@@ -92,15 +88,12 @@ func doBindSetAd(p bindSetAdParams) error {
}
res, err := p.saasHttp.BindSet(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Bind Set error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "Bind Set failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
fmt.Printf("bind res: %v\n", protojson.Format(res.GetBindSetRes()))

View File

@@ -38,8 +38,7 @@ func RunConvert(args ...string) error {
destPath := paramDestPath(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || *mapCfgFile == "" || len(*sourcePath) == 0 || len(*destPath) == 0 {
@@ -49,8 +48,7 @@ func RunConvert(args ...string) error {
mapCfg, err := LoadMapFile(*mapCfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadMapFile error: %w", err)
}
convertParams := convertParams{

View File

@@ -58,9 +58,7 @@ func RunDaemon(args ...string) error {
case "dev":
apiurls.BaseUrl = "http://localhost:8080"
default:
err = fmt.Errorf("SRTA_ENV is not demo or prd")
slog.Error("Env", "err", err)
return err
return fmt.Errorf("SRTA_ENV is not demo or prd")
}
mux := http.NewServeMux()
@@ -227,9 +225,9 @@ func (d *Daemon) parsePublicParams(r *http.Request) (*daemonPublicParams, error)
params.ds = strings.ToLower(strings.TrimSpace(q.Get("ds")))
switch params.ds {
case "did", "wuid", "geo":
case "did", "wuid", "geo", "geoip", "geofac":
default:
return nil, fmt.Errorf("ds must use did/wuid/geo. current is %v", params.ds)
return nil, fmt.Errorf("ds must use did/wuid/geo/geoip/geofac. current is %v", params.ds)
}
params.appid = strings.TrimSpace(q.Get("appid"))

View File

@@ -2,7 +2,6 @@ package main
import (
"fmt"
"os"
"strings"
)
@@ -20,10 +19,7 @@ func RunExp(args ...string) error {
case "grant":
return RunExpGrant(args...)
default:
err := fmt.Errorf(`unknown command "%s"`+"\n"+`Run 'saastool exp help' for usage`, name)
fmt.Fprintln(os.Stderr, err)
return err
return fmt.Errorf(`Unknown command "%s"`+"\n"+`Run 'saastool exp help' for usage`, name)
}
}

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"slices"
"strconv"
"strings"
@@ -39,8 +38,7 @@ func RunExpGet(args ...string) error {
extFields := paramExtFields(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 {
@@ -54,28 +52,24 @@ func RunExpGet(args ...string) error {
for _, id := range expIDsSlice {
idNum, err := strconv.ParseUint(id, 10, 32)
if err != nil {
fmt.Fprintln(os.Stderr, "expid parse error", "err", err)
return err
return fmt.Errorf("Expid parse error. value: %v. %w", id, err)
}
if idNum == 0 || idNum > 10 {
fmt.Fprintln(os.Stderr, "expid range error")
return nil
return fmt.Errorf("Expid range error.")
}
bucketIDsNumSlice = append(bucketIDsNumSlice, uint32(idNum))
}
}
if *beginDay < 20250101 || *beginDay > 21001231 || *endDay < 20250101 || *endDay > 21001231 {
fmt.Fprintln(os.Stderr, "begin/end day error")
fs.PrintDefaults()
return nil
return fmt.Errorf("Begin/End day error.")
}
if *target == "" {
fmt.Fprintln(os.Stderr, "target error")
fs.PrintDefaults()
return nil
return fmt.Errorf("Target error.")
}
uidNumSlice := []uint64{}
@@ -84,13 +78,11 @@ func RunExpGet(args ...string) error {
for _, id := range uidSlice {
idNum, err := strconv.ParseUint(id, 10, 64)
if err != nil {
fmt.Fprintln(os.Stderr, "advertiser id parse error", "err", err)
return err
return fmt.Errorf("Advertiser id parse error. value: %v. %w", id, err)
}
if idNum == 0 {
fmt.Fprintln(os.Stderr, "advertiser id error")
return nil
return fmt.Errorf("Advertiser id error.")
}
uidNumSlice = append(uidNumSlice, idNum)
}
@@ -102,8 +94,7 @@ func RunExpGet(args ...string) error {
groupBySlice = strings.Split(*groupBy, ",")
for _, group := range groupBySlice {
if !validGroupBy[group] {
fmt.Fprintln(os.Stderr, "group by error", "group", group)
return nil
return fmt.Errorf("Group by error. group: %v", group)
}
}
}
@@ -112,15 +103,13 @@ func RunExpGet(args ...string) error {
if *extFields != "" {
extFieldsSlice = strings.Split(*extFields, ",")
if slices.Contains(extFieldsSlice, "") {
fmt.Fprintln(os.Stderr, "ext field error")
return nil
return fmt.Errorf("Ext field error.")
}
}
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
getExpParams := getExpParams{
@@ -164,15 +153,12 @@ func doExpGet(getExpParams getExpParams) error {
}
res, err := getExpParams.saasHttp.ExpGet(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit GetExp error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "get exp failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
getExpRes := res.GetExpGetRes()

View File

@@ -2,7 +2,6 @@ package main
import (
"fmt"
"os"
"strings"
)
@@ -20,9 +19,7 @@ func RunExpGrant(args ...string) error {
case "delete":
return RunExpGrantDelete(args...)
default:
err := fmt.Errorf(`unknown command "%s"`+"\n"+`Run 'saastool exp grant help' for usage`, name)
fmt.Fprintln(os.Stderr, err)
return err
return fmt.Errorf(`Unknown command "%s"`+"\n"+`Run 'saastool exp grant help' for usage`, name)
}
}

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -22,8 +21,7 @@ func RunExpGrantAdd(args ...string) error {
srtaAccountId := paramSrtaAccountId(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 {
@@ -32,15 +30,13 @@ func RunExpGrantAdd(args ...string) error {
}
if *srtaAccountId == 0 {
fmt.Fprintln(os.Stderr, "Error: sRTA account ID is required")
fs.PrintDefaults()
return fmt.Errorf("sRTA account ID is required")
}
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
expGrantAddParams := expGrantAddParams{
@@ -66,13 +62,11 @@ func doExpGrantAdd(params expGrantAddParams) error {
res, err := params.saasHttp.ExpGrantAdd(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Exp Grant Add error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "Exp grant add failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
expGrantRes := res.GetExpGrantAddRes()

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -22,8 +21,7 @@ func RunExpGrantDelete(args ...string) error {
srtaAccountId := paramSrtaAccountId(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 {
@@ -32,15 +30,13 @@ func RunExpGrantDelete(args ...string) error {
}
if *srtaAccountId == 0 {
fmt.Fprintln(os.Stderr, "Error: sRTA account ID is required")
fs.PrintDefaults()
return fmt.Errorf("sRTA account ID is required")
}
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
expGrantDeleteParams := expGrantDeleteParams{
@@ -66,13 +62,11 @@ func doExpGrantDelete(params expGrantDeleteParams) error {
res, err := params.saasHttp.ExpGrantDelete(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Exp Grant Delete error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "Exp grant delete failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
expGrantRes := res.GetExpGrantDeleteRes()

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -20,8 +19,7 @@ func RunExpGrantList(args ...string) error {
cfgFile := paramConfig(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 {
@@ -31,8 +29,7 @@ func RunExpGrantList(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
expGrantListParams := expGrantListParams{
@@ -55,13 +52,11 @@ func doExpGrantList(params expGrantListParams) error {
res, err := params.saasHttp.ExpGrantList(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Exp Grant List error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "Exp grant list failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
expGrantRes := res.GetExpGrantListRes()

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -20,8 +19,7 @@ func RunExpList(args ...string) error {
cfgFile := paramConfig(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 {
@@ -31,8 +29,7 @@ func RunExpList(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
listExpParams := listExpParams{
@@ -53,15 +50,12 @@ func doExpList(listExpParams listExpParams) error {
}
res, err := listExpParams.saasHttp.ExpList(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit ListExp error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "list exp failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
listExpRes := res.GetExpListRes()

View File

@@ -2,7 +2,6 @@ package main
import (
"fmt"
"os"
"strings"
)
@@ -20,10 +19,7 @@ func RunGrant(args ...string) error {
case "delete":
return RunGrantDelete(args...)
default:
err := fmt.Errorf(`unknown command "%s"`+"\n"+`Run 'saastool grant help' for usage`, name)
fmt.Fprintln(os.Stderr, err)
return err
return fmt.Errorf(`Unknown command "%s"`+"\n"+`Run 'saastool grant help' for usage`, name)
}
}

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -26,8 +25,7 @@ func RunGrantAdd(args ...string) error {
grantIndex := paramGrantIndex(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 {
@@ -36,27 +34,23 @@ func RunGrantAdd(args ...string) error {
}
if *srtaAccountId == 0 {
fmt.Fprintln(os.Stderr, "Error: sRTA account ID is required")
fs.PrintDefaults()
return fmt.Errorf("sRTA account ID is required")
return fmt.Errorf("sRTA account ID is required.")
}
if *grantIndex == "" {
fmt.Fprintln(os.Stderr, "Error: grant index is required")
fs.PrintDefaults()
return fmt.Errorf("grant index is required")
return fmt.Errorf("Grant index is required.")
}
if *dsid == 0 {
fmt.Fprintln(os.Stderr, "Error: data space ID is required")
fs.PrintDefaults()
return fmt.Errorf("data space ID is required")
return fmt.Errorf("Data space ID is required.")
}
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
grantAddParams := grantAddParams{
@@ -86,13 +80,11 @@ func doGrantAdd(params grantAddParams) error {
res, err := params.saasHttp.GrantAdd(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Grant Add error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "Grant add failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
grantRes := res.GetGrantAddRes()

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -26,8 +25,7 @@ func RunGrantDelete(args ...string) error {
grantIndex := paramGrantIndex(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 {
@@ -36,27 +34,23 @@ func RunGrantDelete(args ...string) error {
}
if *dsid == 0 {
fmt.Fprintln(os.Stderr, "Error: data space ID is required")
fs.PrintDefaults()
return fmt.Errorf("data space ID is required")
return fmt.Errorf("data space ID is required.")
}
if *srtaAccountId == 0 {
fmt.Fprintln(os.Stderr, "Error: sRTA account ID is required")
fs.PrintDefaults()
return fmt.Errorf("sRTA account ID is required")
return fmt.Errorf("sRTA account ID is required.")
}
if *grantIndex == "" {
fmt.Fprintln(os.Stderr, "Error: grant index is required")
fs.PrintDefaults()
return fmt.Errorf("grant index is required")
return fmt.Errorf("grant index is required.")
}
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
grantDeleteParams := grantDeleteParams{
@@ -86,13 +80,11 @@ func doGrantDelete(params grantDeleteParams) error {
res, err := params.saasHttp.GrantDelete(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Grant Delete error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "Grant delete failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
grantRes := res.GetGrantDeleteRes()

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -20,8 +19,7 @@ func RunGrantList(args ...string) error {
cfgFile := paramConfig(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 {
@@ -31,8 +29,7 @@ func RunGrantList(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
grantListParams := grantListParams{
@@ -55,13 +52,11 @@ func doGrantList(params grantListParams) error {
res, err := params.saasHttp.GrantList(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Grant List error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "Grant list failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
grantRes := res.GetGrantListRes()

View File

@@ -19,6 +19,7 @@ Commands:
write Write user's 'bytes / uint32s / flags'
read Read user's 'bytes / uint32s / flags'
columnwrite Write columns for 'deviceid / openid' users
resetds Reset data space
convert Convert data to write format

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -20,8 +19,7 @@ func RunInfo(args ...string) error {
cfgFile := paramConfig(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 {
@@ -31,8 +29,7 @@ func RunInfo(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
infoParams := infoParams{
@@ -53,19 +50,16 @@ func doInfo(infoParams infoParams) error {
}
res, err := infoParams.saasHttp.Info(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Info error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "info failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
infoRes := res.GetInfoRes()
fmt.Printf("info res: %v\n", protojson.Format(infoRes))
fmt.Printf("Info res: %v\n", protojson.Format(infoRes))
return nil
}

View File

@@ -7,6 +7,7 @@ import (
func main() {
if err := Run(os.Args[1:]...); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
@@ -26,6 +27,8 @@ func Run(args ...string) error {
return RunRead(args...)
case "columnwrite":
return RunColumnWrite(args...)
case "resetds":
return RunResetDs(args...)
case "convert":
return RunConvert(args...)
case "verify":
@@ -45,8 +48,6 @@ func Run(args ...string) error {
case "daemon":
return RunDaemon(args...)
default:
err := fmt.Errorf(`unknown command "%v"`+"\n"+`Run 'saastool help' for usage`, name)
fmt.Fprintln(os.Stderr, err.Error())
return err
return fmt.Errorf(`Unknown command "%v"`+"\n"+`Run 'saastool help' for usage`, name)
}
}

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"strings"
"git.algo.com.cn/public/saasapi"
@@ -32,8 +31,7 @@ func RunRead(args ...string) error {
userids := paramUserids(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
// 切割字符串
@@ -44,15 +42,13 @@ func RunRead(args ...string) error {
return nil
}
if strings.ToLower(*ds) == "openid" && len(*appid) == 0 {
fmt.Fprintln(os.Stderr, "appid must be set when data space is openid")
return nil
if strings.ToLower(*ds) == "wuid" && len(*appid) == 0 {
return fmt.Errorf("Appid must be set when data space is wuid.")
}
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "load config file error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
readParams := readParams{
@@ -92,18 +88,16 @@ func doRead(readParams readParams) error {
read.ReadItems = saasReadItems
res, err := readParams.saasHttp.Read(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit read error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.GetCode() != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, protojson.Format(res))
return err
} else {
fmt.Println(protojson.Format(res))
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
readRes := res.GetReadRes()
fmt.Printf("read res: %v\n", protojson.Format(readRes))
return nil
}

71
cmd/saastool/resetds.go Normal file
View File

@@ -0,0 +1,71 @@
package main
import (
"flag"
"fmt"
"net/http"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
"google.golang.org/protobuf/encoding/protojson"
)
type resetDsParams struct {
ds string
saasHttp *saashttp.SaasClient
}
func RunResetDs(args ...string) error {
fs := flag.NewFlagSet("resetds", flag.ExitOnError)
cfgFile := paramConfig(fs)
ds := paramDataSpaceId(fs)
if err := fs.Parse(args); err != nil {
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*ds) == 0 {
fs.PrintDefaults()
return nil
}
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
return fmt.Errorf("LoadConfigFile error: %w", err)
}
resetDsParams := resetDsParams{
ds: *ds,
saasHttp: &saashttp.SaasClient{
Client: &http.Client{},
ApiUrls: saashttp.InitAPIUrl(&cfg.ApiUrls),
Auth: &cfg.Auth,
},
}
return doResetDs(resetDsParams)
}
func doResetDs(resetDsParams resetDsParams) error {
saasReq := &saasapi.SaasReq{
Cmd: &saasapi.SaasReq_ResetDs{
ResetDs: &saasapi.ResetDs{
DataspaceId: resetDsParams.ds,
},
},
}
res, err := resetDsParams.saasHttp.ResetDS(saasReq)
if err != nil {
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
resetRes := res.GetResetDsRes()
fmt.Printf("ResetDS res: %v\n", protojson.Format(resetRes))
return nil
}

View File

@@ -2,7 +2,6 @@ package main
import (
"fmt"
"os"
"strings"
)
@@ -13,8 +12,8 @@ func RunScript(args ...string) error {
switch name {
case "", "help":
return RunScriptHelp(args...)
case "run":
return RunScriptRun(args...)
case "debug", "run":
return RunScriptDebug(args...)
case "create":
return RunScriptCreate(args...)
case "list":
@@ -26,10 +25,7 @@ func RunScript(args ...string) error {
case "use":
return RunScriptUse(args...)
default:
err := fmt.Errorf(`unknown command "%s"`+"\n"+`Run 'saastool script help' for usage`, name)
fmt.Fprintln(os.Stderr, err)
return err
return fmt.Errorf(`Unknown command "%s"`+"\n"+`Run 'saastool script help' for usage`, name)
}
}
@@ -42,7 +38,7 @@ const scriptUsage = `
Usage: saastool script COMMAND [OPTIONS]
Commands:
run Run lua script test on server
debug Debug lua script on server
create Create lua script on server
list List all scripts on server
delete Delete a script from server

View File

@@ -25,8 +25,7 @@ func RunScriptCreate(args ...string) error {
luaName := paramName(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*luaFile) == 0 || len(*luaName) == 0 {
@@ -36,21 +35,18 @@ func RunScriptCreate(args ...string) error {
file, err := os.Open(*luaFile)
if err != nil {
fmt.Fprintln(os.Stderr, "lua file error", "err", err)
return err
return fmt.Errorf("Lua file open error: %w", err)
}
defer file.Close()
body, err := io.ReadAll(file)
if err != nil {
fmt.Fprintln(os.Stderr, "lua file read error", "err", err)
return err
return fmt.Errorf("Lua file read error: %w", err)
}
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
scriptCreateParams := scriptCreateParams{
@@ -78,13 +74,11 @@ func doScriptCreate(scriptCreateParams scriptCreateParams) error {
res, err := scriptCreateParams.saasHttp.ScriptCreate(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Create Script error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "script create failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
scriptRes := res.GetScriptCreateRes()

View File

@@ -11,23 +11,22 @@ import (
"git.algo.com.cn/public/saasapi/pkg/saashttp"
)
type scriptRunParams struct {
type scriptDebugParams struct {
luaScript string
did string
os saasapi.OS
saasHttp *saashttp.SaasClient
}
func RunScriptRun(args ...string) error {
fs := flag.NewFlagSet("run", flag.ExitOnError)
func RunScriptDebug(args ...string) error {
fs := flag.NewFlagSet("debug", flag.ExitOnError)
cfgFile := paramConfig(fs)
luaFile := paramLua(fs)
did := paramDid(fs)
tos := paramOS(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*luaFile) == 0 || len(*did) == 0 {
@@ -36,30 +35,27 @@ func RunScriptRun(args ...string) error {
}
if !(*tos == 1 || *tos == 2 || *tos == 7) {
fmt.Fprintln(os.Stderr, "OS error")
fs.PrintDefaults()
return nil
}
file, err := os.Open(*luaFile)
if err != nil {
fmt.Fprintln(os.Stderr, "lua file error", "err", err)
return err
return fmt.Errorf("Lua file open error: %w", err)
}
defer file.Close()
body, err := io.ReadAll(file)
if err != nil {
fmt.Fprintln(os.Stderr, "lua file read error", "err", err)
return err
return fmt.Errorf("Lua file read error: %w", err)
}
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
scriptRunParams := scriptRunParams{
scriptDebugParams := scriptDebugParams{
luaScript: string(body),
did: *did,
os: saasapi.OS(*tos),
@@ -70,43 +66,40 @@ func RunScriptRun(args ...string) error {
},
}
return doScriptRun(scriptRunParams)
return doScriptDebug(scriptDebugParams)
}
func doScriptRun(scriptRunParams scriptRunParams) error {
func doScriptDebug(scriptDebugParams scriptDebugParams) error {
saasReq := &saasapi.SaasReq{
Cmd: &saasapi.SaasReq_ScriptRun{
ScriptRun: &saasapi.ScriptRun{
LuaScript: scriptRunParams.luaScript,
ServerDid: scriptRunParams.did,
Os: scriptRunParams.os,
Cmd: &saasapi.SaasReq_ScriptDebug{
ScriptDebug: &saasapi.ScriptDebug{
LuaScript: scriptDebugParams.luaScript,
ServerDid: scriptDebugParams.did,
Os: scriptDebugParams.os,
},
},
}
res, err := scriptRunParams.saasHttp.ScriptRun(saasReq)
res, err := scriptDebugParams.saasHttp.ScriptDebug(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "run script error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
err = fmt.Errorf("run script failed. code:%v, status:%v", res.Code, res.Status)
fmt.Fprintln(os.Stderr, err)
return err
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
scriptRunRes := res.GetScriptRunRes()
scriptDebugRes := res.GetScriptDebugRes()
fmt.Println("ERROROUT_OUTPUT:")
fmt.Print(scriptRunRes.GetErrorOutput())
fmt.Print(scriptDebugRes.GetErrorOutput())
fmt.Println()
fmt.Println("PRINT_OUTPUT:")
fmt.Print(scriptRunRes.GetPrintOutput())
fmt.Print(scriptDebugRes.GetPrintOutput())
fmt.Println()
fmt.Println("DATASPACE_OUTPUT:")
fmt.Print(scriptRunRes.GetDataspaceOut())
fmt.Print(scriptDebugRes.GetDataspaceOut())
fmt.Println()
fmt.Println("TARGETS_OUTPUT:")
fmt.Print(scriptRunRes.GetTargetsOutput())
fmt.Print(scriptDebugRes.GetTargetsOutput())
return nil
}

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -22,8 +21,7 @@ func RunScriptDelete(args ...string) error {
luaName := paramName(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*luaName) == 0 {
@@ -33,8 +31,7 @@ func RunScriptDelete(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
scriptDeleteParams := scriptDeleteParams{
@@ -60,13 +57,11 @@ func doScriptDelete(scriptDeleteParams scriptDeleteParams) error {
res, err := scriptDeleteParams.saasHttp.ScriptDelete(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Delete Script error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "script delete failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
scriptRes := res.GetScriptDeleteRes()

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -22,8 +21,7 @@ func RunScriptGet(args ...string) error {
luaName := paramName(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*luaName) == 0 {
@@ -33,8 +31,7 @@ func RunScriptGet(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
scriptGetParams := scriptGetParams{
@@ -60,13 +57,11 @@ func doScriptGet(scriptGetParams scriptGetParams) error {
res, err := scriptGetParams.saasHttp.ScriptGet(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Get Script error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "script get failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
scriptRes := res.GetScriptGetRes()

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -20,8 +19,7 @@ func RunScriptList(args ...string) error {
cfgFile := paramConfig(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 {
@@ -31,8 +29,7 @@ func RunScriptList(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
scriptListParams := scriptListParams{
@@ -55,13 +52,11 @@ func doScriptList(scriptListParams scriptListParams) error {
res, err := scriptListParams.saasHttp.ScriptList(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit List Script error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "script list failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
scriptRes := res.GetScriptListRes()

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -22,8 +21,7 @@ func RunScriptUse(args ...string) error {
luaName := paramName(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*luaName) == 0 {
@@ -33,8 +31,7 @@ func RunScriptUse(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
scriptUseParams := scriptUseParams{
@@ -60,13 +57,11 @@ func doScriptUse(scriptUseParams scriptUseParams) error {
res, err := scriptUseParams.saasHttp.ScriptUse(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Use Script error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "script use failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
scriptRes := res.GetScriptUseRes()

View File

@@ -2,7 +2,6 @@ package main
import (
"fmt"
"os"
"strings"
)
@@ -20,10 +19,7 @@ func RunTarget(args ...string) error {
case "delete":
return RunTargetDelete(args...)
default:
err := fmt.Errorf(`unknown command "%s"`+"\n"+`Run 'saastool target help' for usage`, name)
fmt.Fprintln(os.Stderr, err)
return err
return fmt.Errorf(`Unknown command "%s"`+"\n"+`Run 'saastool target help' for usage`, name)
}
}

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -24,8 +23,7 @@ func RunTargetCreate(args ...string) error {
targetDesc := paramTaskDesc(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*targetId) == 0 {
@@ -35,8 +33,7 @@ func RunTargetCreate(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
createTargetParams := createTargetParams{
@@ -63,15 +60,12 @@ func doTargetCreate(createTargetParams createTargetParams) error {
}
res, err := createTargetParams.saasHttp.TargetCreate(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Create Target error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "target create failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
targetRes := res.GetTargetCreateRes()

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -22,8 +21,7 @@ func RunTargetDelete(args ...string) error {
targetId := paramTarget(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*targetId) == 0 {
@@ -33,8 +31,7 @@ func RunTargetDelete(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
deleteTargetParams := deleteTargetParams{
@@ -60,14 +57,11 @@ func doTargetDelete(deleteTargetParams deleteTargetParams) error {
res, err := deleteTargetParams.saasHttp.TargetDelete(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Target delete error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
err = fmt.Errorf("target delete failed. code:%v, status:%v", res.Code, res.Status)
fmt.Fprintln(os.Stderr, err)
return err
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
targetDeleteRes := res.GetTargetDeleteRes()

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"strings"
"git.algo.com.cn/public/saasapi"
@@ -25,8 +24,7 @@ func RunTargetList(args ...string) error {
listBinds := paramListBinds(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 {
@@ -42,8 +40,7 @@ func RunTargetList(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
listTargetParams := listTargetParams{
@@ -70,15 +67,12 @@ func doTargetList(listTargetParams listTargetParams) error {
}
res, err := listTargetParams.saasHttp.TargetList(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit List Target error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "Target list failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
targetRes := res.GetTargetListRes()

View File

@@ -2,7 +2,6 @@ package main
import (
"fmt"
"os"
"strings"
)
@@ -30,10 +29,7 @@ func RunTask(args ...string) error {
case "run":
return RunTaskRun(args...)
default:
err := fmt.Errorf(`unknown command "%s"`+"\n"+`Run 'saastool task help' for usage`, name)
fmt.Fprintln(os.Stderr, err)
return err
return fmt.Errorf(`Unknown command "%s"`+"\n"+`Run 'saastool task help' for usage`, name)
}
}

View File

@@ -23,8 +23,7 @@ func RunTaskCreate(args ...string) error {
hashFile := paramInputHashFile(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*hashFile) == 0 {
@@ -34,8 +33,7 @@ func RunTaskCreate(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
createTaskParams := createTaskParams{
@@ -50,12 +48,11 @@ func RunTaskCreate(args ...string) error {
taskBuf, err := os.ReadFile(createTaskParams.hashFile)
if err != nil {
fmt.Fprintln(os.Stderr, "open task file error", "err", err)
return err
return fmt.Errorf("open task file error: %w", err)
}
if err = protojson.Unmarshal(taskBuf, createTaskParams.task); err != nil {
fmt.Fprintln(os.Stderr, "parse task file error", "err", err)
return fmt.Errorf("parse task file error: %w", err)
}
return doTaskCreate(createTaskParams)
@@ -69,15 +66,12 @@ func doTaskCreate(createTaskParams createTaskParams) error {
}
res, err := createTaskParams.saasHttp.TaskCreate(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Create Task error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "task create failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
taskRes := res.GetTaskCreateRes()

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -22,8 +21,7 @@ func RunTaskDelete(args ...string) error {
sha256 := paramSha256(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*sha256) == 0 {
@@ -33,8 +31,7 @@ func RunTaskDelete(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
deleteTaskParams := deleteTaskParams{
@@ -46,15 +43,11 @@ func RunTaskDelete(args ...string) error {
},
}
taskRes, err := doTaskDelete(deleteTaskParams)
return doTaskDelete(deleteTaskParams)
if err != nil {
fmt.Printf("task res: %v\n", protojson.Format(taskRes))
}
return err
}
func doTaskDelete(deleteTaskParams deleteTaskParams) (*saasapi.Task, error) {
func doTaskDelete(deleteTaskParams deleteTaskParams) error {
saasReq := &saasapi.SaasReq{
Cmd: &saasapi.SaasReq_TaskDelete{
TaskDelete: &saasapi.TaskDelete{
@@ -65,17 +58,14 @@ func doTaskDelete(deleteTaskParams deleteTaskParams) (*saasapi.Task, error) {
res, err := deleteTaskParams.saasHttp.TaskDelete(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Task delete error", "err", err)
return nil, err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
err = fmt.Errorf("task delete failed. code:%v, status:%v", res.Code, res.Status)
fmt.Fprintln(os.Stderr, err)
return nil, err
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
taskRes := res.GetTaskDeleteRes()
fmt.Println(protojson.Format(taskRes))
return taskRes, nil
fmt.Printf("task res: %v\n", protojson.Format(taskRes))
return nil
}

View File

@@ -24,8 +24,7 @@ func RunTaskDownload(args ...string) error {
destPath := paramDestPath(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*sha256) == 0 || len(*destPath) == 0 {
@@ -35,8 +34,7 @@ func RunTaskDownload(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
downloadTaskParams := downloadTaskParams{
@@ -63,9 +61,7 @@ func doTaskDownload(downloadTaskParams downloadTaskParams) error {
}
if len(taskInfo.GetSourcePath()) == 0 {
err = fmt.Errorf("task download failed. task info source path is empty")
fmt.Fprintln(os.Stderr, err)
return err
return fmt.Errorf("download task failed: %w, task info source path is empty", err)
}
totalFiles := len(taskInfo.GetTaskFileInfos())
@@ -105,9 +101,7 @@ func doTaskDownload(downloadTaskParams downloadTaskParams) error {
}
if blockRes.GetCode() != saasapi.ErrorCode_SUCC {
err = fmt.Errorf("download block error, code %d, msg %s", blockRes.GetCode(), blockRes.GetStatus())
fmt.Fprintln(os.Stderr, err)
return err
return fmt.Errorf("download block error, code %d, msg %s", blockRes.GetCode(), blockRes.GetStatus())
} else {
fmt.Printf("download block success. file: %v, sha256 %v. block %v/%v, file %v/%v\n",
finfo.GetFileName(), binfo.GetBlockSha256(),

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -22,8 +21,7 @@ func RunTaskInfo(args ...string) error {
sha256 := paramSha256(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*sha256) == 0 {
@@ -33,8 +31,7 @@ func RunTaskInfo(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
infoTaskParams := infoTaskParams{
@@ -46,12 +43,9 @@ func RunTaskInfo(args ...string) error {
},
}
taskRes, err := doTaskInfo(infoTaskParams)
if err != nil {
fmt.Printf("task res: %v\n", protojson.Format(taskRes))
}
_, err = doTaskInfo(infoTaskParams)
return err
}
func doTaskInfo(infoTaskParams infoTaskParams) (*saasapi.Task, error) {
@@ -65,17 +59,15 @@ func doTaskInfo(infoTaskParams infoTaskParams) (*saasapi.Task, error) {
res, err := infoTaskParams.saasHttp.TaskInfo(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Task info error", "err", err)
return nil, err
return nil, fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
err = fmt.Errorf("task info failed. code:%v, status:%v", res.Code, res.Status)
fmt.Fprintln(os.Stderr, err)
return nil, err
return nil, fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
taskRes := res.GetTaskInfoRes()
fmt.Println(protojson.Format(taskRes))
fmt.Printf("task res: %v\n", protojson.Format(taskRes))
return taskRes, nil
}

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -22,8 +21,7 @@ func RunTaskList(args ...string) error {
filter := paramFilterStatus(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 {
@@ -33,8 +31,7 @@ func RunTaskList(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
listTaskParams := listTaskParams{
@@ -71,15 +68,12 @@ func doTaskList(listTaskParams listTaskParams) error {
}
res, err := listTaskParams.saasHttp.TaskList(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit List Task error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
fmt.Fprintln(os.Stderr, "task list failed", "code", res.Code, "status", res.Status)
return nil
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
taskRes := res.GetTaskListRes()

View File

@@ -55,8 +55,7 @@ func RunTaskMake(args ...string) error {
ds := paramDataSpaceId(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*sourcePath) == 0 || len(*hashFile) == 0 || len(*ds) == 0 {
@@ -64,9 +63,8 @@ func RunTaskMake(args ...string) error {
return nil
}
if strings.ToLower(*ds) == "openid" && len(*appid) == 0 {
fmt.Fprintln(os.Stderr, "appid must be set when data space is openid")
return nil
if strings.ToLower(*ds) == "wuid" && len(*appid) == 0 {
return fmt.Errorf("appid must be set when data space is wuid")
}
blockSizeNum, err := ParseByteSize(*blockSize)
@@ -77,8 +75,7 @@ func RunTaskMake(args ...string) error {
}
if blockSizeNum < blockSizeMin || blockSizeNum > blockSizeMax {
fmt.Fprintln(os.Stderr, "block size error", "min", blockSizeMin, "max", blockSizeMax)
return nil
return fmt.Errorf("block size error. min: %v, max: %v, current: %v", blockSizeMin, blockSizeMax, blockSizeNum)
}
makeTaskParams := &makeTaskParams{

View File

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"net/http"
"os"
"git.algo.com.cn/public/saasapi"
"git.algo.com.cn/public/saasapi/pkg/saashttp"
@@ -22,8 +21,7 @@ func RunTaskRun(args ...string) error {
sha256 := paramSha256(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*sha256) == 0 {
@@ -33,8 +31,7 @@ func RunTaskRun(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
runTaskParams := runTaskParams{
@@ -61,14 +58,11 @@ func doTaskRun(runTaskParams runTaskParams) error {
res, err := runTaskParams.saasHttp.TaskRun(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit Task run error", "err", err)
return err
return fmt.Errorf("Submit Command error: %w", err)
}
if res.Code != saasapi.ErrorCode_SUCC {
err = fmt.Errorf("task run failed. code:%v, status:%v", res.Code, res.Status)
fmt.Fprintln(os.Stderr, err)
return err
return fmt.Errorf("Command failed. code:%v, status:%v", res.Code, res.Status)
}
fmt.Println("task run success", protojson.Format(res))

View File

@@ -22,8 +22,7 @@ func RunTaskUpload(args ...string) error {
sha256 := paramSha256(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*sha256) == 0 {
@@ -33,8 +32,7 @@ func RunTaskUpload(args ...string) error {
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
uploadTaskParams := uploadTaskParams{
@@ -94,9 +92,7 @@ func doTaskUpload(uploadTaskParams uploadTaskParams) error {
}
if blockRes.GetCode() != saasapi.ErrorCode_SUCC {
err = fmt.Errorf("upload block error, code %d, msg %s", blockRes.GetCode(), blockRes.GetStatus())
fmt.Fprintln(os.Stderr, err)
return err
return fmt.Errorf("upload block error, code %d, msg %s", blockRes.GetCode(), blockRes.GetStatus())
} else {
fmt.Printf("upload block success. file: %v, sha256 %v. block %v/%v, file %v/%v\n",
finfo.GetFileName(), binfo.GetBlockSha256(),

View File

@@ -34,8 +34,7 @@ func RunWrite(args ...string) error {
clear := paramClear(fs)
if err := fs.Parse(args); err != nil {
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
return err
return fmt.Errorf("Command line parse error: %w", err)
}
if fs.NArg() > 0 || len(*sourcePath) == 0 || len(*ds) == 0 {
@@ -43,15 +42,14 @@ func RunWrite(args ...string) error {
return nil
}
if strings.ToLower(*ds) == "openid" && len(*appid) == 0 {
fmt.Fprintln(os.Stderr, "appid must be set when data space is openid")
if strings.ToLower(*ds) == "wuid" && len(*appid) == 0 {
fmt.Fprintln(os.Stderr, "appid must be set when data space is wuid")
return nil
}
cfg, err := LoadConfigFile(*cfgFile)
if err != nil {
fmt.Fprintln(os.Stderr, "load config file error", "err", err)
return err
return fmt.Errorf("LoadConfigFile error: %w", err)
}
writeParams := writeParams{
@@ -74,8 +72,7 @@ func RunWrite(args ...string) error {
func doWrite(writeParams writeParams) error {
fsInfo, err := os.Stat(writeParams.sourcePath)
if err != nil {
fmt.Fprintln(os.Stderr, "file stat error", "err", err)
return err
return fmt.Errorf("file stat error: %w", err)
}
if !fsInfo.IsDir() {
@@ -86,8 +83,7 @@ func doWrite(writeParams writeParams) error {
// 读取目录下信息
dirEntry, err := os.ReadDir(writeParams.sourcePath)
if err != nil {
fmt.Fprintln(os.Stderr, "read dir error", "err", err)
return err
return fmt.Errorf("read dir error: %w", err)
}
// 遍历目录
@@ -107,8 +103,7 @@ func doLoadFileToWrite(writeParams writeParams) error {
// 读取文件并按行遍历,以\t分割为两列第一列为userid第二列解析为string数组
file, err := os.Open(writeParams.sourcePath)
if err != nil {
fmt.Fprintln(os.Stderr, "open file error", "file", writeParams.sourcePath, "err", err)
return err
return fmt.Errorf("open file error: %w. file: %v", err, writeParams.sourcePath)
}
defer file.Close()
@@ -127,8 +122,7 @@ func doLoadFileToWrite(writeParams writeParams) error {
}
saasWriteItem := &saasapi.WriteItem{}
if err = protojson.Unmarshal([]byte(line), saasWriteItem); err != nil {
fmt.Fprintln(os.Stderr, "protojson unmashal error", "file", writeParams.sourcePath, "line", total, "err", err)
return err
return fmt.Errorf("protojson unmashal error: %w. file: %v line: %v", err, writeParams.sourcePath, total)
}
saasWriteItems = append(saasWriteItems, saasWriteItem)
@@ -171,15 +165,12 @@ func submitWrite(writeParams writeParams, saasWriteCmds []*saasapi.WriteItem) (e
write.WriteItems = saasWriteCmds
res, err := writeParams.saasHttp.Write(saasReq)
if err != nil {
fmt.Fprintln(os.Stderr, "submit write error", "err", err)
return
return 0, fmt.Errorf("Submit Command error: %w", err)
}
if res.GetCode() != saasapi.ErrorCode_SUCC {
err = fmt.Errorf("write failed. code:%v, status:%v", res.GetCode(), res.GetStatus())
fmt.Fprintln(os.Stderr, protojson.Format(res))
return
}

View File

@@ -3,8 +3,7 @@
set -e
docker buildx build --platform linux/amd64 \
-t rta-docker.pkg.coding.net/public/docker/saastool:latest \
-t rta-docker.pkg.coding.net/public/docker/saastool:2025121617 \
-t rta-docker.pkg.coding.net/public/docker/saastool:2026011914 \
-o type=registry \
-f saastool.Dockerfile \
../ ;

View File

@@ -6,6 +6,7 @@ const (
writePath = "/saas/write"
readPath = "/saas/read"
columnWritePath = "/saas/column_write"
resetDSPath = "/saas/resetds"
taskCreatePath = "/saas/task/create"
taskListPath = "/saas/task/list"
taskInfoPath = "/saas/task/info"
@@ -18,7 +19,7 @@ const (
targetDeletePath = "/saas/target/delete"
bindSetPath = "/saas/bind/set"
bindDeletePath = "/saas/bind/delete"
scriptRunPath = "/saas/script/run"
scriptDebugPath = "/saas/script/debug"
scriptCreatePath = "/saas/script/create"
scriptListPath = "/saas/script/list"
scriptDeletePath = "/saas/script/delete"
@@ -45,6 +46,7 @@ type ApiUrls struct {
WritePath string
ReadPath string
ColumnWritePath string
ResetDSPath string
TaskCreatePath string
TaskListPath string
TaskInfoPath string
@@ -57,7 +59,7 @@ type ApiUrls struct {
TargetDeletePath string
BindSetPath string
BindDeletePath string
ScriptRunPath string
ScriptDebugPath string
ScriptCreatePath string
ScriptListPath string
ScriptDeletePath string
@@ -100,6 +102,11 @@ func InitAPIUrl(c *ApiUrls) *ApiUrls {
} else {
r.ColumnWritePath = columnWritePath
}
if c.ResetDSPath != "" {
r.ResetDSPath = c.ResetDSPath
} else {
r.ResetDSPath = resetDSPath
}
if c.TaskCreatePath != "" {
r.TaskCreatePath = c.TaskCreatePath
} else {
@@ -162,10 +169,10 @@ func InitAPIUrl(c *ApiUrls) *ApiUrls {
r.BindDeletePath = bindDeletePath
}
if c.ScriptRunPath != "" {
r.ScriptRunPath = c.ScriptRunPath
if c.ScriptDebugPath != "" {
r.ScriptDebugPath = c.ScriptDebugPath
} else {
r.ScriptRunPath = scriptRunPath
r.ScriptDebugPath = scriptDebugPath
}
if c.ScriptCreatePath != "" {

View File

@@ -53,6 +53,11 @@ func (c *SaasClient) ColumnWrite(saasReq *saasapi.SaasReq) (saasRes *saasapi.Saa
return c.post(postUrl, saasReq)
}
func (c *SaasClient) ResetDS(saasReq *saasapi.SaasReq) (saasRes *saasapi.SaasRes, err error) {
postUrl := c.makeUrl(c.ApiUrls.BaseUrl, c.ApiUrls.ResetDSPath)
return c.post(postUrl, saasReq)
}
func (c *SaasClient) TaskCreate(saasReq *saasapi.SaasReq) (saasRes *saasapi.SaasRes, err error) {
postUrl := c.makeUrl(c.ApiUrls.BaseUrl, c.ApiUrls.TaskCreatePath)
return c.post(postUrl, saasReq)
@@ -113,8 +118,8 @@ func (c *SaasClient) BindDelete(saasReq *saasapi.SaasReq) (saasRes *saasapi.Saas
return c.post(postUrl, saasReq)
}
func (c *SaasClient) ScriptRun(saasReq *saasapi.SaasReq) (saasRes *saasapi.SaasRes, err error) {
postUrl := c.makeUrl(c.ApiUrls.BaseUrl, c.ApiUrls.ScriptRunPath)
func (c *SaasClient) ScriptDebug(saasReq *saasapi.SaasReq) (saasRes *saasapi.SaasRes, err error) {
postUrl := c.makeUrl(c.ApiUrls.BaseUrl, c.ApiUrls.ScriptDebugPath)
return c.post(postUrl, saasReq)
}
@@ -186,14 +191,12 @@ func (c *SaasClient) makeUrl(baseUrl, path string, params ...string) string {
func (c *SaasClient) post(url string, saasReq *saasapi.SaasReq) (saasRes *saasapi.SaasRes, err error) {
postBuf, err := proto.Marshal(saasReq)
if err != nil {
fmt.Println("marshal saas req error", err)
return nil, err
return nil, fmt.Errorf("Marshal saas req error. %w", err)
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(postBuf))
if err != nil {
fmt.Println("http new request error", err)
return nil, err
return nil, fmt.Errorf("Http new request error. %w", err)
}
timeStamp := strconv.FormatInt(time.Now().Unix(), 10)
@@ -206,30 +209,30 @@ func (c *SaasClient) post(url string, saasReq *saasapi.SaasReq) (saasRes *saasap
req.Header.Add("Content-Type", "application/x-protobuf")
res, err := c.Client.Do(req)
if err != nil {
fmt.Println("http send error", err)
return nil, err
return nil, fmt.Errorf("Http do request error. %w", err)
}
defer res.Body.Close()
if res.StatusCode != 200 {
return nil, fmt.Errorf("NOT 200. %v", res.StatusCode)
}
resBody, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println("http read body error", err)
return nil, err
return nil, fmt.Errorf("Http read body error. %w", err)
}
saasRes = &saasapi.SaasRes{}
if c.ResponseEncoder == RESPONSE_ENCODER_PROTOBUF {
err = proto.Unmarshal(resBody, saasRes)
if err != nil {
fmt.Println("unmarshal response body to protobuf error", err)
return nil, err
return nil, fmt.Errorf("unmarshal response body to protobuf error. %w", err)
}
} else {
err = json.Unmarshal(resBody, saasRes)
if err != nil {
fmt.Println("unmarshal response body to json error", err)
return nil, err
return nil, fmt.Errorf("unmarshal response body to json error. %w", err)
}
}
@@ -238,39 +241,36 @@ func (c *SaasClient) post(url string, saasReq *saasapi.SaasReq) (saasRes *saasap
func (c *SaasClient) upload(url string, file *os.File, offset int64, size int) (saasRes *saasapi.SaasRes, err error) {
if file == nil {
return nil, fmt.Errorf("file is nil")
return nil, fmt.Errorf("file is nil.")
}
if size <= 0 {
return nil, fmt.Errorf("size is invalid")
return nil, fmt.Errorf("size is invalid.")
}
buf := make([]byte, size)
n, err := file.ReadAt(buf, offset)
if err != nil {
fmt.Println("read file error", err)
return nil, err
return nil, fmt.Errorf("Read file error. %w", err)
}
if n != size {
return nil, fmt.Errorf("read file error")
return nil, fmt.Errorf("Read file size not match. %v", n)
}
var gzBuf bytes.Buffer
gz := gzip.NewWriter(&gzBuf)
if _, err := gz.Write(buf); err != nil {
fmt.Println("gzip write error", err)
return nil, err
return nil, fmt.Errorf("GZip write error. %w", err)
}
if err = gz.Close(); err != nil {
return nil, err
return nil, fmt.Errorf("GZip close error. %w", err)
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(gzBuf.Bytes()))
if err != nil {
fmt.Println("http new request error", err)
return nil, err
return nil, fmt.Errorf("Http new request error. %w", err)
}
timeStamp := strconv.FormatInt(time.Now().Unix(), 10)
@@ -284,30 +284,30 @@ func (c *SaasClient) upload(url string, file *os.File, offset int64, size int) (
req.Header.Add("Content-Encoding", "gzip")
res, err := c.Client.Do(req)
if err != nil {
fmt.Println("http send error", err)
return nil, err
return nil, fmt.Errorf("Http do request error. %w", err)
}
defer res.Body.Close()
if res.StatusCode != 200 {
return nil, fmt.Errorf("NOT 200. %v", res.StatusCode)
}
resBody, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println("http read body error", err)
return nil, err
return nil, fmt.Errorf("http read body error. %w", err)
}
saasRes = &saasapi.SaasRes{}
if c.ResponseEncoder == RESPONSE_ENCODER_PROTOBUF {
err = proto.Unmarshal(resBody, saasRes)
if err != nil {
fmt.Println("unmarshal response body to protobuf error", err)
return nil, err
return nil, fmt.Errorf("unmarshal response body to protobuf error. %w", err)
}
} else {
err = json.Unmarshal(resBody, saasRes)
if err != nil {
fmt.Println("unmarshal response body to json error", err)
return nil, err
return nil, fmt.Errorf("unmarshal response body to json error. %w", err)
}
}
@@ -316,17 +316,16 @@ func (c *SaasClient) upload(url string, file *os.File, offset int64, size int) (
func (c *SaasClient) download(url string, file *os.File, offset int64, size int) (saasRes *saasapi.SaasRes, err error) {
if file == nil {
return nil, fmt.Errorf("file is nil")
return nil, fmt.Errorf("file is nil.")
}
if size <= 0 {
return nil, fmt.Errorf("size is invalid")
return nil, fmt.Errorf("size is invalid.")
}
req, err := http.NewRequest("GET", url, bytes.NewBuffer([]byte{}))
if err != nil {
fmt.Println("http new request error", err)
return nil, err
return nil, fmt.Errorf("Http new request error. %w", err)
}
timeStamp := strconv.FormatInt(time.Now().Unix(), 10)
@@ -340,24 +339,20 @@ func (c *SaasClient) download(url string, file *os.File, offset int64, size int)
res, err := c.Client.Do(req)
if err != nil {
fmt.Println("http send error", err)
return nil, err
return nil, fmt.Errorf("Http do request error. %w", err)
}
defer res.Body.Close()
if res.StatusCode != 200 {
err = fmt.Errorf("NOT 200. %v", res.StatusCode)
fmt.Println("http state error", err)
return nil, err
return nil, fmt.Errorf("http state error. %w", err)
}
bodyReader := res.Body
if strings.Contains(res.Header.Get("Content-Encoding"), "gzip") {
gz, err := gzip.NewReader(res.Body)
if err != nil {
fmt.Println("gzip newreader error", err)
return nil, err
return nil, fmt.Errorf("GZip newreader error. %w", err)
}
defer gz.Close()
bodyReader = gz
@@ -365,8 +360,7 @@ func (c *SaasClient) download(url string, file *os.File, offset int64, size int)
resBody, err := io.ReadAll(bodyReader)
if err != nil {
fmt.Println("read body error", err)
return nil, err
return nil, fmt.Errorf("Http read body error. %w", err)
}
saasRes = &saasapi.SaasRes{}
@@ -374,22 +368,18 @@ func (c *SaasClient) download(url string, file *os.File, offset int64, size int)
if len(resBody) == size {
file.WriteAt(resBody, offset)
} else {
err = fmt.Errorf("body size error. body:%v, want:%v", len(resBody), size)
fmt.Println("http read body error", err)
return nil, err
return nil, fmt.Errorf("body size error. body:%v, want:%v", len(resBody), size)
}
} else {
if c.ResponseEncoder == RESPONSE_ENCODER_PROTOBUF {
err = proto.Unmarshal(resBody, saasRes)
if err != nil {
fmt.Println("unmarshal response body to protobuf error", err)
return nil, err
return nil, fmt.Errorf("unmarshal response body to protobuf error. %w", err)
}
} else {
err = json.Unmarshal(resBody, saasRes)
if err != nil {
fmt.Println("unmarshal response body to json error", err)
return nil, err
return nil, fmt.Errorf("unmarshal response body to json error. %w", err)
}
}
}