πŸš€ Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more β†’
Socket
Book a DemoInstallSign in
Socket

slack-progress-bar-kjh

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

slack-progress-bar-kjh

Modify from Michael Lizzi's slack_progress_bar. Thank you.

1.1.1
PyPI
Maintainers
1

slack-progress-bar [Downloads]

진행상황을 μ‹œκ°ν™”ν•˜μ—¬ μŠ¬λž™μœΌλ‘œ λ³΄μ—¬μ£ΌλŠ” 파이썬 라이브러리 (파이썬 3.9이상)

animated-gif

μ„€μΉ˜ 방법

pip install slack-progress-bar-kjh

κ°œμš”

  • μŠ¬λž™μœΌλ‘œ μž‘μ—… μ§„ν–‰ 상황을 μ‹œκ°ν™”ν•˜μ—¬ 보여쀄 수 있음
  • μŠ¬λž™ μ»€μŠ€ν…€ 이λͺ¨μ§€λ₯Ό ν™œμš©ν•˜μ—¬ λ‹€μ–‘ν•˜κ²Œ ν‘œν˜„ κ°€λŠ₯ (무엇이든 κ°€λŠ₯, λˆˆμ‚¬λžŒ κ΅΄λ¦¬λŠ” λͺ¨μŠ΅, λͺ¨λž˜μ„± μŒ“λŠ” λͺ¨μŠ΅ λ“±...)
  • μ–΄λ–€ μž‘μ—…μ΄ μ§„ν–‰ 쀑인지 ν•¨κ»˜ 보여쀄 수 있음

μ‚¬μš© 방법

  • Slack Apps API에 μ ‘μ†ν•˜μ—¬ 'Create New App'을 ν΄λ¦­ν•œ ν›„, μ§€μ‹œμ— 따라 μƒˆ 앱을 μ²˜μŒλΆ€ν„° λ§Œλ“œμ„Έμš”.
  • 'Features -> OAuth & Permissions'둜 μ΄λ™ν•˜μ—¬ λ‹€μŒ μŠ€μ½”ν”„λ₯Ό 'Bot Token Scopes'에 μΆ”κ°€ν•˜μ„Έμš”: chat:write, channels:manage, groups:write, im:write, mpim:write.
  • 'Settings -> Install App'둜 μ΄λ™ν•˜μ—¬ 'Install to Workspace'λ₯Ό ν΄λ¦­ν•˜μ„Έμš”. 그런 λ‹€μŒ 'Allow'λ₯Ό ν΄λ¦­ν•˜μ„Έμš”.
  • 같은 νŽ˜μ΄μ§€μ—μ„œ μƒμ„±λœ 'Bot User OAuth Token'을 λ³΅μ‚¬ν•˜μ—¬ SlackProgressBarKjh 클래슀의 token ν•„λ“œμ— μ‚¬μš©ν•˜μ„Έμš”.
  • Slack μ›Œν¬μŠ€νŽ˜μ΄μŠ€λ‘œ μ΄λ™ν•˜μ—¬ νšŒμ› IDλ₯Ό μ°ΎμœΌμ„Έμš”(ν”„λ‘œν•„μ„ ν΄λ¦­ν•œ λ‹€μŒ '[...] -> Copy Member ID'λ₯Ό ν΄λ¦­ν•˜μ—¬ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€). 이λ₯Ό SlackProgressBarKjh 클래슀의 user_id ν•„λ“œμ— μ‚¬μš©ν•˜μ„Έμš”. (ν•„μš”μ— 따라 채널ID도 μ‚¬μš© κ°€λŠ₯)
  • μœ„μ—μ„œ 찾은 tokenκ³Ό user_id λ˜λŠ” 채널 IDλ₯Ό μ‚¬μš©ν•˜μ—¬ μ§„ν–‰ ν‘œμ‹œμ€„μ„ μƒμ„±ν•˜κ³  μ—…λ°μ΄νŠΈν•˜μ„Έμš”.
  • μ»€μŠ€ν…€ 이λͺ¨μ§€λ₯Ό μΆ”κ°€ν•˜μ„Έμš”. [κΈ°λ³Έ 이λͺ¨μ§€ gif λ‹€μš΄λ‘œλ“œ]
    • β€» ν•„μš” μ»€μŠ€ν…€ 이λͺ¨μ§€ (이름은 κ°™μ•„μ•Ό 함)
      • :walking_amongus: # κ±·κ³  μžˆλŠ” 이λͺ¨μ§€
      • :left_spot: # μ§€λ‚˜κ°„ κ³³
      • :right_spot: # 아직 μ•ˆ κ°„ κ³³
      • :dead_amongus: # μ™„λ£Œ μ‹œ 이λͺ¨μ§€
      • :monster_amongus: # λͺ©ν‘œ 지점
