kscript 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +34 -76
- data/lib/kscript/completions/kscript.bash +1 -1
- data/lib/kscript/completions/kscript.zsh +1 -0
- data/lib/kscript/plugins/kk_apnic_ip_utils.rb +4 -3
- data/lib/kscript/plugins/kk_cursor_rules_utils.rb +1 -1
- data/lib/kscript/plugins/kk_hn_jobs_utils.rb +91 -0
- data/lib/kscript/plugins/kk_jenkins_manage_utils.rb +18 -14
- data/lib/kscript/plugins/kk_kibana_manage_utils.rb +24 -10
- data/lib/kscript/plugins/kk_usd_rate_utils.rb +4 -4
- data/lib/kscript/version.rb +1 -1
- data/lib/kscript.rb +0 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9858f96cfbf2ee112ddc38885f50d0e2dec2247536c0611de542641b4865cbcf
|
4
|
+
data.tar.gz: e3fec35b64539ed8a87d24fc4d4b647d6ff3f202f9844d61e9801b95d846aec2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46ed820b66174793117e203f24a50b65c274247992f29283753b13f6c5f25026651bdb8222898636e2962477e78ecd66cbad311d8dcf54deff21dc4555051f82
|
7
|
+
data.tar.gz: 36468f99eaccf8f268faf3de72201d435af545407bdab20e9601a898717bdd6f2b0dc7f1570d0c7700b0e98e3224724fbc8119485b8dbee8c6297029ad527f5a
|
data/README.md
CHANGED
@@ -16,6 +16,23 @@ _ ,< _(__ )/ /__ _ / _ / __ /_/ / /_
|
|
16
16
|
|
17
17
|
---
|
18
18
|
|
19
|
+
## 🗺️ 架构图
|
20
|
+
|
21
|
+
```mermaid
|
22
|
+
graph TD
|
23
|
+
A[用户终端/脚本] -->|命令行| B(kscript CLI)
|
24
|
+
B --> C[插件注册与分发]
|
25
|
+
B --> D[日志系统]
|
26
|
+
B --> E[配置加载]
|
27
|
+
B --> F[Shell补全生成]
|
28
|
+
B --> G[结构化日志/美化输出]
|
29
|
+
B --> H[CI/CD自动发布]
|
30
|
+
F --> I1[zsh补全脚本]
|
31
|
+
F --> I2[bash补全脚本]
|
32
|
+
H --> J[GitHub Actions]
|
33
|
+
J --> K[RubyGems发布]
|
34
|
+
```
|
35
|
+
|
19
36
|
## ✨ 特性亮点
|
20
37
|
- 统一 CLI 框架,所有命令一键调用,美化输出
|
21
38
|
- 插件化架构,业务命令即插件,易扩展、易维护
|
@@ -97,91 +114,32 @@ kscript port_scan 192.168.1.1 --log-level=debug
|
|
97
114
|
| project | `vcs_cleaner` | `kscript vcs_cleaner ~/projects/src` | `[src_path]` | Clean old source code versions, keep N latest. |
|
98
115
|
| project | `file_rename` | `kscript file_rename foo bar ./src` | `<pattern> <replacement> [path]` | Batch rename files by pattern. |
|
99
116
|
| system | `shell_helper` | `kscript shell_helper 'ls'` | `[subcommand] [args...]` | Query shell command usage and cheatsheets. |
|
100
|
-
| system | `lvm_manage` | `kscript lvm_manage /dev/sda2 /mnt/data`
|
101
|
-
| macos | `mac_status` | `kscript mac_status` | | Show macOS system resource monitor report. |
|
102
|
-
| macos | `mac_optimize` | `kscript mac_optimize` | | Optimize macOS system performance. |
|
103
|
-
| media | `ffmpeg_install` | `kscript ffmpeg_install 6.0` | `[version]` | Install and verify FFmpeg on Linux. |
|
104
|
-
| elastic | `elastic_cert_finger` | `kscript elastic_cert_finger ./ca.crt` | `<cert_file>` | Generate Elasticsearch certificate SHA256 fingerprint. |
|
105
|
-
| elastic | `kibana_manage` | `kscript kibana_manage export --host=localhost --index=log-*` | `[subcommand] [options]` | Kibana automation: space, index, user, role management. |
|
106
|
-
| ci | `jenkins_manage` | `kscript jenkins_manage list --host=jenkins.local` | `[subcommand] [options]` | Jenkins job export/import automation. |
|
107
|
-
| cloud | `aws_s3` | `kscript aws_s3 --file local.txt --bucket my-bucket ...` | `--file --bucket --key --region --access_key --secret_key` | Upload a file to AWS S3 for testing. |
|
108
|
-
| finance | `usd_rate` | `kscript usd_rate CNY` | `[currency_code]` | Get latest USD exchange rates. |
|
109
|
-
|
110
|
-
---
|
111
|
-
|
112
|
-
## ⚡ Shell 自动补全 & 配置示例
|
113
|
-
|
114
|
-
- 首次安装/升级自动为 zsh/bash 部署补全脚本,并生成 `~/.kscript/.env` 配置示例
|
115
|
-
- 补全脚本路径:
|
116
|
-
- zsh: `~/.zsh/completions/_kscript`
|
117
|
-
- bash: `~/.bash_completion.d/kscript`
|
118
|
-
- 配置文件路径:
|
119
|
-
- `~/.kscript/.env`(自动生成,支持 ENV 变量注释说明)
|
120
|
-
- 手动生成补全:
|
121
|
-
```bash
|
122
|
-
kscript completion zsh > ~/.zsh/completions/_kscript
|
123
|
-
kscript completion bash > ~/.bash_completion.d/kscript
|
124
|
-
```
|
125
|
-
|
126
|
-
---
|
127
|
-
|
128
|
-
## ⚙️ 全局配置(.env 格式)
|
129
|
-
|
130
|
-
所有全局参数均通过 `~/.kscript/.env` 文件(自动生成,标准 .env 格式)或环境变量注入。例如:
|
131
|
-
|
132
|
-
```env
|
133
|
-
# AWS S3 upload config
|
134
|
-
AWS_BUCKET=my-bucket
|
135
|
-
AWS_REGION=ap-northeast-1
|
136
|
-
AWS_ACCESS_KEY_ID=xxx
|
137
|
-
AWS_SECRET_ACCESS_KEY=yyy
|
138
|
-
|
139
|
-
# Logging config
|
140
|
-
KSCRIPT_LOG_LEVEL=info
|
141
|
-
LOG=1
|
142
|
-
```
|
143
|
-
---
|
144
|
-
|
145
|
-
## 🧑💻 插件开发规范
|
146
|
-
- 插件文件统一放在 `lib/kscript/plugins/kk_xxx_utils.rb`
|
147
|
-
- 类名如 `KkApnicIpUtils`,自动注册为 `apnic_ip` 命令
|
148
|
-
- 支持 `self.description`、`self.usage`、`self.arguments`、`self.group`、`self.author`
|
149
|
-
- 输出统一用 `logger.kinfo`/`logger.kerror`,支持结构化日志
|
150
|
-
- 兼容多余参数,避免 ArgumentError
|
151
|
-
- 依赖统一在主入口 require,插件只需 require 'kscript'
|
152
|
-
|
153
|
-
---
|
154
|
-
|
155
|
-
## 🚚 CI/CD 自动发布
|
156
|
-
|
157
|
-
- `.github/workflows/gem-push.yml`:main 分支和 PR 自动构建、tag push 自动发布到 RubyGems
|
158
|
-
- 需在 GitHub secrets 配置 `RUBYGEMS_API_KEY`
|
159
|
-
- [CI 状态与历史](https://github.com/kevin197011/kscript/actions/workflows/gem-push.yml)
|
117
|
+
| system | `lvm_manage` | `kscript lvm_manage /dev/sda2 /mnt/data` | `<device> <mount_point>` | Mount and manage Linux LVM volumes. |
|
160
118
|
|
161
119
|
---
|
162
120
|
|
163
|
-
##
|
164
|
-
|
165
|
-
- Ruby >= 3.0
|
166
|
-
- 依赖:bcrypt, http, nokogiri, thor, aws-sdk-s3, httpx 等
|
167
|
-
- 支持 macOS、Linux,部分工具支持 Windows
|
168
|
-
|
169
|
-
---
|
121
|
+
## 🤝 贡献指南
|
170
122
|
|
171
|
-
|
123
|
+
欢迎提交 Issue 和 Pull Request!请遵循 [Conventional Commits](https://www.conventionalcommits.org/) 规范,确保所有代码通过 Linter 检查。详细贡献流程见 CONTRIBUTING.md(如有)。
|
172
124
|
|
173
|
-
|
125
|
+
## ❓ 常见问题
|
174
126
|
|
175
|
-
|
127
|
+
- **如何启用 shell 补全?**
|
128
|
+
安装后自动生成补全脚本,重启 shell 或手动 `source ~/.zshrc`/`~/.bashrc`。
|
129
|
+
- **如何切换日志模式?**
|
130
|
+
所有命令支持 `--log` 或 `--log-level=debug`,详见上文示例。
|
131
|
+
- **如何自定义配置?**
|
132
|
+
编辑 `~/.kscript/.env`,可配置 AWS、日志等参数。
|
176
133
|
|
177
|
-
|
134
|
+
如有更多问题,欢迎提交 [Issue](https://github.com/kevin197011/kscript/issues)。
|
178
135
|
|
179
|
-
|
180
|
-
2. 遵循输出与插件开发规范
|
181
|
-
3. 保持文档与代码同步
|
136
|
+
## 📬 联系方式 & 致谢
|
182
137
|
|
183
|
-
|
138
|
+
- 作者: [kk (kevin197011)](https://github.com/kevin197011)
|
139
|
+
- 邮箱: kevin197011@outlook.com
|
184
140
|
|
185
|
-
|
141
|
+
感谢所有贡献者和开源依赖项目!
|
186
142
|
|
143
|
+
## 📄 License
|
187
144
|
|
145
|
+
This project is licensed under the [MIT License](LICENSE).
|
@@ -8,7 +8,7 @@ _kscript_completions() {
|
|
8
8
|
|
9
9
|
# Main command list as array
|
10
10
|
local opts=(
|
11
|
-
apnic_ip aws_s3 cursor_rules elastic_cert_finger ffmpeg_install file_rename ip_lookup jenkins_manage kibana_manage lvm_manage mac_optimize mac_status port_scan project_scan shell_helper usd_rate vcs_cleaner wg_acl wg_pass
|
11
|
+
apnic_ip aws_s3 cursor_rules elastic_cert_finger ffmpeg_install file_rename hn_jobs ip_lookup jenkins_manage kibana_manage lvm_manage mac_optimize mac_status port_scan project_scan shell_helper usd_rate vcs_cleaner wg_acl wg_pass
|
12
12
|
)
|
13
13
|
|
14
14
|
if [[ ${COMP_CWORD} == 1 ]]; then
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# This software is released under the MIT License.
|
6
6
|
# https://opensource.org/licenses/MIT
|
7
7
|
|
8
|
-
|
8
|
+
require 'httpx'
|
9
9
|
|
10
10
|
module Kscript
|
11
11
|
class KkApnicIpUtils < Kscript::Base
|
@@ -30,8 +30,9 @@ module Kscript
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
url = 'https://ftp.apnic.net/stats/apnic/delegated-apnic-latest'
|
33
|
-
response =
|
34
|
-
|
33
|
+
response = HTTPX.get(url)
|
34
|
+
response = response.first if response.is_a?(Array)
|
35
|
+
raise "Failed to download the APNIC data. HTTP Status: #{response.status}" unless response.status == 200
|
35
36
|
|
36
37
|
File.write(cache_file, response.body.to_s)
|
37
38
|
logger.kinfo("Data downloaded and saved to #{cache_file}")
|
@@ -68,7 +68,7 @@ module Kscript
|
|
68
68
|
# Ensure .gitignore contains .cursor
|
69
69
|
if File.exist?('.gitignore') && File.readlines('.gitignore').none? { |l| l.strip == '.cursor' }
|
70
70
|
logger.kinfo('Adding .cursor to .gitignore...')
|
71
|
-
File.open('.gitignore', 'a') { |f| f.puts
|
71
|
+
File.open('.gitignore', 'a') { |f| f.puts "\n.cursor" }
|
72
72
|
end
|
73
73
|
|
74
74
|
logger.kinfo("\n✅ Cursor rules deploy completed!")
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (c) 2025 Kk
|
4
|
+
#
|
5
|
+
# This software is released under the MIT License.
|
6
|
+
# https://opensource.org/licenses/MIT
|
7
|
+
|
8
|
+
module Kscript
|
9
|
+
class KkHnJobsUtils < Kscript::Base
|
10
|
+
HN_JOBS_API = 'https://hacker-news.firebaseio.com/v0/jobstories.json'
|
11
|
+
HN_ITEM_API = 'https://hacker-news.firebaseio.com/v0/item'
|
12
|
+
|
13
|
+
def initialize(*args, **opts)
|
14
|
+
super
|
15
|
+
@limit = (args[0] || 10).to_i
|
16
|
+
end
|
17
|
+
|
18
|
+
def run(*args, **_opts)
|
19
|
+
with_error_handling do
|
20
|
+
limit = (args[0] || @limit || 10).to_i
|
21
|
+
logger.kinfo("Fetching latest #{limit} Hacker News jobs...")
|
22
|
+
job_ids = fetch_job_ids.first(limit)
|
23
|
+
jobs = job_ids.map { |id| extract_job_info(fetch_job_item(id)) }
|
24
|
+
display_jobs(jobs)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.arguments
|
29
|
+
'[limit]'
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.usage
|
33
|
+
'kscript hn_jobs [limit]'
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.group
|
37
|
+
'network'
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.author
|
41
|
+
'kk'
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.description
|
45
|
+
'Fetch and display latest Hacker News jobs: description and url.'
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def fetch_job_ids
|
51
|
+
require_httpx
|
52
|
+
response = HTTPX.get(HN_JOBS_API)
|
53
|
+
response = response.first if response.is_a?(Array)
|
54
|
+
raise "Failed to fetch job ids: #{response.status}" unless response.status == 200
|
55
|
+
|
56
|
+
JSON.parse(response.body.to_s)
|
57
|
+
end
|
58
|
+
|
59
|
+
def fetch_job_item(id)
|
60
|
+
require_httpx
|
61
|
+
url = "#{HN_ITEM_API}/#{id}.json"
|
62
|
+
response = HTTPX.get(url)
|
63
|
+
response = response.first if response.is_a?(Array)
|
64
|
+
raise "Failed to fetch job item #{id}: #{response.status}" unless response.status == 200
|
65
|
+
|
66
|
+
JSON.parse(response.body.to_s)
|
67
|
+
end
|
68
|
+
|
69
|
+
# 只提取描述和 url
|
70
|
+
def extract_job_info(item)
|
71
|
+
{
|
72
|
+
description: item['title'].to_s.strip,
|
73
|
+
url: item['url'] || "https://news.ycombinator.com/item?id=#{item['id']}"
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
def display_jobs(jobs)
|
78
|
+
logger.kinfo('| 描述 | 链接 |')
|
79
|
+
logger.kinfo('|------|------|')
|
80
|
+
jobs.each do |job|
|
81
|
+
logger.kinfo("| #{job[:description]} | [查看](#{job[:url]}) |")
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def require_httpx
|
86
|
+
require 'httpx'
|
87
|
+
rescue LoadError
|
88
|
+
abort 'Missing dependency: httpx. Please run: gem install httpx'
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# This software is released under the MIT License.
|
6
6
|
# https://opensource.org/licenses/MIT
|
7
7
|
|
8
|
-
|
8
|
+
require 'httpx'
|
9
9
|
|
10
10
|
module Kscript
|
11
11
|
class KkJenkinsManageUtils < Kscript::Base
|
@@ -61,8 +61,9 @@ module Kscript
|
|
61
61
|
|
62
62
|
def get_all_job_names
|
63
63
|
url = "#{@jenkins_url}/api/json?tree=jobs[name]"
|
64
|
-
response =
|
65
|
-
if response.
|
64
|
+
response = HTTPX.get(url, headers: { 'Authorization' => @auth_header })
|
65
|
+
response = response.first if response.is_a?(Array)
|
66
|
+
if response.status == 200
|
66
67
|
jobs = JSON.parse(response.body.to_s)['jobs']
|
67
68
|
jobs.map { |job| job['name'] }
|
68
69
|
else
|
@@ -76,8 +77,9 @@ module Kscript
|
|
76
77
|
|
77
78
|
def export_job(job_name)
|
78
79
|
url = "#{@jenkins_url}/job/#{job_name}/config.xml"
|
79
|
-
response =
|
80
|
-
|
80
|
+
response = HTTPX.get(url, headers: { 'Authorization' => @auth_header })
|
81
|
+
response = response.first if response.is_a?(Array)
|
82
|
+
return response.body.to_s if response.status == 200
|
81
83
|
|
82
84
|
logger.kerror("Error exporting job #{job_name}: #{response.status}")
|
83
85
|
nil
|
@@ -94,10 +96,11 @@ module Kscript
|
|
94
96
|
create_new_job(job_name, config_xml)
|
95
97
|
rescue StandardError
|
96
98
|
logger.kinfo("Updating existing job #{job_name}")
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
99
|
+
response = HTTPX.put(url, body: config_xml, headers: {
|
100
|
+
'Authorization' => @auth_header,
|
101
|
+
'Content-Type' => 'application/xml'
|
102
|
+
})
|
103
|
+
response.first if response.is_a?(Array)
|
101
104
|
end
|
102
105
|
end
|
103
106
|
|
@@ -125,11 +128,12 @@ module Kscript
|
|
125
128
|
|
126
129
|
def create_new_job(job_name, config_xml)
|
127
130
|
url = "#{@jenkins_url}/createItem?name=#{job_name}"
|
128
|
-
response =
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
if response.
|
131
|
+
response = HTTPX.post(url, body: config_xml, headers: {
|
132
|
+
'Authorization' => @auth_header,
|
133
|
+
'Content-Type' => 'application/xml'
|
134
|
+
})
|
135
|
+
response = response.first if response.is_a?(Array)
|
136
|
+
if response.status == 200
|
133
137
|
logger.kinfo("Successfully created new job #{job_name}")
|
134
138
|
else
|
135
139
|
logger.kerror("Failed to create job #{job_name}: #{response.status}")
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# This software is released under the MIT License.
|
6
6
|
# https://opensource.org/licenses/MIT
|
7
7
|
|
8
|
-
|
8
|
+
require 'httpx'
|
9
9
|
|
10
10
|
module Kscript
|
11
11
|
class KkKibanaManageUtils < Kscript::Base
|
@@ -33,7 +33,8 @@ module Kscript
|
|
33
33
|
def space_exists?
|
34
34
|
url = "#{@base_url}/api/spaces/space/#{@space_name}"
|
35
35
|
response = client.get(url, headers: kbn_headers)
|
36
|
-
response.
|
36
|
+
response = response.first if response.is_a?(Array)
|
37
|
+
response.status == 200
|
37
38
|
rescue StandardError => e
|
38
39
|
logger.kerror("Error checking space existence: #{e.message}")
|
39
40
|
false
|
@@ -51,7 +52,8 @@ module Kscript
|
|
51
52
|
}
|
52
53
|
|
53
54
|
response = client.post(url, json: body, headers: kbn_headers)
|
54
|
-
if response.
|
55
|
+
response = response.first if response.is_a?(Array)
|
56
|
+
if response.status == 200
|
55
57
|
logger.kinfo("Space '#{@space_name}' created successfully!")
|
56
58
|
else
|
57
59
|
logger.kerror("Failed to create space '#{@space_name}': #{response.body}")
|
@@ -62,12 +64,17 @@ module Kscript
|
|
62
64
|
|
63
65
|
# Return the HTTP client with authentication
|
64
66
|
def client
|
65
|
-
@client ||=
|
67
|
+
@client ||= HTTPX.with(headers: { 'Authorization' => basic_auth_header })
|
68
|
+
end
|
69
|
+
|
70
|
+
def basic_auth_header
|
71
|
+
'Basic ' + Base64.strict_encode64("#{@username}:#{@password}")
|
66
72
|
end
|
67
73
|
|
68
74
|
# Fetch all indices from Kibana
|
69
75
|
def indices
|
70
76
|
response = client.get("#{@base_url}/api/index_management/indices", headers: kbn_headers)
|
77
|
+
response = response.first if response.is_a?(Array)
|
71
78
|
handle_response(response) { |body| JSON.parse(body).map { |item| item['name'] } }
|
72
79
|
end
|
73
80
|
|
@@ -83,7 +90,8 @@ module Kscript
|
|
83
90
|
},
|
84
91
|
'version' => 1
|
85
92
|
}
|
86
|
-
client.post(url, json: body, headers: kbn_headers)
|
93
|
+
response = client.post(url, json: body, headers: kbn_headers)
|
94
|
+
response.first if response.is_a?(Array)
|
87
95
|
end
|
88
96
|
end
|
89
97
|
|
@@ -94,7 +102,8 @@ module Kscript
|
|
94
102
|
body = index_body(index_name, uuid)
|
95
103
|
|
96
104
|
response = client.post(url, json: body, headers: kbn_headers)
|
97
|
-
if response.
|
105
|
+
response = response.first if response.is_a?(Array)
|
106
|
+
if response.status == 200
|
98
107
|
logger.kinfo("#{index_name} Index creation successful!")
|
99
108
|
else
|
100
109
|
handle_error(response, index_name)
|
@@ -136,7 +145,8 @@ module Kscript
|
|
136
145
|
}
|
137
146
|
]
|
138
147
|
}.to_json
|
139
|
-
client.put(url, body: request_body, headers: kbn_headers)
|
148
|
+
response = client.put(url, body: request_body, headers: kbn_headers)
|
149
|
+
response.first if response.is_a?(Array)
|
140
150
|
logger.kinfo("Create #{@project_name} user role sucessed!")
|
141
151
|
end
|
142
152
|
|
@@ -149,7 +159,8 @@ module Kscript
|
|
149
159
|
'email' => "#{@project_name}@devops.io",
|
150
160
|
'roles' => [@project_name]
|
151
161
|
}.to_json
|
152
|
-
client.post(url, body: request_body, headers: kbn_headers)
|
162
|
+
response = client.post(url, body: request_body, headers: kbn_headers)
|
163
|
+
response.first if response.is_a?(Array)
|
153
164
|
logger.kinfo("Create #{@project_name} user sucessed!")
|
154
165
|
end
|
155
166
|
|
@@ -185,7 +196,9 @@ module Kscript
|
|
185
196
|
'options' => { 'fields' => %w[title type typeMeta name] },
|
186
197
|
'version' => 1
|
187
198
|
}
|
188
|
-
|
199
|
+
response = client.post(url, json: body, headers: kbn_headers)
|
200
|
+
response = response.first if response.is_a?(Array)
|
201
|
+
JSON.parse(response.body)['result']['result']['hits']
|
189
202
|
end
|
190
203
|
|
191
204
|
# Construct the body for creating an index
|
@@ -218,7 +231,8 @@ module Kscript
|
|
218
231
|
|
219
232
|
# Handle the response from Kibana
|
220
233
|
def handle_response(response)
|
221
|
-
if response.
|
234
|
+
response = response.first if response.is_a?(Array)
|
235
|
+
if response.status == 200
|
222
236
|
yield response.body
|
223
237
|
else
|
224
238
|
handle_error(response)
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# This software is released under the MIT License.
|
6
6
|
# https://opensource.org/licenses/MIT
|
7
7
|
|
8
|
-
require '
|
8
|
+
require 'httpx'
|
9
9
|
require 'json'
|
10
10
|
|
11
11
|
module Kscript
|
@@ -25,9 +25,9 @@ module Kscript
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def fetch_rates
|
28
|
-
|
29
|
-
response =
|
30
|
-
data = JSON.parse(response)
|
28
|
+
response = HTTPX.get(API_URL)
|
29
|
+
response = response.first if response.is_a?(Array)
|
30
|
+
data = JSON.parse(response.body.to_s)
|
31
31
|
if @currency_code && data['rates'][@currency_code.upcase]
|
32
32
|
rate = data['rates'][@currency_code.upcase]
|
33
33
|
logger.kinfo("1 USD = #{rate} #{@currency_code.upcase}")
|
data/lib/kscript/version.rb
CHANGED
data/lib/kscript.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kscript
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kk
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-07-
|
11
|
+
date: 2025-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-s3
|
@@ -162,6 +162,7 @@ files:
|
|
162
162
|
- lib/kscript/plugins/kk_elastic_cert_finger_utils.rb
|
163
163
|
- lib/kscript/plugins/kk_ffmpeg_install_utils.rb
|
164
164
|
- lib/kscript/plugins/kk_file_rename_utils.rb
|
165
|
+
- lib/kscript/plugins/kk_hn_jobs_utils.rb
|
165
166
|
- lib/kscript/plugins/kk_ip_lookup_utils.rb
|
166
167
|
- lib/kscript/plugins/kk_jenkins_manage_utils.rb
|
167
168
|
- lib/kscript/plugins/kk_kibana_manage_utils.rb
|