+ <%= for feature <- @features do %>
+ <%= if feature.available do %>
+
+ <%= feature.name %>
+
diff --git a/backend/config/config.exs b/backend/config/config.exs
index b1c743f22..be9cb9abb 100644
--- a/backend/config/config.exs
+++ b/backend/config/config.exs
@@ -28,8 +28,8 @@ config :azimutt,
azimutt_github_issues_new: "https://github.com/azimuttapp/azimutt/issues/new",
environment: config_env(),
# TODO: find an automated process to build it
- version: "2.1.10",
- version_date: "2024-10-11T00:00:00.000Z",
+ version: "2.1.11",
+ version_date: "2024-10-15T00:00:00.000Z",
commit_hash: System.cmd("git", ["log", "-1", "--pretty=format:%h"]) |> elem(0) |> String.trim(),
commit_message: System.cmd("git", ["log", "-1", "--pretty=format:%s"]) |> elem(0) |> String.trim(),
commit_date: System.cmd("git", ["log", "-1", "--pretty=format:%aI"]) |> elem(0) |> String.trim(),
diff --git a/backend/lib/azimutt.ex b/backend/lib/azimutt.ex
index f169c9e07..aba240777 100644
--- a/backend/lib/azimutt.ex
+++ b/backend/lib/azimutt.ex
@@ -310,6 +310,20 @@ defmodule Azimutt do
]
end
+ def connectors do
+ [
+ %{id: "postgres", name: "PostgreSQL", color: "#699eca"},
+ %{id: "mysql", name: "MySQL", color: "#00758f"},
+ %{id: "mariadb", name: "MariaDB", color: "#444b5e"},
+ %{id: "sqlserver", name: "SQL Server", color: "#ededee"},
+ %{id: "oracle", name: "Oracle", color: "#e61d18"},
+ %{id: "mongodb", name: "MongoDB", color: "#20a854"},
+ %{id: "couchbase", name: "Couchbase", color: "#ed2226"},
+ %{id: "bigquery", name: "BigQuery", color: "#4386fa"},
+ %{id: "snowflake", name: "Snowflake", color: "#29b5e8"}
+ ]
+ end
+
def converters do
[
%{id: "aml", name: "AML", parse: true, generate: true},
@@ -393,11 +407,19 @@ defmodule Azimutt do
%{path: ["api"], name: "API"}
]
},
+ %{
+ path: ["internals"],
+ name: "Inside Azimutt",
+ children: [
+ %{path: ["infer-relations"], name: "Inferring relations"}
+ ]
+ },
%{
path: ["other-tools"],
name: "Other tools",
children: [
%{path: ["cli"], name: "CLI"},
+ %{path: ["gateway"], name: "Gateway"},
%{path: ["converters"], name: "Converters"}
]
},
diff --git a/backend/lib/azimutt_web/components/icon.ex b/backend/lib/azimutt_web/components/icon.ex
index bdb08499a..2c4a5a980 100644
--- a/backend/lib/azimutt_web/components/icon.ex
+++ b/backend/lib/azimutt_web/components/icon.ex
@@ -29,6 +29,7 @@ defmodule AzimuttWeb.Components.Icon do
"book-open" -> book_open(assigns)
"chat-bubble-left-right" -> chat_bubble_left_right(assigns)
"check" -> check(assigns)
+ "check-badge" -> check_badge(assigns)
"check-circle" -> check_circle(assigns)
"chevron-down" -> chevron_down(assigns)
"chevron-right" -> chevron_right(assigns)
@@ -537,6 +538,27 @@ defmodule AzimuttWeb.Components.Icon do
end
end
+ def check_badge(assigns) do
+ classes = if assigns[:class], do: " #{assigns[:class]}", else: ""
+
+ case assigns[:kind] do
+ "outline" ->
+ ~H"""
+ <.outline classes={classes}>
+ <%= for feature <- @features do %>
+ <%= if feature.available do %>
+
+ <%= feature.name %>
+
<%= render "connectors/_description-short.html", conn: @conn, connector: @connector %>
++ Azimutt is making the first database explorer targeted for real world databases: large, heterogeneous and messy 😅 + If you ever looked for an Entity-Relationship diagram tool (ERD) or drew your database schema on a sheet or whiteboard, Azimutt is made for you. + But it goes well beyond that with database documentation, cross-database data exploration and even linter and monitoring of your database. +diff --git a/backend/lib/azimutt_web/templates/website/connectors/bigquery.html.heex b/backend/lib/azimutt_web/templates/website/connectors/bigquery.html.heex new file mode 100644 index 000000000..33ddf0c16 --- /dev/null +++ b/backend/lib/azimutt_web/templates/website/connectors/bigquery.html.heex @@ -0,0 +1,52 @@ +<%= render "connectors/_header.html", conn: @conn, connector: @connector %> + +<%= connector_article conn: @conn, title: @seo.title, features: [ + %{name: "Tables", available: true}, + %{name: "Relations", available: true}, + %{name: "Statistics", available: false}, + %{name: "Query history", available: false}, + %{name: "Query data", available: true} +] do %> +
+ BigQuery is Google Cloud's fully-managed, + serverless data warehouse designed for large-scale analytics and business intelligence. + It enables users to quickly analyze massive datasets using SQL without worrying about infrastructure management. + BigQuery is ideal for organizations that need to run complex queries on large volumes of data, offering near real-time insights with fast querying speeds. +
+ <%= render "connectors/_promo.html" %> +
+ The BigQuery connector
+ on GitHub if you are interested in how it works, or improving it.
+ You will most likely want to have a look at the getSchema
function in
+ src/bigquery.ts.
+
+ Few people know and use it but BigQuery has relations. They are not enforced like foreign keys on relational databases, but they help understand your data model.
+ You will most likely not have them, and Azimutt will infer the relations it can for you,
+ but it could be a good idea to report them back to BigQuery as the golden source of truth.
+
The BigQuery connector is already included in the Azimutt Gateway, use it following these steps:
+npx azimutt@latest gateway
)bigquery://bigquery.googleapis.com/your_project?key=path/to/key.json
)Here are more details about how Azimutt secure your data and especially your database url.
+
+ Here is an example of what you can achieve with Azimutt:
+
+
+ Couchbase is a high-performance NoSQL database + that combines the flexibility of document-oriented storage with the power of a distributed architecture. + With features like memory-first architecture, integrated caching, and SQL-like querying with N1QL, + Couchbase provides a flexible and efficient solution for modern, data-driven applications that demand speed and reliability. +
+ <%= render "connectors/_promo.html" %> +
+ As a document-oriented database, Couchbase has no formal schema,
+ so the Couchbase connector
+ has to iterate over all buckets, scopes and collections to fetch a sample of documents and infer their schema.
+ If collections have an implicit schema, it works really well. If they don't, well, it reflects that also 😬
+ You can check what it does by looking at the getSchema
function in the
+ src/couchbase.ts file.
+
+ If you stored different entities inside the same collection, using a field to identify them, the Couchbase connector is able to create several entities out of one collection. + You just have to specify the field name in the `discriminator` attribute in your database url. +
++ Couchbase has no foreign keys defined in the database. Still you can reference entities by storing their ids. + If you do, and follow a naming convention, Azimutt is able to suggest missing relations, making the exploration experience a lot better. + If not, you can still add them manually in Azimutt using AML, this is not a fun work, but it's a good documentation investment ^^ +
+ + <%= render "docs/_h3.html", title: "How to use it" %> +The Couchbase connector is already included in the Azimutt Gateway, so you just have to:
+npx azimutt@latest gateway
)couchbases://user:pass@ej137.couchbase.com
)Here are more details about how Azimutt secure your data and especially your database url.
+
+ Here is an example of what you can do using Azimutt:
+
+
+ <%= @seo.description %> + If yours is not available, please reach out. +
+You can request it or make it on your own. Check the documentation and/or get in touch to find the best way forward.
++ MariaDB is an open-source database that + started as a fork of MySQL, offering enhanced performance, security, and scalability. + MariaDB maintains full compatibility with MySQL while introducing advanced features, such as improved storage engines and better query optimization. + It’s highly flexible, supporting various storage formats and workloads, making it a reliable choice for developers looking to build scalable, secure applications. +
+ <%= render "connectors/_promo.html" %> +
+ The MariaDB connector
+ is available on Azimutt GitHub repository (Open Source FTW 🤘), you can have a look at it and even suggest improvements.
+ In this case, you will be interested in the getSchema
function in
+ src/mariadb.ts
+ that makes everything necessary to extract the MariaDB schema.
+
Beyond the schema extraction, the MariaDB connector also infers:
+The Gateway already integrates the MariaDB connector, you just have to follow these steps to use it:
+npx azimutt@latest gateway
)mariadb://user:pass@localhost:3306/your_db
)Here are more details about how Azimutt secure your data and especially your database url.
+If you don't have a MariaDB database right away, you can use Docker to create one with:
+docker run --name mariadb_sample -p 3307:3306 -e MARIADB_ROOT_PASSWORD=mariadb -e MARIADB_USER=azimutt -e MARIADB_PASSWORD=azimutt -e MARIADB_DATABASE=mariadb_sample mariadb:latest
+ And use this sample script to populate it.
+
+ Here is what you can do with Azimutt:
+
+
+ MongoDB is a popular NoSQL database designed for applications + that need flexible, scalable, and high-performance storage. + Unlike traditional relational databases, MongoDB stores data in a document-oriented format using JSON-like structures, making it ideal for handling unstructured data. + With built-in features like sharding, replication, and high availability, MongoDB provides a powerful solution for managing large datasets in dynamic environments. +
+ <%= render "connectors/_promo.html" %> +
+ As MongoDB has no formal schema, the MongoDB connector
+ iterate over all collections and fetch a sample of documents on each to infer its schema.
+ If collections have an implicit schema, it works really well. If they don't, well, it reflects that also 😬
+ You can look at what it does by looking at the getSchema
function in the
+ src/mongodb.ts file.
+
Azimutt not only handles flat tables but also has nested fields, making it quite good for JSON-like structure like in MongoDB.
++ If you stored several entities in the same collection using a field to identify them, + the MongoDB connector is able to create several entities out of one collection if you specify this field name in the `discriminator` attribute in your database url. +
++ MongoDB has no foreign keys in the database. Still you can reference entities by storing their ids. + If you do, and follow a naming convention, Azimutt will suggest missing relations, improving a lot the exploration experience. + If not, you can still add them manually in Azimutt using AML, this is not a fun work, but it's a good documentation investment ^^ +
+ + <%= render "docs/_h3.html", title: "How to use it" %> +Using the MongoDB connector in Azimutt is quite easy:
+npx azimutt@latest gateway
)mongodb://user:pass@localhost:27017/your_db
)Here are more details about how Azimutt secure your data and especially your database url.
+If you don't have a MongoDB database, you can launch one with Docker:
+docker run --name mongo_sample -p 27017:27017 mongo:latest
+ And here is a sample script to populate it.
+
+ Here is what you can do with Azimutt:
+
+
+ MySQL is the world’s most popular open-source relational database, + widely used for web development and other applications requiring a reliable and high-performance data storage. + Known for its ease of use, MySQL is often the go-to choice for developers building websites, blogs, and e-commerce platforms. + With features like replication, clustering, and robust security, MySQL provides scalability and stability for applications of any size. +
+ <%= render "connectors/_promo.html" %> +
+ You can find the MySQL connector
+ on the Azimutt GitHub repository if you are interested in looking what it does or improving it.
+ If so, you will most probably want to have a look at the
+ src/mysql.ts
+ getSchema
function, which does exactly what you think 😉
+
In addition to MySQL schema extraction it also infers:
+The MySQL connector is baked into the Gateway, to use it you just have to:
+npx azimutt@latest gateway
)mysql://user:pass@localhost:3306/your_db
)Here are more details about how Azimutt secure your data and especially your database url.
+If you don't have a MySQL database right away, you can use Docker to create one with:
+docker run --name mysql_sample -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mysql -e MYSQL_USER=azimutt -e MYSQL_PASSWORD=azimutt -e MYSQL_DATABASE=mysql_sample mysql:latest
+ And use this sample script to populate it.
+
+ Here is what you can do with Azimutt:
+
+
Missing a database connector?
+
+ Azimutt is modular and database connectors are not even embed in the service but in the gateway, remember, you should launch it with npx azimutt@latest gateway
.
+ This is just the CLI
+ published on npm
+ and launching the gateway.
+ But of course, you can clone the repo, launch the gateway from the code and add your own connector.
+
+ We regularly make new connectors, depending on customer or community requests.
+ If you need one not existing yet, check for the
+ already required ones
+ and add your voice (reaction & comment), so we know about their popularity.
+ If not requested yet, create an issue so others can add their voice to yours.
+
+ If you need a connector fast and are willing to invest a bit of time, you can make it on your own, and either keep it for you or contribute to the community by submitting a PR.
+ The hardest part is always finding a way to extract the schema. Most of the time it's done thought system table (INFORMATION_SCHEMA
or more specific ones),
+ but sometimes it's pure inference when the database has no explicit schema like MongoDB
+ or Couchbase.
+ Once you know how to extract the schema, you just need to create a new project and implement the getSchema: (application: string, url: DatabaseUrlParsed): Promise<Database>
function.
+ You can look ath the PostgreSQL
+ or MongoDB connector as inspiration.
+
+ In any way, don't hesitate to reach out for any question. +
+<% end %> + +<%= render "connectors/_footer.html", conn: @conn, connector: connector %> diff --git a/backend/lib/azimutt_web/templates/website/connectors/oracle.html.heex b/backend/lib/azimutt_web/templates/website/connectors/oracle.html.heex new file mode 100644 index 000000000..91c4581f5 --- /dev/null +++ b/backend/lib/azimutt_web/templates/website/connectors/oracle.html.heex @@ -0,0 +1,51 @@ +<%= render "connectors/_header.html", conn: @conn, connector: @connector %> + +<%= connector_article conn: @conn, title: @seo.title, features: [ + %{name: "Tables", available: true}, + %{name: "Relations", available: true}, + %{name: "Types", available: true}, + %{name: "Statistics", available: true}, + %{name: "Query history", available: false}, + %{name: "Triggers", available: false}, + %{name: "Procedures", available: false}, + %{name: "Query data", available: true}, +] do %> ++ Oracle is a powerful, enterprise-grade relational database + designed for handling mission-critical applications and large-scale data. + Known for its exceptional performance, scalability, and advanced security, it has features like real-time data processing and multi-model data support, + providing businesses a robust solution to efficiently manage and analyze large volumes of data while ensuring security and compliance. +
+ <%= render "connectors/_promo.html" %> +
+ The Oracle connector
+ is available on Azimutt GitHub. Feel free to have a look and even suggest improvements.
+ The heart of its behavior is the getSchema
in
+ src/oracle.ts file.
+ It gets the Oracle schema.
+
Not only it gets the database schema, but it also infers:
+Using the Oracle connector in Azimutt is really easy:
+npx azimutt@latest gateway
)oracle:thin:user/pass@localhost:1521/FREE
)Here are more details about how Azimutt secure your data and especially your database url.
+If you miss an Oracle database, you can launch a free one with Docker:
+docker run --name oracle_sample -p 1521:1521 -e ORACLE_PWD=oracle container-registry.oracle.com/database/free:23.4.0.0-lite
+ You can use this sample script to populate it.
+
+ Here is what you can do with Azimutt:
+
+
+ PostgreSQL is a powerful, open-source relational database + that is widely used for its reliability, scalability, and advanced features. + Known for being highly SQL-compliant, it supports both structured and unstructured data, making it ideal for a wide range of applications, from web development to data analytics. + Its robust architecture allows developers to extend its functionality, plus, its active community ensures continuous improvement and support. +
+ <%= render "connectors/_promo.html" %> +The PostgreSQL connector is full-featured and can do everything available in Azimutt 😎
+
+ Azimutt being Open Source, you can find the
+ PostgreSQL connector
+ on GitHub if you are interested in looking what it does or improving it.
+ The most interesting part being the getSchema
function in
+ src/postgres.ts.
+
In addition to PostgreSQL schema extraction it makes inference for:
+The PostgreSQL connector is baked into the Gateway, to use it you just have to:
+npx azimutt@latest gateway
)postgresql://user:pass@localhost/your_db
)Here are more details about how Azimutt secure your data and especially your database url.
+If you don't have a PostgreSQL database right away, you can use Docker to create one with:
+docker run --name postgres_sample -p 5433:5432 -e POSTGRES_PASSWORD=postgres postgres:latest
+ And use this sample script to populate it.
+
+ Here is what you can do with Azimutt:
+
+
+ Snowflake is a cloud-native data platform built for data warehousing, analytics, and seamless data sharing. + Unlike traditional databases, Snowflake is designed to take full advantage of cloud infrastructure, offering scalability, flexibility, and ease of use. + Snowflake’s unique architecture separates storage from compute, allowing users to scale resources independently for optimal performance and cost efficiency. +
+ <%= render "connectors/_promo.html" %> +
+ Azimutt is full Open Source, you can check the Snowflake connector
+ on GitHub, if you want to have a look, and even suggest improvements.
+ The part you will be interested in is the getSchema
function in
+ src/snowflake.ts.
+
The Snowflake connector is baked in the Azimutt Gateway, to use it, just:
+npx azimutt@latest gateway
)snowflake://user:pass@your_account.snowflakecomputing.com?db=your_db
)Here are more details about how Azimutt secure your data and especially your database url.
+
+ Here is an example of what you can achieve with Azimutt:
+
+
+ SQL Server is a powerful, + enterprise-level relational database developed by Microsoft, used for handling large-scale business applications and data analytics. + Known for its seamless integration with other Microsoft tools, such as Azure, Excel, and Power BI, + SQL Server provides a robust solution for both transactional processing and business intelligence. + It offers high availability, built-in security features, and advanced analytics capabilities. +
+ <%= render "connectors/_promo.html" %> +
+ You can access the SQL Server connector
+ on GitHub, have a look and even suggest improvements.
+ The most interesting part is the getSchema
function in
+ src/sqlserver.ts
+ that fetch the SQL Server schema and make it accessible to Azimutt.
+
Moreover, it also infers JSON column schema when found columns with JSON inside.
+ + <%= render "docs/_h3.html", title: "How to use it" %> +The SQL Server connector is already included in the Gateway, you can use it simply by:
+npx azimutt@latest gateway
)sqlserver://user:pass@localhost:1433/your_db
or Server=localhost,1433;User Id=user;Password=pass;Database=your_db
)Here are more details about how Azimutt secure your data and especially your database url.
+If you don't have a SQL Server database available, you can create one with Docker:
+docker run --name mssql_sample -p 1433:1433 -e ACCEPT_EULA=Y -e MSSQL_SA_PASSWORD=azimutt_42 -e MSSQL_PID=Evaluation mcr.microsoft.com/mssql/server:2022-latest
+ And use this sample script to populate it.
+
+ Here is what you can do with Azimutt:
+
+
Work In Progress 😅
+<% end %> + +<%= render "docs/_footer.html", conn: @conn, page: @page, prev: @prev, next: @next %> diff --git a/backend/lib/azimutt_web/templates/website/docs/infer-relations.html.heex b/backend/lib/azimutt_web/templates/website/docs/infer-relations.html.heex new file mode 100644 index 000000000..b6b5fc569 --- /dev/null +++ b/backend/lib/azimutt_web/templates/website/docs/infer-relations.html.heex @@ -0,0 +1,74 @@ +<%= render "docs/_header.html", conn: @conn, page: @page %> + +<%= doc_prose do %> ++ Databases relations are not always defined in the database schema, + sometimes because the database engine doesn't support them (MongoDB, Couchbase...), + sometimes because the developers decided or forgot to create them (performance?). +
++ Still they are very important to understand the data model and help a lot for the database exploration, + so you can add them on Azimutt (using AML), even if they are not enforced by your database. +
++ To help with that, Azimutt will do its best to identify them and suggest them. + But it will never add they on its own, as false-positive may be very misleading. + Here is how it does: +
+ + <%= render "docs/_h2.html", title: "Naming conventions" %> +
+ It's quite common that attributes storing a reference to another entity reference the entity primary key (often id
) and are named with the entity name and attribute name.
+ For example, a project_id
attribute will likely reference the id
attribute of the projects
entity.
+
+ Azimutt is smart enough to handle different naming styles (camel case, snake case...), pluralization and even added prefixes/suffixes.
+ So attributes like previous_project_id
and ProjectIds
+ will match entities named projects
, Project
or even legacy_projects
having attributes like id
or project_id
.
+ Of course, attributes like author
, owner
or admin
will hardly be identified.
+ Azimutt has a special case for attributes ending by by
, like created_by
, it will look for tables like users
or accounts
.
+ Here is the
+ code
+ and tests
+ for the Explorer (Elm), and the
+ code
+ and test
+ for the Analyzer (TypeScript).
+
Let us know if you have a naming convention not well-supported, we will be happy to add it. You can even submit a PR 😉 (tests are the most important part).
+ + <%= render "docs/_h2.html", title: "Join clauses" %> + <%= doc_warning do %> + Not implemented yet! + <% end %> ++ As naming conventions are not always followed, another way to find relations is by inspecting database queries. + In the case of relational databases, a JOIN clause may hint for a relation. + That's why accessing historical queries is important but Azimutt could also offer you to import the queries you could have gathered by any means. +
+Let us know if this is crucial for you, so we can prioritize it over other features.
+ + <%= render "docs/_h2.html", title: "Unique ids" %> + <%= doc_warning do %> + Not implemented yet! + <% end %> +
+ For databases without joins and which don't follow clear naming conventions, like MongoDB or Couchbase, documenting relations is still a big issue.
+ After several discussions, it should be possible to infer relations using unique ids (like UUIDs or MongoDB ObjectId).
+ First, we have to identify these columns (database type or pattern in most common values), then we can look for them in all tables with a single attribute primary key having the same type.
+ Then, if there is a match, thanks to unique ids, it's very likely a relation.
+
+ For example, if the author
column contains UUIDs, we can look in all other tables if a specific id is found in their primary key.
+ When it's found, for example in the users
entity, this relation will be suggestion.
+ As this can be heavy for large databases, this process will be launched on demand and for specific fields.
+
What do you think about it? Will it help you? Let us know, so we can prioritize it over other features.
+ ++ If you have any other idea to automatically identify relations, especially on schemaless environments, + let us know, and we will happily evaluate and implement them on usage. +
+<% end %> + +<%= render "docs/_footer.html", conn: @conn, page: @page, prev: @prev, next: @next %> diff --git a/backend/lib/azimutt_web/templates/website/docs/internals.html.heex b/backend/lib/azimutt_web/templates/website/docs/internals.html.heex new file mode 100644 index 000000000..72d97a144 --- /dev/null +++ b/backend/lib/azimutt_web/templates/website/docs/internals.html.heex @@ -0,0 +1,9 @@ +<%= render "docs/_header.html", conn: @conn, page: @page %> + +<%= doc_prose do %> ++ Here is some explanation of how Azimutt works on specific topics: +
+<% end %> + +<%= render "docs/_footer.html", conn: @conn, page: @page, prev: @prev, next: @next %> diff --git a/backend/lib/azimutt_web/views/layout_view.ex b/backend/lib/azimutt_web/views/layout_view.ex index 32c4a80dc..87cf30655 100644 --- a/backend/lib/azimutt_web/views/layout_view.ex +++ b/backend/lib/azimutt_web/views/layout_view.ex @@ -37,7 +37,7 @@ defmodule AzimuttWeb.LayoutView do # ratio: 2:1, ex: 1200x600 def og_image(%{assigns: %{seo: %{image: image}}}), do: image - def og_image(conn), do: Routes.static_url(conn, "/images/open-graph.png") + def og_image(conn), do: Routes.static_url(conn, "/images/og/azimutt.jpg") def twitter_card(%{assigns: %{seo: %{card: card}}}), do: card def twitter_card(_conn), do: "summary_large_image" diff --git a/backend/lib/azimutt_web/views/website_view.ex b/backend/lib/azimutt_web/views/website_view.ex index 04b271746..e8c75854a 100644 --- a/backend/lib/azimutt_web/views/website_view.ex +++ b/backend/lib/azimutt_web/views/website_view.ex @@ -29,6 +29,8 @@ defmodule AzimuttWeb.WebsiteView do def doc_info(assigns \\ %{}, do: block), do: render_template("docs/_info.html", assigns, block) def doc_warning(assigns \\ %{}, do: block), do: render_template("docs/_warning.html", assigns, block) + def connector_article(assigns \\ %{}, do: block), do: render_template("connectors/_article.html", assigns, block) + defp render_template(template, assigns, block) do assigns = assigns |> Map.new() |> Map.put(:inner_content, block) AzimuttWeb.WebsiteView.render(template, assigns) diff --git a/backend/priv/static/images/connectors/azimutt-diagram.png b/backend/priv/static/images/connectors/azimutt-diagram.png new file mode 100644 index 000000000..8e57ab3ed Binary files /dev/null and b/backend/priv/static/images/connectors/azimutt-diagram.png differ diff --git a/backend/priv/static/images/connectors/azimutt-project-new.png b/backend/priv/static/images/connectors/azimutt-project-new.png new file mode 100644 index 000000000..2611b90e8 Binary files /dev/null and b/backend/priv/static/images/connectors/azimutt-project-new.png differ diff --git a/backend/priv/static/images/connectors/bigquery-banner.png b/backend/priv/static/images/connectors/bigquery-banner.png new file mode 100644 index 000000000..b5916046c Binary files /dev/null and b/backend/priv/static/images/connectors/bigquery-banner.png differ diff --git a/backend/priv/static/images/connectors/bigquery-icon.svg b/backend/priv/static/images/connectors/bigquery-icon.svg new file mode 100644 index 000000000..7f3d97fb9 --- /dev/null +++ b/backend/priv/static/images/connectors/bigquery-icon.svg @@ -0,0 +1,9 @@ + +