From 04e70b3b34ce3ca00d292f5d18a0748f35ee8032 Mon Sep 17 00:00:00 2001 From: yystopf Date: Sat, 13 Apr 2024 21:09:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E6=8E=A5=E5=8F=A3se?= =?UTF-8?q?rvice=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/reposync/client_service.rb | 97 +++++++++++++++++++ .../reposync/create_sync_branch_service.rb | 30 ++++++ .../reposync/create_sync_repo_service.rb | 34 +++++++ .../reposync/delete_branch_service.rb | 19 ++++ app/services/reposync/delete_repo_service.rb | 18 ++++ app/services/reposync/get_logs_service.rb | 23 +++++ .../reposync/get_sync_branches_service.rb | 30 ++++++ .../reposync/get_sync_repos_service.rb | 28 ++++++ app/services/reposync/sync_branch_service.rb | 22 +++++ app/services/reposync/sync_repo_service.rb | 18 ++++ .../reposync/update_branch_status_service.rb | 21 ++++ .../reposync/update_repo_status_service.rb | 19 ++++ 12 files changed, 359 insertions(+) create mode 100644 app/services/reposync/client_service.rb create mode 100644 app/services/reposync/create_sync_branch_service.rb create mode 100644 app/services/reposync/create_sync_repo_service.rb create mode 100644 app/services/reposync/delete_branch_service.rb create mode 100644 app/services/reposync/delete_repo_service.rb create mode 100644 app/services/reposync/get_logs_service.rb create mode 100644 app/services/reposync/get_sync_branches_service.rb create mode 100644 app/services/reposync/get_sync_repos_service.rb create mode 100644 app/services/reposync/sync_branch_service.rb create mode 100644 app/services/reposync/sync_repo_service.rb create mode 100644 app/services/reposync/update_branch_status_service.rb create mode 100644 app/services/reposync/update_repo_status_service.rb diff --git a/app/services/reposync/client_service.rb b/app/services/reposync/client_service.rb new file mode 100644 index 000000000..984fee674 --- /dev/null +++ b/app/services/reposync/client_service.rb @@ -0,0 +1,97 @@ +class Reposync::ClientService < ApplicationService + attr_reader :url, :params + + def initialize(options={}) + @url = options[:url] + @params = options[:params] + end + + def post(url, params={}) + puts "[reposync][POST] request params: #{params}" + conn.post do |req| + req.url full_url(url) + req.body = params[:data].to_json + end + end + + def get(url, params={}) + puts "[reposync][GET] request params: #{params}" + conn.get do |req| + req.url full_url(url, 'get') + params.each_pair do |key, value| + req.params["#{key}"] = value + end + end + end + + def delete(url, params={}) + puts "[reposync][DELETE] request params: #{params}" + conn.delete do |req| + req.url full_url(url) + req.body = params[:data].to_json + end + end + + def patch(url, params={}) + puts "[reposync][PATCH] request params: #{params}" + conn.patch do |req| + req.url full_url(url) + req.body = params[:data].to_json + end + end + + def put(url, params={}) + puts "[reposync][PUT] request params: #{params}" + conn.put do |req| + req.url full_url(url) + req.body = params[:data].to_json + end + end + + def conn + @client ||= begin + Faraday.new(url: domain) do |req| + req.request :url_encoded + req.headers['Content-Type'] = 'application/json' + req.adapter Faraday.default_adapter + req.options.timeout = 100 # open/read timeout in seconds + req.options.open_timeout = 10 # connection open timeout in seconds + end + end + + @client + end + + def domain + EduSetting.get("reposync_api_domain") || "http://106.75.110.152:50087" + end + + def full_url(api_rest, action='post') + url = [domain, api_rest].join('').freeze + url = action === 'get' ? url : URI.escape(url) + url = URI.escape(url) unless url.ascii_only? + puts "[reposync] request url: #{url}" + return url + end + + def log_error(status, body) + puts "[reposync] status: #{status}" + puts "[reposync] body: #{body}" + end + + def render_response(response) + status = response.status + body = JSON.parse(response&.body) + + log_error(status, body) + + if status == 200 + if body["code_status"].to_i == 0 + return [body["code_status"], body["data"], body["msg"]] + else + puts "[reposync][ERROR] code: #{body["code_status"]}" + puts "[reposync][ERROR] message: #{body["msg"]}" + end + end + end +end \ No newline at end of file diff --git a/app/services/reposync/create_sync_branch_service.rb b/app/services/reposync/create_sync_branch_service.rb new file mode 100644 index 000000000..2b417a7e5 --- /dev/null +++ b/app/services/reposync/create_sync_branch_service.rb @@ -0,0 +1,30 @@ +class Reposync::CreateSyncBranchService < Reposync::ClientService + + attr_accessor :repo_name, :internal_branch_name, :external_branch_name, :enable + + def initialize(repo_name, internal_branch_name, external_branch_name, enable=true) + @repo_name = repo_name + @internal_branch_name = internal_branch_name + @external_branch_name = external_branch_name + @enable = enable + end + + def call + result = post(url, request_params) + response = render_response(result) + end + + private + def request_params + Hash.new.merge(data: { + internal_branch_name: internal_branch_name, + external_branch_name: external_branch_name, + enable: enable + }.stringify_keys) + end + + def url + "/cerobot/sync/#{repo_name}/branch".freeze + end + +end \ No newline at end of file diff --git a/app/services/reposync/create_sync_repo_service.rb b/app/services/reposync/create_sync_repo_service.rb new file mode 100644 index 000000000..6176e3b73 --- /dev/null +++ b/app/services/reposync/create_sync_repo_service.rb @@ -0,0 +1,34 @@ +class Reposync::CreateSyncRepoService < Reposync::ClientService + + attr_accessor :repo_name, :internal_repo_address, :external_repo_address, :sync_granularity, :sync_direction, :enable + + def initialize(repo_name, internal_repo_address, external_repo_address, sync_granularity, sync_direction, enable=true) + @repo_name = repo_name + @internal_repo_address = internal_repo_address + @external_repo_address = external_repo_address + @sync_granularity = sync_granularity + @sync_direction = sync_direction + @enable = enable + end + + def call + result = post(url, request_params) + response = render_response(result) + end + + private + def request_params + Hash.new.merge(data: { + repo_name: repo_name, + enable: enable, + internal_repo_address: internal_repo_address, + external_repo_address: external_repo_address, + sync_granularity: sync_granularity, + sync_direction: sync_direction + }.stringify_keys) + end + + def url + "/cerobot/sync/repo".freeze + end +end \ No newline at end of file diff --git a/app/services/reposync/delete_branch_service.rb b/app/services/reposync/delete_branch_service.rb new file mode 100644 index 000000000..6d3d7c328 --- /dev/null +++ b/app/services/reposync/delete_branch_service.rb @@ -0,0 +1,19 @@ +class Reposync::DeleteBranchService < Reposync::ClientService + + attr_accessor :repo_name, :branch_name + + def initialize(repo_name, branch_name) + @repo_name = repo_name + @branch_name = branch_name + end + + def call + result = delete(url) + response = render_response(result) + end + + private + def url + "/cerobot/sync/#{repo_name}/branch/#{branch_name}" + end +end \ No newline at end of file diff --git a/app/services/reposync/delete_repo_service.rb b/app/services/reposync/delete_repo_service.rb new file mode 100644 index 000000000..420a2d60f --- /dev/null +++ b/app/services/reposync/delete_repo_service.rb @@ -0,0 +1,18 @@ +class Reposync::DeleteRepoService < Reposync::ClientService + + attr_accessor :repo_name + + def initialize(repo_name) + @repo_name = repo_name + end + + def call + result = delete(url) + response = render_response(result) + end + + private + def url + "/cerobot/sync/repo/#{repo_name}" + end +end \ No newline at end of file diff --git a/app/services/reposync/get_logs_service.rb b/app/services/reposync/get_logs_service.rb new file mode 100644 index 000000000..e66578830 --- /dev/null +++ b/app/services/reposync/get_logs_service.rb @@ -0,0 +1,23 @@ +class Reposync::GetLogsService < Reposync::ClientService + + attr_accessor :repo_name, :branch_id + + def initialize(repo_name, branch_id=nil) + @repo_name = repo_name + @branch_id = branch_id + end + + def call + result = get(url, request_params) + response = render_response(result) + end + + private + def request_params + branch_id.present? ? {branch_id: branch_id}.stringify_keys : {} + end + + def url + "/cerobot/sync/repo/#{repo_name}/logs" + end +end \ No newline at end of file diff --git a/app/services/reposync/get_sync_branches_service.rb b/app/services/reposync/get_sync_branches_service.rb new file mode 100644 index 000000000..92c9d8565 --- /dev/null +++ b/app/services/reposync/get_sync_branches_service.rb @@ -0,0 +1,30 @@ +class Reposync::GetSyncBranchesService < Reposync::ClientService + + attr_accessor :repo_name, :page, :limit, :create_sort + + def initialize(repo_name, page=1, limit=10, create_sort=false) + @repo_name = repo_name + @page = page + @limit = limit + @create_sort = create_sort + end + + def call + result = get(url, request_params) + response = render_response(result) + end + + private + def request_params + { + page: page, + limit: limit, + create_sort: create_sort + }.stringify_keys + end + + def url + "/cerobot/sync/#{repo_name}/branch".freeze + end + +end \ No newline at end of file diff --git a/app/services/reposync/get_sync_repos_service.rb b/app/services/reposync/get_sync_repos_service.rb new file mode 100644 index 000000000..3fc39d89f --- /dev/null +++ b/app/services/reposync/get_sync_repos_service.rb @@ -0,0 +1,28 @@ +class Reposync::GetSyncReposService < Reposync::ClientService + attr_accessor :page, :limit, :create_sort + + def initialize(page=1, limit=10, create_sort=false) + @page = page + @limit = limit + @create_sort = create_sort + end + + def call + result = get(url, request_params) + response = render_response(result) + end + + private + def request_params + { + page: page, + limit: limit, + create_sort: create_sort + }.stringify_keys + end + + def url + "/cerobot/sync/repo".freeze + end + +end \ No newline at end of file diff --git a/app/services/reposync/sync_branch_service.rb b/app/services/reposync/sync_branch_service.rb new file mode 100644 index 000000000..9ca71b3fe --- /dev/null +++ b/app/services/reposync/sync_branch_service.rb @@ -0,0 +1,22 @@ +class Reposync::SyncBranchService < Reposync::ClientService + + attr_accessor :repo_name, :branch_name, :sync_direct + + def initialize(repo_name, branch_name, sync_direct) + @repo_name = repo_name + @branch_name = branch_name + @sync_direct = sync_direct + end + + def call + result = post(url) + response = render_response(result) + end + + private + + def url + "/cerobot/sync/#{repo_name}/branch/#{branch_name}?sync_direct=#{sync_direct}" + end + +end \ No newline at end of file diff --git a/app/services/reposync/sync_repo_service.rb b/app/services/reposync/sync_repo_service.rb new file mode 100644 index 000000000..8b9e6c247 --- /dev/null +++ b/app/services/reposync/sync_repo_service.rb @@ -0,0 +1,18 @@ +class Reposync::SyncRepoService < Reposync::ClientService + + attr_accessor :repo_name + + def initialize(repo_name) + @repo_name = repo_name + end + + def call + result = post(url) + response = render_response(result) + end + + private + def url + "/cerobot/sync/repo/#{repo_name}" + end +end \ No newline at end of file diff --git a/app/services/reposync/update_branch_status_service.rb b/app/services/reposync/update_branch_status_service.rb new file mode 100644 index 000000000..98ebcd5b5 --- /dev/null +++ b/app/services/reposync/update_branch_status_service.rb @@ -0,0 +1,21 @@ +class Reposync::UpdateBranchStatusService < Reposync::ClientService + + attr_accessor :repo_name, :branch_name, :enable + + def initialize(repo_name, branch_name, enable) + @repo_name = repo_name + @branch_name = branch_name + @enable = enable + end + + def call + result = put(url) + response = render_response(result) + end + + private + + def url + "/cerobot/sync/#{repo_name}/branch/#{branch_name}?enable=#{enable}" + end +end \ No newline at end of file diff --git a/app/services/reposync/update_repo_status_service.rb b/app/services/reposync/update_repo_status_service.rb new file mode 100644 index 000000000..db7065d85 --- /dev/null +++ b/app/services/reposync/update_repo_status_service.rb @@ -0,0 +1,19 @@ +class Reposync::UpdateRepoStatusService < Reposync::ClientService + + attr_accessor :repo_name, :enable + + def initialize(repo_name, enable) + @repo_name = repo_name + @enable = enable + end + + def call + result = put(url) + response = render_response(result) + end + + private + def url + "/cerobot/sync/repo/#{repo_name}?enable=#{enable}".freeze + end +end \ No newline at end of file