Skip to content

Commit

Permalink
basic setup
Browse files Browse the repository at this point in the history
  • Loading branch information
Jayko001 committed Oct 3, 2023
1 parent 06f938b commit f39abd4
Show file tree
Hide file tree
Showing 6 changed files with 224 additions and 396 deletions.
227 changes: 76 additions & 151 deletions .github/workflows/extension_ci.yml
Original file line number Diff line number Diff line change
@@ -1,155 +1,80 @@
name: Clerk FDW Extension
# name: Prometheus FDW Extension

defaults:
run:
shell: bash
working-directory: ./
# defaults:
# run:
# shell: bash
# working-directory: ./

on:
pull_request:
branches:
- main
push:
branches:
- main
release:
types:
- created
# on:
# pull_request:
# branches:
# - main
# push:
# branches:
# - main
# release:
# types:
# - created

jobs:
lint:
name: Run linters
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- name: Install Rust minimal nightly with clippy and rustfmt
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: nightly
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2
with:
prefix-key: "clerk_fdw-extension-lint"
# Update cache directories as needed
cache-directories: |
/home/runner/.pgrx
- uses: ./.github/actions/pgx-init
with:
working-directory: ./
- name: Cargo format
run: cargo +nightly fmt --all --check
- name: Clippy
run: cargo clippy
# jobs:
# lint:
# name: Run linters
# runs-on: ubuntu-22.04
# steps:
# - uses: actions/checkout@v3
# - name: Install Rust minimal nightly with clippy and rustfmt
# uses: actions-rs/toolchain@v1
# with:
# profile: minimal
# toolchain: nightly
# components: rustfmt, clippy
# - uses: Swatinem/rust-cache@v2
# with:
# prefix-key: "prometheus_fdw-extension-lint"
# # Update cache directories as needed
# cache-directories: |
# /home/runner/.pgrx
# - uses: ./.github/actions/pgx-init
# with:
# working-directory: ./
# - name: Cargo format
# run: cargo +nightly fmt --all --check
# - name: Clippy
# run: cargo clippy

# figure out how to test work
# test:
# name: Run tests
# runs-on: ubuntu-22.04
# steps:
# - uses: actions/checkout@v2
# - name: Install Rust stable toolchain
# uses: actions-rs/toolchain@v1
# with:
# toolchain: stable
# - uses: Swatinem/rust-cache@v2
# with:
# prefix-key: "pgmq-extension-test"
# workspaces: |
# pgmq
# # Additional directories to cache
# cache-directories: |
# /home/runner/.pgrx
# - uses: ./.github/actions/pgx-init
# with:
# working-directory: ./
# - name: test
# run: |
# sudo apt-get update && sudo apt-get install -y postgresql-server-dev-14
# git clone https://github.com/pgpartman/pg_partman.git && \
# cd pg_partman && \
# sudo make install && cd ../
# cp /usr/share/postgresql/14/extension/pg_partman* ~/.pgrx/15.4/pgrx-install/share/postgresql/extension/
# cp /usr/lib/postgresql/14/lib/pg_partman_bgw.so ~/.pgrx/15.4/pgrx-install/lib/postgresql/
# rm -rf ./target/pgrx-test-data-* || true
# pg_version=$(stoml Cargo.toml features.default)
# cargo pgrx run ${pg_version} --pgcli || true
# cargo pgrx test ${pg_version}

