Добавление логирования

Добавления возможности использования github токена
This commit is contained in:
2025-10-04 00:36:48 +03:00
parent b826188019
commit 72131fc7ac
8 changed files with 153 additions and 21 deletions

View File

@@ -44,30 +44,88 @@ var (
ErrIncorrectPassword = errors.New("incorrect password")
)
var httpModule = &starlarkstruct.Module{
Name: "http",
Members: starlark.StringDict{
"get": starlark.NewBuiltin("http.get", httpGet),
"post": starlark.NewBuiltin("http.post", httpPost),
"put": starlark.NewBuiltin("http.put", httpPut),
"head": starlark.NewBuiltin("http.head", httpHead),
},
func newHTTPModule(cfg *config.Config) *starlarkstruct.Module {
return &starlarkstruct.Module{
Name: "http",
Members: starlark.StringDict{
"get": httpGetWithConfig(cfg),
"post": httpPostWithConfig(cfg),
"put": httpPutWithConfig(cfg),
"head": httpHeadWithConfig(cfg),
},
}
}
func httpGet(thread *starlark.Thread, b *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
return makeRequest("http.get", http.MethodGet, args, kwargs, thread)
func httpGetWithConfig(cfg *config.Config) *starlark.Builtin {
return starlark.NewBuiltin("http.get", func(thread *starlark.Thread, b *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
return makeRequestWithConfig("http.get", http.MethodGet, args, kwargs, thread, cfg)
})
}
func httpPost(thread *starlark.Thread, b *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
return makeRequest("http.post", http.MethodPost, args, kwargs, thread)
func httpPostWithConfig(cfg *config.Config) *starlark.Builtin {
return starlark.NewBuiltin("http.post", func(thread *starlark.Thread, b *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
return makeRequestWithConfig("http.post", http.MethodPost, args, kwargs, thread, cfg)
})
}
func httpPut(thread *starlark.Thread, b *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
return makeRequest("http.put", http.MethodPut, args, kwargs, thread)
func httpPutWithConfig(cfg *config.Config) *starlark.Builtin {
return starlark.NewBuiltin("http.put", func(thread *starlark.Thread, b *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
return makeRequestWithConfig("http.put", http.MethodPut, args, kwargs, thread, cfg)
})
}
func httpHead(thread *starlark.Thread, b *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
return makeRequest("http.head", http.MethodHead, args, kwargs, thread)
func httpHeadWithConfig(cfg *config.Config) *starlark.Builtin {
return starlark.NewBuiltin("http.head", func(thread *starlark.Thread, b *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
return makeRequestWithConfig("http.head", http.MethodHead, args, kwargs, thread, cfg)
})
}
func makeRequestWithConfig(name, method string, args starlark.Tuple, kwargs []starlark.Tuple, thread *starlark.Thread, cfg *config.Config) (starlark.Value, error) {
var (
url string
redirect = true
headers = &starlarkHeaders{}
body = newBodyReader()
)
err := starlark.UnpackArgs(name, args, kwargs, "url", &url, "redirect??", &redirect, "headers??", headers, "body??", body)
if err != nil {
return nil, err
}
req, err := http.NewRequest(method, url, body)
if err != nil {
return nil, err
}
// Устанавливаем заголовки из аргументов
if headers.Header != nil {
req.Header = headers.Header
}
// Добавляем GitHub токен для запросов к api.github.com
if cfg.GitHub.Token != "" && strings.Contains(url, "api.github.com") {
req.Header.Set("Authorization", "token "+cfg.GitHub.Token)
}
client := http.DefaultClient
if !redirect {
client = &http.Client{
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse
},
}
}
log.Debug("Making HTTP request").Str("url", url).Str("method", req.Method).Bool("redirect", redirect).Stringer("pos", thread.CallFrame(1).Pos).Send()
res, err := client.Do(req)
if err != nil {
return nil, err
}
log.Debug("Got HTTP response").Str("host", res.Request.URL.Host).Int("code", res.StatusCode).Stringer("pos", thread.CallFrame(1).Pos).Send()
return starlarkResponse(res), nil
}
type starlarkBodyReader struct {

View File

@@ -38,7 +38,7 @@ type Options struct {
func Register(sd starlark.StringDict, opts *Options) {
sd["run_every"] = runEveryModule
sd["sleep"] = starlark.NewBuiltin("sleep", sleep)
sd["http"] = httpModule
sd["http"] = newHTTPModule(opts.Config)
sd["regex"] = regexModule
sd["store"] = storeModule(opts.DB, opts.Name)
sd["updater"] = updaterModule(opts.Config)

View File

@@ -178,6 +178,15 @@ func runScheduled(thread *starlark.Thread, fn *starlark.Function, duration strin
tickerMtx.Unlock()
log.Debug("Created new scheduled ticker").Int("handle", handle).Str("duration", duration).Stringer("pos", thread.CallFrame(1).Pos).Send()
// Запускаем функцию немедленно при первой регистрации
go func() {
log.Info("Running plugin function immediately on startup").Str("plugin", thread.Name).Str("function", fn.Name()).Send()
_, err := starlark.Call(thread, fn, nil, nil)
if err != nil {
log.Warn("Error while executing initial plugin function").Str("plugin", thread.Name).Str("function", fn.Name()).Err(err).Send()
}
}()
go func() {
for range t.C {
log.Debug("Calling scheduled function").Str("name", fn.Name()).Stringer("pos", fn.Position()).Send()

View File

@@ -87,11 +87,34 @@ func updaterPull(cfg *config.Config) *starlark.Builtin {
return nil, err
}
// Исправляем права доступа после git pull
err = fixRepoPermissions(repoDir)
if err != nil {
log.Warn("Failed to fix repository permissions after pull").Str("repo", repoName).Err(err).Send()
}
_ = repoConfig // Избегаем неиспользованной переменной
return starlark.None, nil
})
}
// fixRepoPermissions рекурсивно устанавливает права 775 для директорий и 664 для файлов
func fixRepoPermissions(path string) error {
return filepath.Walk(path, func(filePath string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
// Устанавливаем права 2775 для директорий (setgid)
return os.Chmod(filePath, 0o2775)
} else {
// Устанавливаем права 664 для файлов
return os.Chmod(filePath, 0o664)
}
})
}
func updaterPushChanges(cfg *config.Config) *starlark.Builtin {
return starlark.NewBuiltin("updater.push_changes", func(thread *starlark.Thread, b *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
var repoName, msg string