import os
from slack_progress_bar_kjh import SlackProgressBarKjh

BOT_TOKEN = os.getenv('BOT_TOKEN')
os.getenv('SLACK_MEMBER_ID')

# μž‘μ—… μ‹œμž‘
progress_bar = SlackProgressBarKjh(token=self.BOT_TOKEN, user_id=self.SLACK_MEMBER_ID, total=100)

for i in range(100):
    try:
        # μž‘μ—… 쀑...
        time.sleep(0.1)
        
        # μ§„ν–‰ 상황 μ—…λ°μ΄νŠΈ
        progress_bar.update(i+1)

        # ν˜„μž¬ 상황 μ•Œλ €μ£ΌκΈ°
        progress_bar.chat_update(f"{i}번 μž‘μ—… μ™„λ£Œ")

        # ν˜„μž¬ μ§„ν–‰λ₯  κ°€μ Έμ˜€κΈ°
        progress_bar.get_progress()

    except Exception:
        progress_bar.error()

1.Dockerλ₯Ό ν™œμš©ν•˜μ—¬ μ  ν‚¨μŠ€ λΉŒλ“œ 상황 μ‹€μ‹œκ°„ 좔적

(μ‹€μ œ μž‘μ—… Dockerfileκ³Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ Jenkins 폴더에 생성, μ  ν‚¨μŠ€μ—μ„œ Jenkinsfile pathλ₯Ό λ³€κ²½ν•΄μ£Όμ–΄μ•Ό 함)

1-1.μ  ν‚¨μŠ€ μ›Œμ»€ λ…Έλ“œμ— Docker둜 λΉŒλ“œ 상황을 μΆ”μ ν•˜λŠ” μ„œλΉ„μŠ€λ₯Ό λ§Œλ“¦

  • Jenkins/Dockerfile 생성
# Dockerfile
# Dockerfile
FROM python:3.9-slim

# Set working directory
WORKDIR /app

# Copy necessary files
COPY Jenkins/progress_tracker.py /app/

# Install dependencies
RUN pip install slack-progress-bar-kjh flask

# Expose port if needed
EXPOSE 5000

# Command to run the script
CMD ["python", "progress_tracker.py"]
  • Jenkins/progress_tracker.py 생성
# progress_tracker.py
import os
from flask import Flask, request
from slack_progress_bar_kjh import SlackProgressBarKjh

app = Flask(__name__)

BOT_TOKEN = os.getenv('BOT_TOKEN')
SLACK_MEMBER_ID = os.getenv('SLACK_MEMBER_ID')
progress_bar = SlackProgressBarKjh(token=BOT_TOKEN, user_id=SLACK_MEMBER_ID, total=100)
progress_state = {'progress': 0}

@app.route('/update-all', methods=['POST'])
def update_all():
    data = request.json
    progress = data.get('progress')
    message = data.get('message')
    update_progress(progress, message)
    return "Progress all updated", 200
    
@app.route('/update-progress', methods=['POST'])
def update_progress_route():
    data = request.json
    progress = data.get('progress')
    update_progress(progress=progress)
    return "Only progress updated", 200
    
@app.route('/update-message', methods=['POST'])
def update_message():
    data = request.json
    message = data.get('message')
    update_progress(message=message)
    return "Only message updated", 200
    
@app.route('/add-progress', methods=['POST'])
def add_progress():
    data = request.json
    progress = data.get('progress')
    add_progress_to_state(progress)
    return "Add progress updated", 200
    
@app.route('/get-progress', methods=['GET'])
def get_progress():
    return progress_state['progress']

def update_progress(progress=None, message=None):
    if progress is not None:
        progress_state['progress'] = progress
        progress_bar.update(progress)
    if message is not None:
        progress_bar.chat_update(message)
        
def add_progress_to_state(progress=0):
    progress_bar.add_progress(progress)
    progress_state['progress'] = progress_bar.get_progress()

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)
  • Jenkins/Jenkinsfile 생성
