From 5b2710c04a6d4298e9a81e6821f12177de80283d Mon Sep 17 00:00:00 2001 From: otto <965391514@qq.com> Date: Tue, 19 Mar 2024 15:23:25 +0800 Subject: [PATCH] up --- .gitignore | 41 +++++++++++ Dockerfile | 21 ++++++ Jenkinsfile | 143 +++++++++++++++++++++++++++++++++++++ build.sh | 35 +++++++++ configs/config | 19 +++++ configs/config-dev | 19 +++++ configs/config-master | 19 +++++ go.mod | 70 ++++++++++++++++++ hot.go | 7 ++ hotspot-clear-job-dev.yaml | 22 ++++++ task/task.go | 85 ++++++++++++++++++++++ task_test.go | 10 +++ 12 files changed, 491 insertions(+) create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 Jenkinsfile create mode 100644 build.sh create mode 100644 configs/config create mode 100644 configs/config-dev create mode 100644 configs/config-master create mode 100644 go.mod create mode 100644 hot.go create mode 100644 hotspot-clear-job-dev.yaml create mode 100644 task/task.go create mode 100644 task_test.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dff6732 --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +# Reference https://github.com/github/gitignore/blob/master/Go.gitignore +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +vendor/ + +# Go workspace file +go.work + +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# OS General +Thumbs.db +.DS_Store + +# project +*.cert +*.key +*.log +bin/ +# Develop tools +.vscode/ +.idea/ +*.swp +go.sum +main +hot diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3b87e58 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM 192.168.1.131:8888/library/golang:1.20.5 AS builder + +COPY . /src +WORKDIR /src + +RUN go mod tidy +RUN go build hot.go + +FROM 192.168.1.131:8888/library/alpine:3.13 +RUN apk add make +RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories +RUN apk update && apk add tzdata +RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +RUN echo "Asia/Shanghai" > /etc/timezone + +WORKDIR /app + +COPY --from=builder /src/configs /app/configs +COPY --from=builder /src/hot /app/hot +ENTRYPOINT ["./hot"] + diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..c7c0fd3 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,143 @@ +// 获取当前的git分支 +def branch(){ + switch("${env.GIT_BRANCH}") { + case "origin/dev": + return "dev" + case "origin/release": + return "release" + case "origin/beta": + return "beta" + case "origin/master": + return "master" + case "*/dev": + return "dev" + case "*/release": + return "release" + case "*/beta": + return "beta" + case "*/master": + return "master" + } + return "" +} +// 同步yaml部署文件 +def yaml(){ + switch("${env.Branch}") { + case "dev": + sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: "${NAME}-job-${env.BRANCH}.yaml")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) + break + case "release": + break + case "beta": + echo "yaml beta" + break + case "master": + sshPublisher(publishers: [sshPublisherDesc(configName: 'master-k8s', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: "${NAME}-job-${env.BRANCH}.yaml")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) + break + } +} + +// 执行yaml部署 +def apply(){ + switch("${env.Branch}") { + case "dev": + sh "ssh root@192.168.1.156 kubectl apply -f /usr/local/k8s/${NAME}-job-${env.BRANCH}.yaml" + break + case "release": + echo "apply release" + break + case "beta": + echo "apply beta" + break + case "master": + sshagent(['test-k8s-login-key']) { + sh "ssh root@193.112.79.170 kubectl apply -f /usr/local/k8s/${NAME}-job-${env.BRANCH}.yaml" + } + break + } +} + +def image(){ + switch("${env.Branch}") { + case "dev": + sh "ssh root@192.168.1.156 kubectl set image Deployment/${env.K8S_DEPLOYMENT} ${env.NAME}=192.168.1.131:8888/job/${env.BRANCH}/${env.NAME}:${env.VERSION} -n ${env.BRANCH}" + break + case "release": + echo "image release" + break + case "beta": + echo "image beta" + break + case "master": + sshagent(['test-k8s-login-key']) { + sh "ssh root@193.112.79.170 kubectl set image Deployment/${env.K8S_DEPLOYMENT} ${env.NAME}=192.168.0.19:5000/job/${env.BRANCH}/${env.NAME}:${env.VERSION} -n ${env.BRANCH}" + } + break + } +} + +pipeline { + agent any + + environment { + // 服务名 + NAME = 'hotspot-clear' + // 镜像名称,对应K8S_FILE里面Deployment.containers的name + + // git路径 + GIT_URL = 'http://git.gz.internal.jumaiyx.cn/jm/live.git' + + // k8s deployment名称,对应K8S_FILE里面Deployment的name + K8S_DEPLOYMENT = 'hotspot-clear-job' + + // 分支 + BRANCH = branch() + + // 更新的版本 + VERSION = "${env.GIT_COMMIT}" + + // 自动生成版本号,仅限dev和release使用,master按照tag版本 + IMAGE_VERSION = UUID.randomUUID().toString() + + } + + + stages { + // 首次部署需要使用,后期可以直接注释掉此步骤 + stage('传入yaml') { + steps { + yaml() + echo '传入yaml 完成' + } + } + // 首次部署需要使用,后期可以直接注释掉此步骤 + stage('apply') { + + steps { + apply() + echo '执行apply 完成' + } + } + stage('更新image') { + steps { + image() + echo '更新image 完成' + } + + } + + } + post { + always { + echo 'I will always say Hello again!' + } + success { + // FeiShu(webhook:fei(),proxy:'',msg:'',atAll:false,type:'') + echo '部署完成' + } + failure { + // FeiShu(webhook:fei(),proxy:'',msg:'',atAll:false,type:'') + echo 'I will always say Hello again!' + } + } +} diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..0f080fe --- /dev/null +++ b/build.sh @@ -0,0 +1,35 @@ +#!/bin/bash +#version=git log --format='%H' -n1 +project_name="hotspot-clear" +version=$(git log --format='%H' -n1) +environment=$(git rev-parse --abbrev-ref HEAD) +hostname="192.168.1.131:8888" + +if [ ! -n "$version" ] ;then + echo "未获取到版本信息" + return +fi + +echo "打包的环境:$environment" +echo "打包版本号:$version" +echo "项目名称:$project_name" + +if [ $environment == "dev" ] ;then + echo "======登录镜像仓库======" + docker login -u admin -p jumai123 192.168.1.131:8888 +fi + +if [ $environment == "master" ] ;then + hostname="harbor.homieyy.com" + echo "======登录镜像仓库======" + docker login -u admin -p 1EeFT5qjpM harbor.homieyy.com +fi + +echo "======build======" +docker build -t $project_name:latest . +echo "======tag=======" +docker tag $project_name:latest $hostname/job/$environment/$project_name:$version +echo "======push=======" +docker push $hostname/job/$environment/$project_name:$version +echo "======delete=====" +docker rmi $project_name:latest $hostname/job/$environment/$project_name:$version diff --git a/configs/config b/configs/config new file mode 100644 index 0000000..9ce70dc --- /dev/null +++ b/configs/config @@ -0,0 +1,19 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1EVXlNekEzTXpBME9Gb1hEVE16TURVeU1EQTNNekEwT0Zvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSzlOCkNUeVBtYVFQMm5iakhOcWFKRzRKYnk3OHNQT2cvYnhlOU8wRGRCZVlTVVJPSGlhV3NHTWN1cFFZV1VXMnU3elAKN1QyTnF5NkptVVhDd2VrOVRlc2dURUF6clFMdjQwcGdpalNxZFRzUFJvTmR0eVJEbm8rNGpJWmJqemR6RW55YwpnZlRwOTgzWEZqVkM0RlYxS3NSbVpjVHdmaG5wNFREcXJuV3liVTk2Z0lVejN1NEZrdlNzVFRBVEYxeVdFMUFZCkhud3ZXbTZiT3VxQ0RNWnlvUEF3ek1qT3o4NzBYRFFobktueUk2eWN4Rmx0NDBjTXg0T3NDOTY0L1FZUHdhWDMKTEFGNFRQWFA3SWZUMW56ZkRDMHV1RnRPVkEzZGthMFpEekdINHVLVmtZTEZ2RHNpemROOEx2YW4ydmRVdHVSTApUQ2ZGemg4Z0piaG8yTCtKamowQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFBNkxhQnFvRldjTFFYSk5GQ2FZZVdvSTltOXMKaW00cHhNMW8yM21DcTl3dC83bUFzc2ZheWtYbUxaWVZ1bm4zdG9LMGdPVzFFaUFIR3N1c3RWNVE2eTR1S21WeQorSFpGNTRVRXJTditHWWlpbWx3TnRZdDd0RTZqMmxIcnVMUEhTMko2T2kzYXd5dXdTdUVTMU0yS1FlYjZsWThzCkR6ZHU3VkdpdDFsUzRFTXhHM2I0UkEybDhzREZGYWpmYklDbURzRG9senlWMmlENS9pZENyN0VIcGZlbjFKOHYKa2FVbW1pWmRXOFFZU2svb016RDN2VmNVdkNUQW5rZWc5NlVkQ0tWVlpMaXkxN3FSUW1Ta1lqMFhhTXE0S0h5WgpvT09MOFhMdUFKNHVnM1dnZ3R5aVVnOW44RzVnVFVVWExIdDM4T1U5Yy9HaE5GUGhPdTdCMEVyb1RIbz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + server: https://192.168.1.156:6443 + name: kubernetes +contexts: +- context: + cluster: kubernetes + user: kubernetes-admin + name: kubernetes-admin@kubernetes +current-context: kubernetes-admin@kubernetes +kind: Config +preferences: {} +users: +- name: kubernetes-admin + user: + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQWRxZ0F3SUJBZ0lJTWQ1OWc1L241TkF3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TXpBMU1qTXdOek13TkRoYUZ3MHlOREExTWpJd056TXdOVEJhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTJqMmhCMG5DZytFaE0zejUKNW1RVHVZdmVSblZ5blVRemJwcWtleVNOR005LzRJYXVVNEg4by9VRE5vQ1JZNnBBdWpLUWNkc2ZJMEdGUkxTRAp4ZGtuQkJGYlVMRnptUHkwdEJiQkVkMm1pS3B2NktpaC9qRk0xTWFHY0l2R29nRnFrRDNrU3pMVGRKRnQ1OThMCkI3b21yTzZLRFlLakJXMjlydGdPNnRDWlUrUG12RWRpbStGRDIrb2VYY0kzbktzbE1xQ3FrOFZ0aUxWNFFtWWgKbG1JZHlva2VpZG5idXprM3p4bjdyK3p2Zi9sTUFOSDRvM0p5SVRaZUZHRW9PK3owZkNjZkhMRUN5ZkxWR0dxbgpTUVBIMUVMZS80a212c1BlQWdzYlI4WjArY3FTZzFMdkpxMGUydXpGNUlOZ2xPMTlDcCtldWYzZU51S1FlSTRXCjhoWHhkUUlEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFHVm82enBkZjRoRlFVQ0hNU3lyT3ZwMFpCQkQ5RGIybDVqYwpOS3Fvb0tQZUVwTnExRlFtalRTS0h0RjNUV2pRYlR3NWw2ZEV4YUdaK0VObUR0ejFPd2lndnFENDRWbWZRL2FKCk5mMkxMSjVLNUNDZmZvNEJWZGhJR2lrcFVDNVRhSk1BYWNyUW56dEplTVN6elZSNXQ2ZDJwcmwyMXRvYzRzQjkKQ3VVRDI5K1plSUo5dDVXcWd4SWRFeXo4eXg2UkZvNktzZlZWS0NJdHBCS2lDRm9ZTFNtYUY4NlVEYlBOZGdUTwpXZVVvb09tcGxWdUdrUnRUVzc1Z3R6OGlreUlDZElvY1pvZ2x1c2FhbmdhUkxLK0Y2YXhkbmpGaHByUHB4cEgxCkgzZ2xEd2V5MjdLaUp3WEZHdzQycGdxY2MrWGRVQW5OSitUei94QWQwM0MvMG8yNkJmVT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBMmoyaEIwbkNnK0VoTTN6NTVtUVR1WXZlUm5WeW5VUXpicHFrZXlTTkdNOS80SWF1ClU0SDhvL1VETm9DUlk2cEF1aktRY2RzZkkwR0ZSTFNEeGRrbkJCRmJVTEZ6bVB5MHRCYkJFZDJtaUtwdjZLaWgKL2pGTTFNYUdjSXZHb2dGcWtEM2tTekxUZEpGdDU5OExCN29tck82S0RZS2pCVzI5cnRnTzZ0Q1pVK1BtdkVkaQptK0ZEMitvZVhjSTNuS3NsTXFDcWs4VnRpTFY0UW1ZaGxtSWR5b2tlaWRuYnV6azN6eG43cit6dmYvbE1BTkg0Cm8zSnlJVFplRkdFb08rejBmQ2NmSExFQ3lmTFZHR3FuU1FQSDFFTGUvNGttdnNQZUFnc2JSOFowK2NxU2cxTHYKSnEwZTJ1ekY1SU5nbE8xOUNwK2V1ZjNlTnVLUWVJNFc4aFh4ZFFJREFRQUJBb0lCQVFEQXNWT2h4TDJMaGRhegp5SEE1dlRreFJjN2ZOVW9hazZJNTBTN1RUOFdKRjRVWU1MSnhKejl6WUowU25WaEJ3SXhnR3M4d3lFRm85cXY5CnFza0NncWFSVCtYcGpKUzlpcnJlbTR5akFxck0xbmZ5M0JvVC8yR1FLUzJBNTlsZEo1VDRnTDAyckV6S0NySVkKM2ZXMlArVndJVG9oamF2MDJoMTE2R3piWlkxTDVEZGUrSm5lVWpnZkxpWC9qTStKQkprcmVwZWRSaWo2ZVA5VgpTc2FNeTM5YnZrS3lxYnE0MjhqVkhqV00xbzVQWlRJVmx1bkNKTDBVUHhaaHpubnJHSGNCS1pZR1dQNlMyRlgvCll0Ykphd0lvT2hzTCtWR1NNd3Jzc0trYmFnTHNMSkNMN2FlRXNxNDFzb1RSNVNkK2F2RHo1UkFhRjlkK0kzRzQKVjM1dVpwbk5Bb0dCQU9qeGdtN1pSS1NQMG5XQkt6TTA3bWlVU3dzc2NtSWkyUkVScXMrRDF4OFZ4QXRXWllXZwpxUHZRMHBiMnBLbGZGSTFRRHp2OTdPWmUwQ1k3KzZNVHBqNjBhZGM3QVA2RkpnSmpuYVlTOXFEdUlveGNKUEY0Cng3NUxEZjNYcUV1L0ErZ1NwbkowRS9JTHRYeUZZQXM1djJwbHhWMUJpUlVmR2RJN2d6bU43SWRmQW9HQkFPL1gKa3FJZmNBd3VZaW81TWlFL0l3UTUrcno0YkJzYTQvSnY5TGNMbkRWWjk1Q3d6eVM5MkhNOHdYWEN2cmNNbC9RdAp2Y00vUDIxek1zL1YzTGc1Ky9GSURya1pTaGxvWTB2Q2F6dEgxazNQNjZ1bGE2U0FadnA0TlZMdkNSMDU2VU51CmpjS0RQZk5nN3ZXVDJNU2czS1ZUVGFDUHJiSEdDNERXWW9pWmY1dXJBb0dBQitRR2N4TFJESElDd3hBNUVtYjgKbkhaSmhIdGc5SW9ScUU1YzV1S2thdDBsNHV4dVMvU0JST1p4KzhNbkdNV3J3STJ4dG1xSGw5WW1YdVV4UlBqcApiTDVYeDM2c0xmTDhzcUFGT3hieFc4bzFTV1BsckhoVzY4OUhEZzQ4R1RURFFSMUFuaWZvZFE2SWUwdFpVWWdIClArZHFwQm9RTnJMekFQZ2JIZHY4NHlrQ2dZRUE0MUtMWktZdmFSdzlabyszZDlPRHVPbkxRWGlqM2p6cWVFcXMKd3lGNStRZEFvaDh5OWp3Si80OUNQZjlMQyt3ZnlndmdwRUk2Tjk3TDlqbFpiak5uSEJXVC90UjlhditKdmJDVQpPaWVvY3kveXkwbUtjT3hTcm10by95WVltVjdlUEU5NGhUZ25hNW9nWXhxeWhndUJsaUVTbm5BUHpVTk1lOXkyCm40bjliT2tDZ1lBajJHdDNlNlNZVExnQkdkNEVGTVB4eVYwWitiQVNRaGFqWStSTlBrd21Db2ZmSzVpNnYzK2MKWHhPSWRtbVFOSmNTNUtHRnNpeDZDNzJhbG1rT29sTGN0aCs1OXBOQzMyVDVhMkV2bWY3TzU0eDJGVWJFTEdvWApKYVZoaW9xcGVwc1BuZVJIUmhiZUllS2RXZUZpV0tVYW16TUhKQkljeDFidzkyN2pVeXdUbXc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= \ No newline at end of file diff --git a/configs/config-dev b/configs/config-dev new file mode 100644 index 0000000..9ce70dc --- /dev/null +++ b/configs/config-dev @@ -0,0 +1,19 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1EVXlNekEzTXpBME9Gb1hEVE16TURVeU1EQTNNekEwT0Zvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSzlOCkNUeVBtYVFQMm5iakhOcWFKRzRKYnk3OHNQT2cvYnhlOU8wRGRCZVlTVVJPSGlhV3NHTWN1cFFZV1VXMnU3elAKN1QyTnF5NkptVVhDd2VrOVRlc2dURUF6clFMdjQwcGdpalNxZFRzUFJvTmR0eVJEbm8rNGpJWmJqemR6RW55YwpnZlRwOTgzWEZqVkM0RlYxS3NSbVpjVHdmaG5wNFREcXJuV3liVTk2Z0lVejN1NEZrdlNzVFRBVEYxeVdFMUFZCkhud3ZXbTZiT3VxQ0RNWnlvUEF3ek1qT3o4NzBYRFFobktueUk2eWN4Rmx0NDBjTXg0T3NDOTY0L1FZUHdhWDMKTEFGNFRQWFA3SWZUMW56ZkRDMHV1RnRPVkEzZGthMFpEekdINHVLVmtZTEZ2RHNpemROOEx2YW4ydmRVdHVSTApUQ2ZGemg4Z0piaG8yTCtKamowQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFBNkxhQnFvRldjTFFYSk5GQ2FZZVdvSTltOXMKaW00cHhNMW8yM21DcTl3dC83bUFzc2ZheWtYbUxaWVZ1bm4zdG9LMGdPVzFFaUFIR3N1c3RWNVE2eTR1S21WeQorSFpGNTRVRXJTditHWWlpbWx3TnRZdDd0RTZqMmxIcnVMUEhTMko2T2kzYXd5dXdTdUVTMU0yS1FlYjZsWThzCkR6ZHU3VkdpdDFsUzRFTXhHM2I0UkEybDhzREZGYWpmYklDbURzRG9senlWMmlENS9pZENyN0VIcGZlbjFKOHYKa2FVbW1pWmRXOFFZU2svb016RDN2VmNVdkNUQW5rZWc5NlVkQ0tWVlpMaXkxN3FSUW1Ta1lqMFhhTXE0S0h5WgpvT09MOFhMdUFKNHVnM1dnZ3R5aVVnOW44RzVnVFVVWExIdDM4T1U5Yy9HaE5GUGhPdTdCMEVyb1RIbz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + server: https://192.168.1.156:6443 + name: kubernetes +contexts: +- context: + cluster: kubernetes + user: kubernetes-admin + name: kubernetes-admin@kubernetes +current-context: kubernetes-admin@kubernetes +kind: Config +preferences: {} +users: +- name: kubernetes-admin + user: + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQWRxZ0F3SUJBZ0lJTWQ1OWc1L241TkF3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TXpBMU1qTXdOek13TkRoYUZ3MHlOREExTWpJd056TXdOVEJhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTJqMmhCMG5DZytFaE0zejUKNW1RVHVZdmVSblZ5blVRemJwcWtleVNOR005LzRJYXVVNEg4by9VRE5vQ1JZNnBBdWpLUWNkc2ZJMEdGUkxTRAp4ZGtuQkJGYlVMRnptUHkwdEJiQkVkMm1pS3B2NktpaC9qRk0xTWFHY0l2R29nRnFrRDNrU3pMVGRKRnQ1OThMCkI3b21yTzZLRFlLakJXMjlydGdPNnRDWlUrUG12RWRpbStGRDIrb2VYY0kzbktzbE1xQ3FrOFZ0aUxWNFFtWWgKbG1JZHlva2VpZG5idXprM3p4bjdyK3p2Zi9sTUFOSDRvM0p5SVRaZUZHRW9PK3owZkNjZkhMRUN5ZkxWR0dxbgpTUVBIMUVMZS80a212c1BlQWdzYlI4WjArY3FTZzFMdkpxMGUydXpGNUlOZ2xPMTlDcCtldWYzZU51S1FlSTRXCjhoWHhkUUlEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFHVm82enBkZjRoRlFVQ0hNU3lyT3ZwMFpCQkQ5RGIybDVqYwpOS3Fvb0tQZUVwTnExRlFtalRTS0h0RjNUV2pRYlR3NWw2ZEV4YUdaK0VObUR0ejFPd2lndnFENDRWbWZRL2FKCk5mMkxMSjVLNUNDZmZvNEJWZGhJR2lrcFVDNVRhSk1BYWNyUW56dEplTVN6elZSNXQ2ZDJwcmwyMXRvYzRzQjkKQ3VVRDI5K1plSUo5dDVXcWd4SWRFeXo4eXg2UkZvNktzZlZWS0NJdHBCS2lDRm9ZTFNtYUY4NlVEYlBOZGdUTwpXZVVvb09tcGxWdUdrUnRUVzc1Z3R6OGlreUlDZElvY1pvZ2x1c2FhbmdhUkxLK0Y2YXhkbmpGaHByUHB4cEgxCkgzZ2xEd2V5MjdLaUp3WEZHdzQycGdxY2MrWGRVQW5OSitUei94QWQwM0MvMG8yNkJmVT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBMmoyaEIwbkNnK0VoTTN6NTVtUVR1WXZlUm5WeW5VUXpicHFrZXlTTkdNOS80SWF1ClU0SDhvL1VETm9DUlk2cEF1aktRY2RzZkkwR0ZSTFNEeGRrbkJCRmJVTEZ6bVB5MHRCYkJFZDJtaUtwdjZLaWgKL2pGTTFNYUdjSXZHb2dGcWtEM2tTekxUZEpGdDU5OExCN29tck82S0RZS2pCVzI5cnRnTzZ0Q1pVK1BtdkVkaQptK0ZEMitvZVhjSTNuS3NsTXFDcWs4VnRpTFY0UW1ZaGxtSWR5b2tlaWRuYnV6azN6eG43cit6dmYvbE1BTkg0Cm8zSnlJVFplRkdFb08rejBmQ2NmSExFQ3lmTFZHR3FuU1FQSDFFTGUvNGttdnNQZUFnc2JSOFowK2NxU2cxTHYKSnEwZTJ1ekY1SU5nbE8xOUNwK2V1ZjNlTnVLUWVJNFc4aFh4ZFFJREFRQUJBb0lCQVFEQXNWT2h4TDJMaGRhegp5SEE1dlRreFJjN2ZOVW9hazZJNTBTN1RUOFdKRjRVWU1MSnhKejl6WUowU25WaEJ3SXhnR3M4d3lFRm85cXY5CnFza0NncWFSVCtYcGpKUzlpcnJlbTR5akFxck0xbmZ5M0JvVC8yR1FLUzJBNTlsZEo1VDRnTDAyckV6S0NySVkKM2ZXMlArVndJVG9oamF2MDJoMTE2R3piWlkxTDVEZGUrSm5lVWpnZkxpWC9qTStKQkprcmVwZWRSaWo2ZVA5VgpTc2FNeTM5YnZrS3lxYnE0MjhqVkhqV00xbzVQWlRJVmx1bkNKTDBVUHhaaHpubnJHSGNCS1pZR1dQNlMyRlgvCll0Ykphd0lvT2hzTCtWR1NNd3Jzc0trYmFnTHNMSkNMN2FlRXNxNDFzb1RSNVNkK2F2RHo1UkFhRjlkK0kzRzQKVjM1dVpwbk5Bb0dCQU9qeGdtN1pSS1NQMG5XQkt6TTA3bWlVU3dzc2NtSWkyUkVScXMrRDF4OFZ4QXRXWllXZwpxUHZRMHBiMnBLbGZGSTFRRHp2OTdPWmUwQ1k3KzZNVHBqNjBhZGM3QVA2RkpnSmpuYVlTOXFEdUlveGNKUEY0Cng3NUxEZjNYcUV1L0ErZ1NwbkowRS9JTHRYeUZZQXM1djJwbHhWMUJpUlVmR2RJN2d6bU43SWRmQW9HQkFPL1gKa3FJZmNBd3VZaW81TWlFL0l3UTUrcno0YkJzYTQvSnY5TGNMbkRWWjk1Q3d6eVM5MkhNOHdYWEN2cmNNbC9RdAp2Y00vUDIxek1zL1YzTGc1Ky9GSURya1pTaGxvWTB2Q2F6dEgxazNQNjZ1bGE2U0FadnA0TlZMdkNSMDU2VU51CmpjS0RQZk5nN3ZXVDJNU2czS1ZUVGFDUHJiSEdDNERXWW9pWmY1dXJBb0dBQitRR2N4TFJESElDd3hBNUVtYjgKbkhaSmhIdGc5SW9ScUU1YzV1S2thdDBsNHV4dVMvU0JST1p4KzhNbkdNV3J3STJ4dG1xSGw5WW1YdVV4UlBqcApiTDVYeDM2c0xmTDhzcUFGT3hieFc4bzFTV1BsckhoVzY4OUhEZzQ4R1RURFFSMUFuaWZvZFE2SWUwdFpVWWdIClArZHFwQm9RTnJMekFQZ2JIZHY4NHlrQ2dZRUE0MUtMWktZdmFSdzlabyszZDlPRHVPbkxRWGlqM2p6cWVFcXMKd3lGNStRZEFvaDh5OWp3Si80OUNQZjlMQyt3ZnlndmdwRUk2Tjk3TDlqbFpiak5uSEJXVC90UjlhditKdmJDVQpPaWVvY3kveXkwbUtjT3hTcm10by95WVltVjdlUEU5NGhUZ25hNW9nWXhxeWhndUJsaUVTbm5BUHpVTk1lOXkyCm40bjliT2tDZ1lBajJHdDNlNlNZVExnQkdkNEVGTVB4eVYwWitiQVNRaGFqWStSTlBrd21Db2ZmSzVpNnYzK2MKWHhPSWRtbVFOSmNTNUtHRnNpeDZDNzJhbG1rT29sTGN0aCs1OXBOQzMyVDVhMkV2bWY3TzU0eDJGVWJFTEdvWApKYVZoaW9xcGVwc1BuZVJIUmhiZUllS2RXZUZpV0tVYW16TUhKQkljeDFidzkyN2pVeXdUbXc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= \ No newline at end of file diff --git a/configs/config-master b/configs/config-master new file mode 100644 index 0000000..f3af8f0 --- /dev/null +++ b/configs/config-master @@ -0,0 +1,19 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJME1ETXhNVEF5TVRVd05Gb1hEVE0wTURNd09UQXlNVFV3TkZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTVZQCko2aXZPTHdFU2R6eWJnaUV4RUNGNjFSaEJoc0hvS2VYTDkzMDZ5bkZwQlNFM05aR3BoN2NDNDllQXRzWldYdnoKR1F3RHFjQ25Wd0tKZ1RRWElGaEtnTXV5UVZVdWdnQ3NuRVpIcW40K2dCbE8xQnNoWFlrNUgvdDFjTEJRaks5TAo1dG5RMXdPbkFRU2tocHRJaTM0YmZPdWpUdkpjYWV0QWc4dC9LdzJkRm1aZFdVWUlYUmJhRE5LSzU0UmVHeDh4CmFUa29JWk43Ym8xOUZsOCtRWXVyYlh5QmEvZjMzcE1UVzhRVzl2cUFCWVBGSEtEM0VNZlphdThZaWpockY4QmoKNXhkdFRidThJRUhkTFVYQU56aUkxWGFtNVR1bnJibktTTll1cEpON2plRGtpT2NDdUJZbk9UOW02b1lzNFhnMwppeHdsSFhyK3owZ3R2dkJvZFBjQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0tVTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFDcFNTYVp6a0RtMzhteUtXSDNsYkVHSDJ3MWgKb3p2cStreWRDQ251VUYrRWlOOFlQeWJ4LzVkUFcyL2xwdm8xdkozTm1hZjBmd1dyeW5HVnZWS01zYVZYU3NOWgpnR0ZvOG5BTXc5ZEswNytzcGVRdHJjaG43bHlzZTNJcjUrcEt5ekNpMG5ZNktMSUV2d3JnallzbU9vbTZKVGVSCmd1UVN6cE9HUlJwN3FndHNpa1M1RnFEYXhLU1QwQ2tZT2U0eTZGOGZDTEhOTXJqeDEvYWVQZlpBWVlhbC9QU2gKL0dicEVJVFg4QWFKeDhiM2xURlF2UFZadTFucUJzTitpV3BuMFQ0Tm14Y09IbjNyeWJqa09jdU9GL0p4aVFhUwpTQVFic1l2Q01pQkZXZHRoeDFNSFpBOWRkTHMrSk96bjdzVFZ1Y2RtcU04YkRaNVNJOGhGRGRvU1JhND0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + server: https://192.168.0.20 + name: cls-1wvehx8c +contexts: +- context: + cluster: cls-1wvehx8c + user: "100029630066" + name: cls-1wvehx8c-100029630066-context-default +current-context: cls-1wvehx8c-100029630066-context-default +kind: Config +preferences: {} +users: +- name: "100029630066" + user: + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURERENDQWZTZ0F3SUJBZ0lJV1Y4cjFQQWxPYmt3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TkRBek1URXdNakkyTURsYUZ3MDBOREF6TVRFd01qSTJNRGxhTURZeApFakFRQmdOVkJBb1RDWFJyWlRwMWMyVnljekVnTUI0R0ExVUVBeE1YTVRBd01ESTVOak13TURZMkxURTNNVEF4Ck1qTTVOamt3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRREtZTmxhT2VPYXZIa04Kbnp6dEwxeG9UQ2trMzMzY2kzS2k4d1dJc0x4aExNa0c5aDhqbFRacy85SC90dXcyRWVteVJ4UEpiTW4vYXNVLwpzTk85OEh3VXNEdjFNNEtwSThSdTBGeVdUQTgxb21oRnNKQW5vS1Z3NlArL0kxcUFnU21qNTRzM3pzdWJOdTVLCkZISkpmQ1RVd1ByMVEzcVBjdVY0Sy9qbktxYittYlZKUHRmSEk5d1JMcGttUFlpSlZTbmx6SHVhRHk4MVJFalUKbWZGZ3QyZFJ1a1g2ak9oS0NvZmtCVENyclg0cHVhcTlEaitPZ0ovcm4yZmgzZFhDMTJNSjFheW5GVTU2S2pXQwp0eUJkUUJiTi9YVGhlMzlyTm0rKzlmY0djTC9SWVgzZFp5dEhrNUdFMHRCRE9yTGJocHAxeE54YWhzTW92SHZECmplOU8xOEdQQWdNQkFBR2pQekE5TUE0R0ExVWREd0VCL3dRRUF3SUNoREFkQmdOVkhTVUVGakFVQmdnckJnRUYKQlFjREFnWUlLd1lCQlFVSEF3RXdEQVlEVlIwVEFRSC9CQUl3QURBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQQpjZ0gyMVFtSnhVbSttRUxSbjRlU0dZUHJoUjZxQ3RTMGN4a2k2KzJ2RU1HM1VLbHN1UzlOVStlWWpXYldSK0tiCnV6VWtPdHBCQnJ1bVFIZ1VkTlZlelArNm9JNXJzMzMzTWs3R2w2ZXFLSmIzZWZYV2dEK20rYis1U1lpbmp4amQKcW5SL2JSSGpWdUtESVZjUXErNjJYdG5Bd0dGSVhGTmxjTHVyYXpWcXJTcUlSakY2dUpicHh4WldwTlRDbGp1dQo2blhuRjRKMGxoV21qRkxkVHFMa3hGSm5QTWR2QWdFWXBUSksvWHFiZXJuOE9yRnIvMDBLQUlDT2I4ckJnQk9GClhZL09CT2p2Nnd4ZmhWWXZnaEk1SG8vS3piY3hydytKNGQxTmhBVk8yL1NzR05wZkFhdEl6MGVQM2IrUWE3OE8KSm9uUHRadFA2KzZXUktodU5aSlFEdz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBeW1EWldqbmptcng1RFo4ODdTOWNhRXdwSk45OTNJdHlvdk1GaUxDOFlTekpCdllmCkk1VTJiUC9SLzdic05oSHBza2NUeVd6Si8yckZQN0RUdmZCOEZMQTc5VE9DcVNQRWJ0QmNsa3dQTmFKb1JiQ1EKSjZDbGNPai92eU5hZ0lFcG8rZUxOODdMbXpidVNoUnlTWHdrMU1ENjlVTjZqM0xsZUN2NDV5cW0vcG0xU1Q3WAp4eVBjRVM2WkpqMklpVlVwNWN4N21nOHZOVVJJMUpueFlMZG5VYnBGK296b1NncUg1QVV3cTYxK0tibXF2UTQvCmpvQ2Y2NTluNGQzVnd0ZGpDZFdzcHhWT2VpbzFncmNnWFVBV3pmMTA0WHQvYXpadnZ2WDNCbkMvMFdGOTNXY3IKUjVPUmhOTFFRenF5MjRhYWRjVGNXb2JES0x4N3c0M3ZUdGZCandJREFRQUJBb0lCQUI5YkJoSU9xZzhOYUl3Tgp3ZmpWdjdHQksxYkZNZEQ3NGhVUkppaFppYlpjcEFEcUhVVDhGMlNuOWpkeWRnS2luOXk1V24xNDE0czFWYjVhCmZWUU9jSXNjQ3c0Z252dnB5TU9La08zUWR3TE9XTzJEUDdLRUYxMzVHN2JYbVd3VGx3b0lFKy9mb0hnNStJMk4Kd1c5VlJyZVg5c29OWEczaFZXQmJIOE5oUG1KdjA2M2lOLzl3dTlQVE5mbXo3R2VNTW5SSThRb2JUOElucmoxWApjUlA5MFdGUUdQYk1GZ05zUGY0eWN3dFAwTDBNMkRUVkpxaFhWdGNROUVRL3QwQzN1alFGL29nazE3amhqV3NzCnJKUUlJZ0hvOWdQUkNLWGZiaTlEdTJya08xTVM5c05FOWo0Vi9ETllFMkV4a2tkdWhxN2NGZGhGbVFXdWFHZjUKNmptTUpDRUNnWUVBMi9wN2FPd2FRVWk3Vkw1bGhOSFNNNGg3WjltSlNOODM1bklFZHNGRWY2SlcxRkx6ZnNsWQp0NklkWDEyaWd3M2w0Uk50ZERlS1AxQ0RwdnBqd1pRSDFiSnh0ZXBTZ0pRcnRUMW9mVWwrY3p0b0J4TGo1Njg5CmpzZFRwRHliWnlnYzJuK2h2blNPS1AxOHhhWlFTT0xRYlRnUUl4QjBBK29SZHU5dCtpMFFyOGNDZ1lFQTY0U1IKWFpHbkpXSVFmaDRUcWF5QkM5VXdSTHk3Z05qY2EvQ1ZucU8yVmtra2p4UldFNHNHWTI2NGloem9wQ2drSVk4UwpOYVVyVjdpY2dHSGE1NHdSeVF5T202dEhuNFFLSkMzYm9KYXdNUUptQ0dMQ3BJVGJldjVYcmZBMjZRcUhHYlJPCkNOdktBSktGN082VDVvcnJYdCtMd3h6b2FMeDlMb1RteGJKdTcva0NnWUVBaE9xSmpQRTBRQVFoWk9nU1VUbXkKcC82c2lpaFFJbDcxMk9GRnZ6ZXlHdWpOVEVlKzV2bmtDRGtGUkcxQVY2MmJHKzl3TUV1cTFlemhUNUIxbkM3RQp1U08wUDNZUldhMnQ1em51bTkwL2NZTVFyVTJGdGFVV0xlSlVzS1VLUlQ5Z2g4bWN3b2FNcTBuWERWb2JvcDZoCno0eVRlNHhpZlViK1BINFpWcFBLUkZzQ2dZRUFyUnBsNFprUmVpZUdxYnVmaGlGVlJBWXdrUVVLNTV2OC9wVDQKMDMzT29jTG16UWNNY1JiSTNrSmQvcDFhM0hUb2dZWHZ3MkFmNkR5M1FxRXB6UEFsamxqZFpFdFN2RXJIVFdvcgpOL0FwbGd3R1JIbWFTR09pRWRkcFNGMzdiZk9mOHVPVVMyeUlIejJTazkrUzgycjlybUN1RC8xcVVMamhaVlNuCmJYMUZqcmtDZ1lCTXdNSGtVbjQyWnc1ZE5FQW5CRzdJOU1abXI5Y2d2YXhWd3ExRFRMRDRoR3hkY1pDaEhJK0wKbzNFRVFvbDF4NUdUUHVGQ0x0KzJLa1hEQ3hQbThSZWZWVHdPZm1leFJObzdESTlFQk5IaGhabTBrMmdqaURKLworWW1jQ0pUSjRYQ0phT1k4eDhzYlJ6ZVdGUDB1bHRrOEczcGNLWWtFNmRHdUdiTkU4RDNoNUE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..5be8a72 --- /dev/null +++ b/go.mod @@ -0,0 +1,70 @@ +module git.gz.internal.jumaiyx.cn/job/hotspot-clear + +go 1.20 + +require ( + git.gz.internal.jumaiyx.cn/job/hotspot_queue v0.0.0-20231228124811-d9cec9f5b71e + git.gz.internal.jumaiyx.cn/pkg/config/v2 v2.0.0-20240312130125-0f8bbcc94011 + git.gz.internal.jumaiyx.cn/pkg/k8s-client/v2 v2.0.3-0.20240229083126-a1abe7ddc19f + git.gz.internal.jumaiyx.cn/pkg/webhook v0.0.0-20240314063906-8db8467590c4 + github.com/redis/go-redis/v9 v9.5.1 +) + +require ( + git.gz.internal.jumaiyx.cn/jm/jmproto v0.0.0-20231228111035-ab8eeaae2906 // indirect + git.gz.internal.jumaiyx.cn/pkg/client v0.0.0-20231123090823-91017d7a1a1e // indirect + git.gz.internal.jumaiyx.cn/pkg/jtime v0.0.0-20230627153611-5d9e320123cc // indirect + git.gz.internal.jumaiyx.cn/pkg/kubediscovery v0.0.0-20240229083231-fa19d823f204 // indirect + git.gz.internal.jumaiyx.cn/proto/game-server v0.0.0-20231031074443-b9b51900f07a // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/go-kratos/aegis v0.2.0 // indirect + github.com/go-kratos/kratos/v2 v2.7.1 // indirect + github.com/go-logr/logr v1.3.0 // indirect + github.com/go-openapi/jsonpointer v0.20.0 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.4 // indirect + github.com/go-playground/form/v4 v4.2.1 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/uuid v1.4.0 // indirect + github.com/gorilla/mux v1.8.0 // indirect + github.com/imdario/mergo v0.3.16 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/oauth2 v0.13.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/term v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/time v0.3.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect + google.golang.org/grpc v1.59.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/api v0.28.3 // indirect + k8s.io/apimachinery v0.28.3 // indirect + k8s.io/client-go v0.28.3 // indirect + k8s.io/klog/v2 v2.110.1 // indirect + k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect + k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect +) diff --git a/hot.go b/hot.go new file mode 100644 index 0000000..5a0db5f --- /dev/null +++ b/hot.go @@ -0,0 +1,7 @@ +package main + +import "git.gz.internal.jumaiyx.cn/job/hotspot-clear/task" + +func main() { + task.NewTask() +} diff --git a/hotspot-clear-job-dev.yaml b/hotspot-clear-job-dev.yaml new file mode 100644 index 0000000..80304b1 --- /dev/null +++ b/hotspot-clear-job-dev.yaml @@ -0,0 +1,22 @@ +apiVersion: batch/v1beta1 +kind: CronJob +metadata: + name: hotspot-clear-job + namespace: dev +spec: +# schedule: "* 10 * * *" # 10分钟 + schedule: "0 * * * *" # 一小时 + jobTemplate: + spec: + template: + spec: + containers: + - name: hotspot-clear + image: harbor.homieyy.com/job/dev/hotspot-queue:2cbd86f97b825d22ba0513c75d3485b904cbcafd + env: + - name: JM_ENVIRONMENT + value: dev + imagePullPolicy: IfNotPresent + restartPolicy: OnFailure + imagePullSecrets: + - name: local-harbor \ No newline at end of file diff --git a/task/task.go b/task/task.go new file mode 100644 index 0000000..b7bd61d --- /dev/null +++ b/task/task.go @@ -0,0 +1,85 @@ +package task + +import ( + "context" + configv2 "git.gz.internal.jumaiyx.cn/pkg/config/v2" + "git.gz.internal.jumaiyx.cn/pkg/config/v2/cproto" + k8sclient "git.gz.internal.jumaiyx.cn/pkg/k8s-client/v2" + "git.gz.internal.jumaiyx.cn/pkg/webhook/wechat" + "github.com/redis/go-redis/v9" + "strconv" + "sync" + "time" +) + +const ( + hotKey = "room:hot:ranking" +) + +var ( + redisInstance *redis.Client + once sync.Once +) + +func NewRedis() *redis.Client { + + once.Do(func() { + redisConfig := &cproto.Redis{} + _ = configv2.Get(configv2.Redis, redisConfig) + redisInstance = redis.NewClient(&redis.Options{ + Addr: redisConfig.Addr, + Password: redisConfig.Password, + PoolSize: 10, + ReadTimeout: 100 * time.Second, + WriteTimeout: 100 * time.Second, + }) + }) + return redisInstance +} + +func NewTask() { + start := time.Now().Unix() + err := task() + times := time.Now().Unix() - start + if times == 0 { + times = 1 + } + wechatHook(times, err) +} + +func task() error { + redisClient := NewRedis() + result, err := redisClient.ZRange(context.Background(), hotKey, 0, -1).Result() + if err != nil { + return err + } + var members []redis.Z + for _, id := range result { + members = append(members, redis.Z{ + Member: id, + Score: 0, + }) + } + err = redisClient.ZAdd(context.Background(), hotKey, members...).Err() + if err != nil { + return err + } + return nil +} + +func wechatHook(times int64, err error) { + envi := "测试" + if k8sclient.Environment() == k8sclient.MasterNamespace { + envi = "正式" + } + hook := wechat.NewMarkdown("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=00dd9216-1f50-42be-8fe1-e66640d7bb27"). + Title(1, "直播间热度清理").Br(). + Text("环境:" + envi).Br(). + Text("耗时:" + strconv.Itoa(int(times)) + "s").Br().Text("状态:") + if err != nil { + hook = hook.FontColor("失败", wechat.Warning).Br().Text("异常:").FontColor(err.Error(), wechat.Warning) + } else { + hook = hook.FontColor("完成", wechat.Info) + } + _ = hook.Send() +} diff --git a/task_test.go b/task_test.go new file mode 100644 index 0000000..8568cca --- /dev/null +++ b/task_test.go @@ -0,0 +1,10 @@ +package main + +import ( + "git.gz.internal.jumaiyx.cn/job/hotspot-clear/task" + "testing" +) + +func TestTask(t *testing.T) { + task.NewTask() +}