mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-12-09 14:07:11 +08:00
* refactor: clietn in msggateway Signed-off-by: rfyiamcool <rfyiamcool@163.com> * perf: add sync.pool for req object Signed-off-by: rfyiamcool <rfyiamcool@163.com> --------- Signed-off-by: rfyiamcool <rfyiamcool@163.com> feat: use dummy pusher by default (#1349) Add Prometheus monitoring function (#1337) * Code adaptation k8s: service discovery and registration adaptation, configuration adaptation * Initial submission of the help charts script for openim API * change the help charts script * change the help charts script * change helm chart codes * change dockerfiles script * change chart script:add configmap mounts * change chart script:change repository * change chart script:msggateway add one service * change config.yaml * roll back some config values * change chart script:change Ingress rule with a rewrite annotation * add mysql charts scrible * change chart script:add mysql.config.yaml * add nfs provisioner charts * change chart script:add nfs.config.yaml * add ingress-nginx charts * change chart script:add ingress-nginx.config.yaml * add redis &mongodb charts * add kafka&minio charts * change chart script:change redis.values.yaml * change chart script:add redis.config.yaml * change chart script:change redis.config.yaml * change chart script:change mongodb.value.yaml * change chart script:change mongodb.value.yaml * change chart script:add mongodb.config.yaml * change chart script:change minio.values.yaml * change chart script:add minio.config.yaml * change chart script:change kafka.values.yaml * change chart script:add kafka.config.yaml * change chart script:change services.config.yaml * bug fix:Delete websocket's Port restrictions * bug fix:change port value * change chart script:Submit a stable version script * fix bug:Implement option interface * fix bug:change K8sDR.Register * change config.yaml * change chats script:minio service add ingress * change chats script:minio service add ingress * change chats script:kafka.replicaCount=3& change minio.api ingress * delete change chats script * change config.yaml * change openim.yaml * merge go.sum * Add monitoring function and struct for Prometheus on gin and GRPC * Add GRPC and gin server monitoring logic * Add GRPC and gin server monitoring logic2 * Add GRPC and gin server monitoring logic3 * Add GRPC and gin server monitoring logic4 * Add GRPC and gin server monitoring logic5 * Add GRPC and gin server monitoring logic6 * Add GRPC and gin server monitoring logic7 * delete:old monitoring code * add for test * fix bug:change packname * fix bug:delete getPromPort funciton * fix bug:delete getPromPort funciton * fix bug:change logs * fix bug:change registerName logic in GetGrpcCusMetrics function * add getPrometheus url api * fix:config path logic * fix:prometheus enable function * fix:prometheus enable function * fix:transfer Multi process monitoring logic * del:del not using manifest * fix:openim-msgtransfer.sh * fix:openim-msgtransfer.sh --------- Co-authored-by: lin.huang <lin.huang@apulis.com> Co-authored-by: Xinwei Xiong <3293172751@qq.com> fix: initiateUpload sign list number (#1358) * optimize scheduled deletion * optimize scheduled deletion * optimize scheduled deletion * optimize scheduled deletion * minio cache * fix: conflicts * feat: minio cache * feat: cache optimize * feat: cache optimize * feat: cache optimize * feat: cache optimize * feat: cache optimize * fix: initiateUpload sign list number fix: msg pull change and fcm redis flag fix. (#1367) * fix: to start im or chat, ZooKeeper must be started first. * fix: msg gateway start output err info Signed-off-by: Gordon <1432970085@qq.com> * fix: msg gateway start output err info Signed-off-by: Gordon <1432970085@qq.com> * chore: package path changes Signed-off-by: withchao <993506633@qq.com> * fix: go mod update Signed-off-by: Gordon <1432970085@qq.com> * fix: token update Signed-off-by: Gordon <1432970085@qq.com> * chore: package path changes Signed-off-by: withchao <993506633@qq.com> * chore: package path changes Signed-off-by: withchao <993506633@qq.com> * fix: token update Signed-off-by: Gordon <1432970085@qq.com> * fix: token update Signed-off-by: Gordon <1432970085@qq.com> * fix: token update Signed-off-by: Gordon <1432970085@qq.com> * fix: token update Signed-off-by: Gordon <1432970085@qq.com> * fix: token update Signed-off-by: Gordon <1432970085@qq.com> * fix: token update Signed-off-by: Gordon <1432970085@qq.com> * fix: get all userID Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: msggateway add online status call Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * refactor: log change Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * refactor: log change Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * chore: network mode change Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * cicd: robot automated Change Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * cicd: robot automated Change Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * cicd: robot automated Change Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * feat: add api of get server time Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * feat: remove go work sum Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * cicd: robot automated Change Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix: pull message add isRead field Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: check msg-transfer script Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: script update Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: start don't kill old process Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * cicd: robot automated Change Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix: check component Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: pull message set isRead only message come from single. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * cicd: robot automated Change Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix: multiple gateway kick user each other. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: multiple gateway kick user each other. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: multiple gateway kick user each other. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: multiple gateway kick user each other. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: multiple gateway kick user each other. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: multiple gateway kick user each other. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * cicd: robot automated Change Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix: multiple gateway kick user each other. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: add ex field to update group info. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * cicd: robot automated Change * cicd: robot automated Change * refactor: change project module name. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * refactor: change project module name. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * refactor: change project module name. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * cicd: robot automated Change * test: for pressure test. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * test: for pressure test. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * test: for pressure test. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * test: message log. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * cicd: robot automated Change * fxi: component check output valid info. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fxi: component check output valid info. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * test: send message test log. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * cicd: robot automated Change * cicd: robot automated Change * test: remove info log. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * feat: api of send message add sendTime field. Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> * fix: add callback for update user's info. * cicd: robot automated Change * fix: change callback command name. * cicd: robot automated Change * fix: single chat unread status change. * fix: single chat unread status change. * fix: single chat unread status change. * fix: user status change. * cicd: robot automated Change * fix: user status change. * fix: user status change. * fix: user status change. * cicd: robot automated Change * fix: ws close when user logout. * fix: remove repeat platform on online status. * cicd: robot automated Change * fix: api send messages for notification conversation . * fix: api send messages for notification conversation . * fix: api send messages for notification conversation . * fix: api send messages for notification conversation . * fix: api send messages for notification conversation . * fix: api send messages for notification conversation. * fix: api send messages for notification conversation. * fix: api send messages for notification conversation. * fix: api send messages for notification conversation. * fix: api send messages for notification conversation. * fix: api send messages for notification conversation. * re: remove router of unsubscribeStatus. * re: remove router of unsubscribeStatus. * re: remove router of unsubscribeStatus. * re: remove router of unsubscribeStatus. * fix: reset branch * fix: not support redis cluster. CROSSSLOT Keys in request don't hash to the same slot * fix: update user.FaceURL do not trigger GroupMemberInfoSetNotification * cicd: robot automated Change * fix: api send messages for notification conversation. * fix: api send messages for notification conversation. * fix: zk add close to avoid zk block. * fix: go mod update. * fix: msg pull change and fcm redis flag fix. --------- Signed-off-by: Gordon <1432970085@qq.com> Signed-off-by: withchao <993506633@qq.com> Signed-off-by: Gordon <46924906+FGadvancer@users.noreply.github.com> Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: withchao <993506633@qq.com> Co-authored-by: Xinwei Xiong <3293172751NSS@gmail.com> Co-authored-by: FGadvancer <FGadvancer@users.noreply.github.com> Co-authored-by: withchao <withchao@users.noreply.github.com> fix: sync close ws conn when kick old user avoid wrong trigger order about online status. (#1368) Update README-zh_CN.md Update README-zh_CN.md fix: GetUserReqApplicationList error when there is a disbanded group chat (#1374) fix: error when querying some information about disbanded group (#1376) * fix: GetUserReqApplicationList error when there is a disbanded group chat * fix: error when querying some information about disbanded group fix: GetUserReqApplicationList dismissed group error (#1378) * fix: GetUserReqApplicationList error when there is a disbanded group chat * fix: error when querying some information about disbanded group * fix: GetUserReqApplicationList dismissed group error refactor: lower the level of code nesting (#1370) * refactor: lower the level of code nesting Signed-off-by: rfyiamcool <rfyiamcool@163.com> * refactor: lower the level of code nesting Signed-off-by: rfyiamcool <rfyiamcool@163.com> --------- Signed-off-by: rfyiamcool <rfyiamcool@163.com> ☀️ feat: Enhancing OpenIM with Integrated E2E Testing and CI/CD Enhancements (#1359) * cicd: robot automated Change * feat: add api test Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * feat: add api test make file Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * feat: add openim e2e test Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * feat: add openim e2e test Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * fix: Fixed some unused scripts and some names Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * docs: optimize openim docs Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * feat: add prom address Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * feat: add openim info test * feat: add openim images config path Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * fix: fix tim file rename * fix: fix tim file rename * fix: fix tim file rename * fix: fix tim file rename * fix: add openim test e2e * feat: add openim test .keep Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * feat: add openim test .keep Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * feat: openim test Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * feat: openim test Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * feat: openim test Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> --------- Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> Co-authored-by: cubxxw <cubxxw@users.noreply.github.com> perf: auto set runtime maxprocs in docker (#1339) Signed-off-by: rfyiamcool <rfyiamcool@163.com> build: build openim image (#1381) perf: improve gzip performance with sync.pool (#1321) Signed-off-by: rfyiamcool <rfyiamcool@163.com> Co-authored-by: Gordon <46924906+FGadvancer@users.noreply.github.com> fix: add kafka compress type and producer ack params (#1310) Signed-off-by: rfyiamcool <rfyiamcool@163.com> delete not using files cicd: robot automated Change add prometheus docker-compose for monitor fix prometheus.yaml fix environment.sh fix init-config.sh fix init-config.sh fix env_template.yaml fix docker-compose.yml fix docker-compose.yml add openim_admin_front service change openim-admin-front del not using files add node-exporter-dashaboard.yaml
248 lines
8.3 KiB
Markdown
248 lines
8.3 KiB
Markdown
# OpenIM Bash Utility Script
|
|
|
|
This script offers a variety of utilities and helpers to enhance and simplify operations related to the OpenIM project.
|
|
|
|
## Table of Contents
|
|
|
|
- [OpenIM Bash Utility Script](#openim-bash-utility-script)
|
|
- [Table of Contents](#table-of-contents)
|
|
- [brief descriptions of each function](#brief-descriptions-of-each-function)
|
|
- [Introduction](#introduction)
|
|
- [Usage](#usage)
|
|
- [SSH Key Setup](#ssh-key-setup)
|
|
- [openim::util::ensure-gnu-sed](#openimutilensure-gnu-sed)
|
|
- [openim::util::ensure-gnu-date](#openimutilensure-gnu-date)
|
|
- [openim::util::check-file-in-alphabetical-order](#openimutilcheck-file-in-alphabetical-order)
|
|
- [openim::util::require-jq](#openimutilrequire-jq)
|
|
- [openim::util::md5](#openimutilmd5)
|
|
- [openim::util::read-array](#openimutilread-array)
|
|
- [Color Definitions](#color-definitions)
|
|
- [openim::util::desc and related functions](#openimutildesc-and-related-functions)
|
|
- [openim::util::onCtrlC](#openimutilonctrlc)
|
|
- [openim::util::list-to-string](#openimutillist-to-string)
|
|
- [openim::util::remove-space](#openimutilremove-space)
|
|
- [openim::util::gencpu](#openimutilgencpu)
|
|
- [openim::util::gen-os-arch](#openimutilgen-os-arch)
|
|
- [openim::util::download-file](#openimutildownload-file)
|
|
- [openim::util::get-public-ip](#openimutilget-public-ip)
|
|
- [openim::util::extract-tarball](#openimutilextract-tarball)
|
|
- [openim::util::check-port-open](#openimutilcheck-port-open)
|
|
- [openim::util::file-lines-count](#openimutilfile-lines-count)
|
|
|
|
|
|
## brief descriptions of each function
|
|
|
|
**Englist:**
|
|
1. `openim::util::ensure-gnu-sed` - Determines if GNU version of `sed` exists on the system and sets its name.
|
|
2. `openim::util::ensure-gnu-date` - Determines if GNU version of `date` exists on the system and sets its name.
|
|
3. `openim::util::check-file-in-alphabetical-order` - Checks if a file is sorted in alphabetical order.
|
|
4. `openim::util::require-jq` - Checks if `jq` is installed.
|
|
5. `openim::util::md5` - Outputs the MD5 hash of a file.
|
|
6. `openim::util::read-array` - Reads content from standard input into an array.
|
|
7. `openim::util::desc` - Displays descriptive information.
|
|
8. `openim::util::run::prompt` - Displays a prompt.
|
|
9. `openim::util::run::maybe-first-prompt` - Possibly displays the first prompt based on whether it's started or not.
|
|
10. `openim::util::run` - Executes a command and captures its output.
|
|
11. `openim::util::run::relative` - Returns paths relative to the current script.
|
|
12. `openim::util::onCtrlC` - Performs an action when Ctrl+C is pressed.
|
|
13. `openim::util::list-to-string` - Converts a list into a string.
|
|
14. `openim::util::remove-space` - Removes spaces from a string.
|
|
15. `openim::util::gencpu` - Retrieves CPU information.
|
|
16. `openim::util::gen-os-arch` - Generates a repository directory based on the operating system and architecture.
|
|
17. `openim::util::download-file` - Downloads a file from a URL.
|
|
18. `openim::util::get-public-ip` - Retrieves the public IP address of the machine.
|
|
19. `openim::util::extract-tarball` - Extracts a tarball to a specified directory.
|
|
20. `openim::util::check-port-open` - Checks if a given port is open on the machine.
|
|
21. `openim::util::file-lines-count` - Counts the number of lines in a file.
|
|
|
|
|
|
|
|
## Introduction
|
|
|
|
This script is mainly used to validate whether the code is correctly formatted by `gofmt`. Apart from that, it offers utilities like setting up SSH keys, various wait conditions, host and platform detection, documentation generation, etc.
|
|
|
|
## Usage
|
|
|
|
### SSH Key Setup
|
|
|
|
To set up an SSH key:
|
|
|
|
```bash
|
|
#1. Write IPs in a file, one IP per line. Let's name it hosts-file.
|
|
#2. Modify the default username and password in the script.
|
|
hosts-file-path="path/to/your/hosts/file"
|
|
openim:util::setup_ssh_key_copy "$hosts-file-path" "root" "123"
|
|
```
|
|
|
|
## openim::util::ensure-gnu-sed
|
|
|
|
Ensures the presence of the GNU version of the `sed` command. Different operating systems may have variations of the `sed` command, and this utility function is used to make sure the script uses the GNU version. If it finds the GNU `sed`, it sets the `SED` variable accordingly. If not found, it checks for `gsed`, which is usually the name of GNU `sed` on macOS. If neither is found, an error message is displayed.
|
|
|
|
|
|
|
|
## openim::util::ensure-gnu-date
|
|
|
|
Similar to the function for `sed`, this function ensures the script uses the GNU version of the `date` command. If it identifies the GNU `date`, it sets the `DATE` variable. On macOS, it looks for `gdate` as an alternative. In the absence of both, an error message is recommended.
|
|
|
|
|
|
|
|
## openim::util::check-file-in-alphabetical-order
|
|
|
|
This function checks if the contents of a given file are sorted in alphabetical order. If not, it provides a command suggestion for the user to sort the file correctly.
|
|
|
|
|
|
|
|
## openim::util::require-jq
|
|
|
|
Verifies the installation of `jq`, a popular command-line JSON parser. If it's not present, a prompt to install it is displayed.
|
|
|
|
|
|
|
|
## openim::util::md5
|
|
|
|
A cross-platform function that computes the MD5 hash of its input. This function takes into account the differences in the `md5` command between macOS and Linux.
|
|
|
|
|
|
|
|
## openim::util::read-array
|
|
|
|
A function designed to read from stdin and populate an array, line by line. It's provided as an alternative to `mapfile -t` and is compatible with bash 3.
|
|
|
|
|
|
|
|
## Color Definitions
|
|
|
|
The script also defines a set of colors to enhance its console output. These include colors like red, yellow, green, blue, cyan, etc., which can be used for better user experience and clear logs.
|
|
|
|
|
|
|
|
## openim::util::desc and related functions
|
|
|
|
These functions seem to aid in building interactive demonstrations or tutorials in the terminal. They use the `pv` utility to control the display rate of the output, emulating typing. There's also functionality to handle user prompts and execute commands while capturing their output.
|
|
|
|
|
|
|
|
## openim::util::onCtrlC
|
|
|
|
Handles the `CTRL+C` command. It terminates background processes of the script when the user interrupts it using `CTRL+C`.
|
|
|
|
|
|
|
|
## openim::util::list-to-string
|
|
|
|
Transforms a list format (like `[10023, 2323, 3434]`) to a space-separated string (`10023 2323 3434`). Also removes unnecessary spaces and characters.
|
|
|
|
|
|
|
|
## openim::util::remove-space
|
|
|
|
Removes spaces from a given string.
|
|
|
|
|
|
|
|
## openim::util::gencpu
|
|
|
|
Fetches the number of CPUs using the `lscpu` command.
|
|
|
|
|
|
|
|
## openim::util::gen-os-arch
|
|
|
|
Identifies the operating system and architecture of the system running the script. This is useful to determine directories or binaries specific to that OS and architecture.
|
|
|
|
|
|
|
|
## openim::util::download-file
|
|
|
|
This function can be used to download a file from a URL. If `curl` is available, it uses `curl`. If not, it falls back to `wget`.
|
|
|
|
```bash
|
|
function openim::util::download-file() {
|
|
local url="$1"
|
|
local dest="$2"
|
|
|
|
if command -v curl &>/dev/null; then
|
|
curl -L "${url}" -o "${dest}"
|
|
elif command -v wget &>/dev/null; then
|
|
wget "${url}" -O "${dest}"
|
|
else
|
|
openim::log::error "Neither curl nor wget available. Cannot download file."
|
|
return 1
|
|
fi
|
|
}
|
|
```
|
|
|
|
|
|
|
|
## openim::util::get-public-ip
|
|
|
|
Fetches the public IP address of the machine.
|
|
|
|
```bash
|
|
function openim::util::get-public-ip() {
|
|
if command -v curl &>/dev/null; then
|
|
curl -s https://ipinfo.io/ip
|
|
elif command -v wget &>/dev/null; then
|
|
wget -qO- https://ipinfo.io/ip
|
|
else
|
|
openim::log::error "Neither curl nor wget available. Cannot fetch public IP."
|
|
return 1
|
|
fi
|
|
}
|
|
```
|
|
|
|
|
|
|
|
## openim::util::extract-tarball
|
|
|
|
This function extracts a tarball to a specified directory.
|
|
|
|
```bash
|
|
function openim::util::extract-tarball() {
|
|
local tarball="$1"
|
|
local dest="$2"
|
|
|
|
mkdir -p "${dest}"
|
|
tar -xzf "${tarball}" -C "${dest}"
|
|
}
|
|
```
|
|
|
|
|
|
|
|
## openim::util::check-port-open
|
|
|
|
Checks if a given port is open on the local machine.
|
|
|
|
```bash
|
|
function openim::util::check-port-open() {
|
|
local port="$1"
|
|
if command -v nc &>/dev/null; then
|
|
echo -n > /dev/tcp/127.0.0.1/"${port}" 2>&1
|
|
return $?
|
|
elif command -v telnet &>/dev/null; then
|
|
telnet 127.0.0.1 "${port}" 2>&1 | grep -q "Connected"
|
|
return $?
|
|
else
|
|
openim::log::error "Neither nc nor telnet available. Cannot check port."
|
|
return 1
|
|
fi
|
|
}
|
|
```
|
|
|
|
|
|
|
|
## openim::util::file-lines-count
|
|
|
|
Counts the number of lines in a file.
|
|
|
|
```bash
|
|
function openim::util::file-lines-count() {
|
|
local file="$1"
|
|
if [[ -f "${file}" ]]; then
|
|
wc -l < "${file}"
|
|
else
|
|
openim::log::error "File does not exist: ${file}"
|
|
return 1
|
|
fi
|
|
}
|
|
``` |