// Jenkinsfile
pipeline {
    agent any
    environment {
        BOT_TOKEN = credentials('SLACK_BOT_TOKEN') // Slack Bot Token
        SLACK_MEMBER_ID = credentials('SLACK_MEMBER_ID') // Slack ID
        TRACKER_IMAGE = 'progress-tracker:latest' // λΉŒλ“œν•  Docker μ  ν‚¨μŠ€ 트래컀 이미지 이름
    }
    stages {
        stage('Jenkins Tracker - Build Docker Image') {
            steps {
                script {
                    // μ  ν‚¨μŠ€ μ§„ν–‰ 상황 좔적 μ»¨ν…Œμ΄λ„ˆ 이미지 λΉŒλ“œ
                    sh '''
                        sudo yum install -y python3 python3-pip
                        docker build -t ${TRACKER_IMAGE} -f Jenkins/Dockerfile .
                    '''
                }
            }
        }
        stage('Jenkins Tracker - Start Tracker') {
            steps {
                script {
                    // μ  ν‚¨μŠ€ μ§„ν–‰ 상황 좔적 μ»¨ν…Œμ΄λ„ˆ μ‹œμž‘
                    sh '''
                        sudo docker run -d --name progress_tracker \
                        -e BOT_TOKEN=${BOT_TOKEN} \
                        -e SLACK_MEMBER_ID=${SLACK_MEMBER_ID} \
                        -p 5000:5000 ${TRACKER_IMAGE}
                        sleep 5
                    '''
                }
            }
        }
        stage('Build') {
            steps {
                script {
                    // μ΄ˆκΈ°ν™” 단계 μ§„ν–‰λ₯  μ—…λ°μ΄νŠΈ
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 10, "message": "μŠ¬λž™κ³Ό"}' \
                        http://localhost:5000/update
                    '''
                    // μ§„ν–‰λ₯  μ—…λ°μ΄νŠΈ
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 20, "message": "μ  ν‚¨μŠ€"}' \
                        http://localhost:5000/update
                    '''
                    // μ§„ν–‰λ₯  μ—…λ°μ΄νŠΈ
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 30, "message": "연동을"}' \
                        http://localhost:5000/update
                    '''
                    // μ§„ν–‰λ₯  μ—…λ°μ΄νŠΈ
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 40, "message": "ν…ŒμŠ€νŠΈν•˜κ³ "}' \
                        http://localhost:5000/update
                    '''
                    // μ§„ν–‰λ₯  μ—…λ°μ΄νŠΈ
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 50, "message": "μžˆλŠ”"}' \
                        http://localhost:5000/update
                    '''
                    // μ§„ν–‰λ₯  μ—…λ°μ΄νŠΈ
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 60, "message": "쀑 μž…λ‹ˆλ‹€."}' \
                        http://localhost:5000/update
                    '''
                    // μ§„ν–‰λ₯  μ—…λ°μ΄νŠΈ
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 70, "message": "잘"}' \
                        http://localhost:5000/update
                    '''
                    // μ§„ν–‰λ₯  μ—…λ°μ΄νŠΈ
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 80, "message": "λ˜λŠ” 것"}' \
                        http://localhost:5000/update
                    '''
                    // μ§„ν–‰λ₯  μ—…λ°μ΄νŠΈ
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 90, "message": "κ°™μ•„μš”."}' \
                        http://localhost:5000/update
                    '''
                }
            }
        }
        stage('Complete and Cleanup') {
            steps {
                script {
                    // Build 성곡 ν›„ μ΅œμ’… μ§„ν–‰λ₯  μ—…λ°μ΄νŠΈ
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 100, "message": "ν…ŒμŠ€νŠΈ 끝!!!"}' \
                        http://localhost:5000/update
                    '''
                }
            }
            post {
                always {
                    // Docker μ»¨ν…Œμ΄λ„ˆ μ’…λ£Œ 및 정리
                    sh '''
                        docker stop progress_tracker
                        docker rm progress_tracker
                    '''
                }
            }
        }
    }
}

2.docker build μ‹€μ‹œκ°„ μ§„ν–‰ 상황 μΆ”μ ν•˜κΈ°

(μ‹€μ œ μž‘μ—… Dockerfileκ³Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ Jenkins 폴더에 생성, μ  ν‚¨μŠ€μ—μ„œ Jenkinsfile pathλ₯Ό λ³€κ²½ν•΄μ£Όμ–΄μ•Ό 함)

2-1.μœ„μ— μžˆλŠ” μ»¨ν…Œμ΄λ„ˆ 생성 ν•„μš”

2-2.sh "(docker build --progress=plain -t test:latest . 2>&1) | tee Jenkins/build.log"둜 bulid.log에 둜그λ₯Ό κΈ°λ‘ν•˜κ³  μ‹€μ‹œκ°„μœΌλ‘œ κ°μ‹œν•΄μ„œ μœ„μ˜ μ»¨ν…Œμ΄λ„ˆμ—κ²Œ μ•Œλ €μ£ΌλŠ” μ„œλΉ„μŠ€ μΆ”κ°€

# docker-compose.yml

# Dockerfile.tracker

# Dockerfile.monitor

# monitor.py

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts