Skip to content

Commit 893e2f5

Browse files
authored
Add clickhouse support (#42)
1 parent 3fef429 commit 893e2f5

23 files changed

Lines changed: 1445 additions & 47 deletions
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<yandex>
2+
<remote_servers>
3+
<click_cluster>
4+
<shard>
5+
<internal_replication>true</internal_replication>
6+
<replica>
7+
<host>localhost</host>
8+
<port>9000</port>
9+
</replica>
10+
</shard>
11+
</click_cluster>
12+
</remote_servers>
13+
14+
<keeper_server>
15+
<tcp_port>9181</tcp_port>
16+
<tcp_port_secure>0</tcp_port_secure>
17+
<server_id>1</server_id>
18+
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
19+
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
20+
21+
<coordination_settings>
22+
<operation_timeout_ms>10000</operation_timeout_ms>
23+
<session_timeout_ms>30000</session_timeout_ms>
24+
<raft_logs_level>trace</raft_logs_level>
25+
</coordination_settings>
26+
27+
<raft_configuration>
28+
<server>
29+
<id>1</id>
30+
<hostname>localhost</hostname>
31+
<port>9234</port>
32+
</server>
33+
</raft_configuration>
34+
</keeper_server>
35+
36+
<zookeeper>
37+
<node>
38+
<host>localhost</host>
39+
<port>9181</port>
40+
</node>
41+
</zookeeper>
42+
</yandex>

.github/workflows/test.yml

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,34 +17,59 @@ jobs:
1717
matrix:
1818
ruby: ["3.1", "3.2", "3.3", "3.4"]
1919

20-
services:
21-
postgres:
22-
image: postgres
23-
env:
24-
POSTGRES_USER: root
25-
POSTGRES_HOST_AUTH_METHOD: trust
26-
options: >-
27-
--health-cmd pg_isready
28-
--health-interval 10s
29-
--health-timeout 5s
30-
--health-retries 5
31-
ports:
32-
- 5432:5432
3320
env:
34-
PGHOST: localhost
35-
PGUSER: root
36-
21+
PGHOST: pg
22+
PGUSER: user
23+
PGPASSWORD: pass
3724
steps:
38-
- uses: actions/checkout@v2
25+
- uses: actions/checkout@v4
26+
27+
- name: Create docker network
28+
run: docker network create dbnet
29+
30+
- name: Start PostgreSQL
31+
run: |
32+
docker run -d \
33+
--name pg \
34+
--network dbnet \
35+
-e POSTGRES_PASSWORD=pass \
36+
-e POSTGRES_USER=user \
37+
-e POSTGRES_DB=umbrellio_utils_test \
38+
-p 5432:5432 \
39+
postgres:14
40+
41+
- name: Start ClickHouse
42+
run: |
43+
docker run -d \
44+
--name ch \
45+
--network dbnet \
46+
-e CLICKHOUSE_SKIP_USER_SETUP=1 -e CLICKHOUSE_DB=umbrellio_utils_test \
47+
-p 9000:9000 -p 8123:8123 \
48+
-v ${{ github.workspace }}/.github/clickhouse/clickhouse_keeper.xml:/etc/clickhouse-server/config.d/keeper.xml \
49+
clickhouse/clickhouse-server:25.3.6.56-alpine
50+
51+
- name: Wait for Postgres
52+
run: |
53+
for i in {1..30}; do
54+
if docker exec pg pg_isready -U user; then exit 0; fi
55+
sleep 1
56+
done
57+
exit 1
58+
59+
- name: Wait for ClickHouse
60+
run: |
61+
for i in {1..30}; do
62+
if docker exec ch clickhouse-client --query "SELECT 1"; then exit 0; fi
63+
sleep 1
64+
done
65+
exit 1
3966
4067
- uses: ruby/setup-ruby@v1
4168
with:
4269
ruby-version: ${{ matrix.ruby }}
4370
rubygems: latest
4471
bundler-cache: true
4572

46-
- run: psql -c 'CREATE DATABASE umbrellio_utils_test'
47-
4873
- name: Run Linter
4974
run: bundle exec ci-helper RubocopLint
5075

.rubocop.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ Naming/MethodParameterName:
1212
RSpec/EmptyLineAfterHook:
1313
Enabled: false
1414

15+
Metrics/ModuleLength:
16+
Enabled: false
17+
1518
Naming/FileName:
1619
Exclude:
1720
- lib/umbrellio-utils.rb

Gemfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ gemspec
88
gem "activesupport"
99
gem "bundler"
1010
gem "ci-helper"
11+
gem "click_house", github: "umbrellio/click_house", branch: "master"
12+
gem "csv"
1113
gem "http"
1214
gem "net-pop"
1315
gem "nokogiri"

Gemfile.lock

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
1+
GIT
2+
remote: https://github.com/umbrellio/click_house.git
3+
revision: 1bbf8cb909a248b401d0ba9a9f6f1de2e2c068db
4+
branch: master
5+
specs:
6+
click_house (2.1.2)
7+
activesupport
8+
faraday (>= 1.7, < 3)
9+
110
PATH
211
remote: .
312
specs:
4-
umbrellio-utils (1.9.0)
13+
umbrellio-utils (1.10.0)
514
memery (~> 1)
615

716
GEM
@@ -100,6 +109,7 @@ GEM
100109
concurrent-ruby (1.3.5)
101110
connection_pool (2.5.4)
102111
crass (1.0.6)
112+
csv (3.3.5)
103113
date (3.4.1)
104114
diff-lcs (1.6.2)
105115
docile (1.4.1)
@@ -109,6 +119,12 @@ GEM
109119
erb (4.0.4)
110120
cgi (>= 0.3.3)
111121
erubi (1.13.1)
122+
faraday (2.14.0)
123+
faraday-net_http (>= 2.0, < 3.5)
124+
json
125+
logger
126+
faraday-net_http (3.4.2)
127+
net-http (~> 0.5)
112128
ffi (1.17.2-aarch64-linux-gnu)
113129
ffi (1.17.2-aarch64-linux-musl)
114130
ffi (1.17.2-arm-linux-gnu)
@@ -163,6 +179,8 @@ GEM
163179
method_source (1.1.0)
164180
mini_mime (1.1.5)
165181
minitest (5.25.5)
182+
net-http (0.8.0)
183+
uri (>= 0.11.1)
166184
net-imap (0.5.10)
167185
date
168186
net-protocol
@@ -364,6 +382,7 @@ GEM
364382
unicode-display_width (3.2.0)
365383
unicode-emoji (~> 4.1)
366384
unicode-emoji (4.1.0)
385+
uri (1.1.1)
367386
useragent (0.16.11)
368387
websocket-driver (0.8.0)
369388
base64
@@ -388,6 +407,8 @@ DEPENDENCIES
388407
activesupport
389408
bundler
390409
ci-helper
410+
click_house!
411+
csv
391412
http
392413
net-pop
393414
nokogiri

bin/clickhouse-server

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/bin/bash
2+
set -eu
3+
4+
docker stop clickhouse-server || true
5+
docker rm clickhouse-server || true
6+
7+
docker run \
8+
--detach \
9+
--network host \
10+
--name clickhouse-server \
11+
--ulimit nofile=262144:262144 \
12+
$CLICKHOUSE_IMAGE_TAG
13+
14+
# Wait for ClickHouse server to become available
15+
until docker exec clickhouse-server clickhouse-client --query "SELECT 1" &>/dev/null; do
16+
echo "Waiting for ClickHouse to be ready..."
17+
sleep 1
18+
done
19+
20+
rails ch:create ch:migrate

lib/umbrellio-utils.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
# frozen_string_literal: true
22

33
require_relative "umbrellio_utils"
4+
5+
if defined?(Rake)
6+
Dir[File.join(__dir__, "umbrellio_utils/tasks/**/*.rake")].each { |f| load f }
7+
end

lib/umbrellio_utils.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,21 @@ def synchronize(&)
4848

4949
require_relative "umbrellio_utils/cards"
5050
require_relative "umbrellio_utils/checks"
51+
require_relative "umbrellio_utils/click_house"
5152
require_relative "umbrellio_utils/constants"
5253
require_relative "umbrellio_utils/control"
5354
require_relative "umbrellio_utils/database"
5455
require_relative "umbrellio_utils/formatting"
5556
require_relative "umbrellio_utils/http_client"
5657
require_relative "umbrellio_utils/jobs"
58+
require_relative "umbrellio_utils/migrations"
5759
require_relative "umbrellio_utils/misc"
5860
require_relative "umbrellio_utils/parsing"
5961
require_relative "umbrellio_utils/passwords"
6062
require_relative "umbrellio_utils/random"
6163
require_relative "umbrellio_utils/request_wrapper"
6264
require_relative "umbrellio_utils/rounding"
65+
require_relative "umbrellio_utils/sql"
6366
require_relative "umbrellio_utils/semantic_logger/tiny_json_formatter"
6467
require_relative "umbrellio_utils/store"
6568
require_relative "umbrellio_utils/vault"

0 commit comments

Comments
 (0)