publish:
# only publish release events
if: github.event_name == 'release'
name: trunk publish
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- name: Install Rust stable toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- uses: Swatinem/rust-cache@v2
with:
prefix-key: "clerk_fdw-extension-test"
cache-directories: |
/home/runner/.pgrx
- name: Install stoml and pg-trunk
shell: bash
run: |
set -xe
wget https://github.com/freshautomations/stoml/releases/download/v0.7.1/stoml_linux_amd64 &> /dev/null
mv stoml_linux_amd64 stoml
chmod +x stoml
sudo mv stoml /usr/local/bin/
cargo install pg-trunk
- name: trunk build
working-directory: ./
run: trunk build
- name: trunk publish
working-directory: ./
env:
TRUNK_API_TOKEN: ${{ secrets.TRUNK_AUTH_TOKEN }}
run: |
ext_ver=$(stoml Cargo.toml package.version)
ext_repo=$(stoml Cargo.toml package.repository)
trunk publish clerk_fdw --version ${ext_ver} --file .trunk/clerk_fdw-${ext_ver}.tar.gz --description "Foreign Data wrapper for clerk" --homepage "https://github.com/tembo-io/clerk_fdw" --repository "https://github.com/tembo-io/clerk_fdw" --license "PostgreSQL" --category connectors
# build_and_push:
# name: Build and push images
# needs:
# - publish
# runs-on:
# - self-hosted
# - dind
# - large-8x8
# outputs:
# short_sha: ${{ steps.versions.outputs.SHORT_SHA }}
# steps:
# - name: Check out the repo
# uses: actions/checkout@v3
# - name: Install stoml and pg-trunk
# shell: bash
# run: |
# set -xe
# wget https://github.com/freshautomations/stoml/releases/download/v0.7.1/stoml_linux_amd64 &> /dev/null
# mv stoml_linux_amd64 stoml
# chmod +x stoml
# sudo mv stoml /usr/local/bin/
# - name: Set version strings
# id: versions
# run: |
# echo "SHORT_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
# echo "TAG_VER=$(/usr/local/bin/stoml Cargo.toml package.version)" >> $GITHUB_OUTPUT
# - name: Build and upload image
# run: |
# docker build --build-arg="PGMQ_VER=${{ steps.versions.outputs.TAG_VER }}" -t pgmq-pg images/pgmq-pg
# docker tag pgmq-pg quay.io/tembo/pgmq-pg:v${{ steps.versions.outputs.TAG_VER }}
# docker tag pgmq-pg quay.io/tembo/pgmq-pg:latest
# - name: Login to Quay
# uses: docker/login-action@v2
# with:
# registry: quay.io/tembo
# username: ${{ secrets.QUAY_USER_TEMBO }}
# password: ${{ secrets.QUAY_PASSWORD_TEMBO }}
# - name: Push image
# run: |
# docker push quay.io/tembo/pgmq-pg:v${{ steps.versions.outputs.TAG_VER }}
# docker push quay.io/tembo/pgmq-pg:latest
# publish:
# # only publish release events
# if: github.event_name == 'release'
# name: trunk publish
# runs-on: ubuntu-22.04
# steps:
# - uses: actions/checkout@v2
# - name: Install Rust stable toolchain
# uses: actions-rs/toolchain@v1
# with:
# toolchain: stable
# - uses: Swatinem/rust-cache@v2
# with:
# prefix-key: "prometheus_fdw-extension-test"
# cache-directories: |
# /home/runner/.pgrx
# - name: Install stoml and pg-trunk
# shell: bash
# run: |
# set -xe
# wget https://github.com/freshautomations/stoml/releases/download/v0.7.1/stoml_linux_amd64 &> /dev/null
# mv stoml_linux_amd64 stoml
# chmod +x stoml
# sudo mv stoml /usr/local/bin/
# cargo install pg-trunk
# - name: trunk build
# working-directory: ./
# run: trunk build
# - name: trunk publish
# working-directory: ./
# env:
# TRUNK_API_TOKEN: ${{ secrets.TRUNK_AUTH_TOKEN }}
# run: |
# ext_ver=$(stoml Cargo.toml package.version)
# ext_repo=$(stoml Cargo.toml package.repository)
# trunk publish prometheus_fdw --version ${ext_ver} --file .trunk/prometheus_fdw-${ext_ver}.tar.gz --description "Foreign Data wrapper for prometheus" --homepage "https://github.com/tembo-io/prometheus_fdw" --repository "https://github.com/tembo-io/prometheus_fdw" --license "PostgreSQL" --category connectors
5 changes: 2 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "clerk_fdw"
version = "0.2.4"
name = "prometheus_fdw"
version = "0.0.0"
edition = "2021"

[lib]
Expand All @@ -17,7 +17,6 @@ pg_test = []

[dependencies]
chrono = "0.4.26"
clerk-rs = "0.1.7"
pgrx = "=0.9.7"
reqwest = "0.11.18"
reqwest-middleware = "0.2.3"
Expand Down
96 changes: 27 additions & 69 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,95 +1,53 @@
## Clerk_fdw

This section is about how to use the clerk foreign data wrapper in the data warehouse to collect valuable analytics
## Prometheus_fdw

### Pre-requisistes

- have the v0.2.2 of `clerk_fdw` extension enabled in your instance
- have the v0.2.2 of `prometheus_fdw` extension enabled in your instance

`create extension prometheus_fdw;`

Create the foreign data wrapper:

```
create foreign data wrapper clerk_wrapper
handler clerk_fdw_handler
validator clerk_fdw_validator;
create foreign data wrapper prometheus_wrapper
handler prometheus_fdw_handler
validator prometheus_fdw_validator;
```

Connect to clerk using your credentials:

```
create server my_clerk_server
foreign data wrapper clerk_wrapper
options (
api_key '<clerk secret Key>')
create server my_prometheus_server
foreign data wrapper prometheus_wrapper;
```

Create Foreign Table:

### User table

This table will store information about the users.
Note: The current limit is 500 users. This should be increased in future versions.
### Metric Labels Table

```
create foreign table clerk_users (
user_id text,
first_name text,
last_name text,
email text,
gender text,
created_at bigint,
updated_at bigint,
last_sign_in_at bigint,
phone_numbers bigint,
username text
)
server my_clerk_server
options (
object 'users'
);
```

### Organization Table

This table will store information about the organizations.
Note: The current limit is 500 organizations. This should be increased in future versions.

```
create foreign table clerk_organizations (
organization_id text,
name text,
slug text,
created_at bigint,
updated_at bigint,
created_by text
CREATE FOREIGN TABLE IF NOT EXISTS metric_labels (
metric_id BIGINT,
metric_name TEXT NOT NULL,
metric_name_label TEXT NOT NULL,
metric_labels jsonb
)
server my_clerk_server
options (
object 'organizations'
SERVER my_prometheus_server
OPTIONS (
object 'metric_labels'
);
```

### Junction Table
### Metrics Value Table

This table connects the `clerk_users` and `clerk_orgs`. It lists out all users and their roles in each organization.
NOTE: NEED TO ADD PARTIONTION TO THIS TABLE

```
create foreign table clerk_organization_memberships (
user_id text,
organization_id text,
role text
)
server my_clerk_server
CREATE FOREIGN TABLE IF NOT EXISTS metric_values (
metric_id BIGINT,
metric_time TIMESTAMPTZ,
metric_value FLOAT8
)
server my_prometheus_server
options (
object 'organization_memberships'
object 'metric_values'
);
```

NOTE: There is a 0.5 second sleep timer between each request so that we do not overload clerk servers. The reponse might take a while and it is reccomended that you store the information in a local table for quick access.

Query from the Foreign Table:
`select * from clerk_users`

To get all members of an organization:
`select * from organization_memberships where organization_id='org_id';`
5 changes: 0 additions & 5 deletions clerk_fdw.control

This file was deleted.

5 changes: 5 additions & 0 deletions prometheus_fdw.control
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
comment = 'prometheus_fdw: A foreign data wrapper for prometheus'
default_version = '@CARGO_VERSION@'
module_pathname = '$libdir/prometheus_fdw'
relocatable = false
superuser = true
Loading

0 comments on commit f39abd4

Please sign in to comment.