Skip to content
Open
Show file tree
Hide file tree
Changes from 90 commits
Commits
Show all changes
242 commits
Select commit Hold shift + click to select a range
e61dd3e
pipeline extension
sundarshankar89 Mar 21, 2025
bfa8490
Init commit
sundarshankar89 Mar 24, 2025
65bd96f
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Apr 1, 2025
e578178
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Apr 2, 2025
73b36c2
Merge branch 'main' into feature/pipeline_extensions
sundarshankar89 Apr 3, 2025
8e95927
Init commit
sundarshankar89 Mar 24, 2025
cabf93a
Merge remote-tracking branch 'origin/feature/synapse_data_collector' …
sundarshankar89 Apr 3, 2025
ec33f67
Merge branch 'feature/pipeline_extensions' into feature/synapse_data_…
sundarshankar89 Apr 3, 2025
440cc70
Merge branch 'main' into feature/pipeline_extensions
sundarshankar89 Apr 9, 2025
d6fcabb
Merge remote-tracking branch 'origin/feature/synapse_data_collector' …
sundarshankar89 Apr 10, 2025
2988569
fmt fixes
sundarshankar89 Apr 10, 2025
f0c87d6
fmt fixes
sundarshankar89 Apr 10, 2025
0764e01
refactor
sundarshankar89 Apr 10, 2025
d188705
Added tests for dependency
sundarshankar89 Apr 14, 2025
68b0f83
Added tests for dependency
sundarshankar89 Apr 14, 2025
5bd9408
Added Failure tests
sundarshankar89 Apr 14, 2025
5899a3c
installer as venv
sundarshankar89 Apr 15, 2025
3cdbf7e
fmt fixes
sundarshankar89 Apr 15, 2025
822da6b
Merge branch 'feature/pipeline_extensions' into feature/synapse_data_…
sundarshankar89 Apr 15, 2025
299d293
fmt fixes
sundarshankar89 Apr 15, 2025
9186b89
Added Python Script
sundarshankar89 Apr 16, 2025
18f9b42
Added Python Script
sundarshankar89 Apr 16, 2025
877a239
Fmt fixes
sundarshankar89 Apr 17, 2025
492a12f
Merge branch 'main' into feature/pipeline_extensions
sundarshankar89 Apr 22, 2025
d0ca03f
Merge branch 'feature/pipeline_extensions' into feature/synapse_data_…
sundarshankar89 Apr 22, 2025
603aa0f
intermediate commit
sundarshankar89 Apr 29, 2025
204c639
init commit
sundarshankar89 Apr 29, 2025
1af4de9
Merge branch 'main' into feature/synapse-cred-configuration
sundarshankar89 Apr 29, 2025
75fbfb5
Merge branch 'main' into feature/pipeline_extensions
sundarshankar89 Apr 29, 2025
de87a2a
fmt fixes
sundarshankar89 Apr 29, 2025
3288543
fix tests
sundarshankar89 Apr 29, 2025
2768763
fixed silent bug during insall
sundarshankar89 Apr 30, 2025
b5bf390
Merge branch 'feature/synapse-cred-configuration' into feature/pipeli…
sundarshankar89 Apr 30, 2025
1d9673f
Merge branch 'feature/pipeline_extensions' into feature/synapse_data_…
sundarshankar89 Apr 30, 2025
fb66dd3
Merge remote-tracking branch 'origin/feature/synapse_data_collector' …
sundarshankar89 Apr 30, 2025
be954be
Merge branch 'main' into feature/synapse-cred-configuration
sundarshankar89 May 5, 2025
92f3d68
Merge branch 'feature/synapse-cred-configuration' into feature/pipeli…
sundarshankar89 May 6, 2025
aea2178
addressed review comments
sundarshankar89 May 6, 2025
0d6a047
Merge remote-tracking branch 'origin/feature/pipeline_extensions' int…
sundarshankar89 May 6, 2025
c528807
fixed test
sundarshankar89 May 7, 2025
eabdf29
Merge branch 'feature/pipeline_extensions' into feature/synapse_data_…
sundarshankar89 May 7, 2025
9308475
Merge remote-tracking branch 'origin/feature/synapse_data_collector' …
sundarshankar89 May 7, 2025
c1a5913
Merge branch 'main' into feature/synapse-cred-configuration
sundarshankar89 May 7, 2025
79100e4
Merge branch 'feature/synapse-cred-configuration' into feature/pipeli…
sundarshankar89 May 7, 2025
35aa15d
Merge branch 'feature/pipeline_extensions' into feature/synapse_data_…
sundarshankar89 May 7, 2025
7458e3b
Merge remote-tracking branch 'origin/feature/synapse_data_collector' …
sundarshankar89 May 7, 2025
f4c63b9
Merge branch 'main' into feature/synapse-cred-configuration
sundarshankar89 May 7, 2025
8912f1f
Merge branch 'feature/synapse-cred-configuration' into feature/pipeli…
sundarshankar89 May 7, 2025
af3ffdc
Merge branch 'main' into feature/synapse-cred-configuration
sundarshankar89 May 10, 2025
b192d10
Merge branch 'feature/synapse-cred-configuration' into feature/pipeli…
sundarshankar89 May 10, 2025
8e6bffa
Merge branch 'feature/pipeline_extensions' into feature/synapse_data_…
sundarshankar89 May 10, 2025
f053e7d
Merge remote-tracking branch 'origin/feature/synapse_data_collector' …
sundarshankar89 May 10, 2025
ab4ae41
intermediate
sundarshankar89 May 12, 2025
b3a4cdd
Merge branch 'main' into feature/synapse-cred-configuration
sundarshankar89 May 12, 2025
02a0a56
Merge branch 'feature/synapse-cred-configuration' into feature/pipeli…
sundarshankar89 May 12, 2025
cc5aea8
Merge branch 'feature/pipeline_extensions' into feature/synapse_data_…
sundarshankar89 May 12, 2025
f58c9c9
Merge remote-tracking branch 'origin/feature/synapse_data_collector' …
sundarshankar89 May 12, 2025
d54589b
Merge branch 'main' into feature/synapse-cred-configuration
sundarshankar89 May 13, 2025
72ebe58
Merge branch 'feature/synapse-cred-configuration' into feature/pipeli…
sundarshankar89 May 13, 2025
699d317
Merge branch 'feature/pipeline_extensions' into feature/synapse_data_…
sundarshankar89 May 13, 2025
bdb0052
Merge remote-tracking branch 'origin/feature/synapse_data_collector' …
sundarshankar89 May 13, 2025
8bf4023
fixed workspace_extract.py
sundarshankar89 May 20, 2025
7ea7a3c
intermediate commit
sundarshankar89 May 20, 2025
4782c14
intermediate commit
sundarshankar89 May 21, 2025
37caa5f
intermediate commit
sundarshankar89 May 21, 2025
e91a6d9
intermediate commit
sundarshankar89 May 21, 2025
37e3b6e
intermediate commit
sundarshankar89 May 21, 2025
a74cf51
Merge branch 'main' into feature/synapse-cred-configuration
sundarshankar89 May 28, 2025
a0324c5
Merge branch 'feature/synapse-cred-configuration' into feature/pipeli…
sundarshankar89 May 28, 2025
0e7af90
Merge branch 'feature/pipeline_extensions' into feature/synapse_data_…
sundarshankar89 May 28, 2025
2af79ca
Merge branch 'main' into feature/synapse-cred-configuration
sundarshankar89 May 30, 2025
8665b3e
Merge branch 'feature/synapse-cred-configuration' into feature/pipeli…
sundarshankar89 May 30, 2025
849f67e
Merge branch 'feature/pipeline_extensions' into feature/synapse_data_…
sundarshankar89 May 30, 2025
e541c22
fmt fixes
sundarshankar89 May 30, 2025
f642683
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Jun 3, 2025
05d20e3
fmt fixes
sundarshankar89 Jun 3, 2025
40fc5ec
fix test
sundarshankar89 Jun 3, 2025
e153a91
Initial commit with entry point
sundarshankar89 Jun 3, 2025
dab0fbf
fmt fixes
sundarshankar89 Jun 3, 2025
ba305ba
fmt fixes
sundarshankar89 Jun 3, 2025
76d2e1f
using DEVNULL for dependency installer
sundarshankar89 Jun 3, 2025
ef09e51
logger and fmt fixes
sundarshankar89 Jun 3, 2025
414574f
logger and fmt fixes
sundarshankar89 Jun 3, 2025
0dbe824
added driver
sundarshankar89 Jun 4, 2025
480a590
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Jun 4, 2025
d90cc7b
synapse extract
sundarshankar89 Jun 4, 2025
b23ad5f
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Jun 4, 2025
1fbd1b2
synapse extract
sundarshankar89 Jun 4, 2025
1359234
synapse extract
sundarshankar89 Jun 4, 2025
ebce184
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Jun 4, 2025
094e442
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Jun 7, 2025
1991d8f
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Jun 7, 2025
01f7850
Merge remote-tracking branch 'origin/main' into feature/synapse_data_…
sundarshankar89 Jun 8, 2025
7900fba
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Jun 8, 2025
c0e7bf8
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Jul 18, 2025
9bd424f
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Jul 18, 2025
a4c9491
intermediate format fixes
sundarshankar89 Jul 18, 2025
5e2709b
intermediate format fixes
sundarshankar89 Jul 18, 2025
c43fd7f
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Jul 18, 2025
3c76d7f
fmt fixes
sundarshankar89 Jul 18, 2025
e271bc3
fmt fixes
sundarshankar89 Jul 18, 2025
570384b
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Jul 18, 2025
dff71af
fmt fixes
sundarshankar89 Jul 18, 2025
6508981
Update pyproject.toml
sundarshankar89 Jul 21, 2025
f5216c5
Merge branch 'main' into chore/fmt-fixes
sundarshankar89 Jul 21, 2025
4951a22
fmt fixes
sundarshankar89 Jul 21, 2025
c0b98ae
Merge branch 'chore/fmt-fixes' into feature/synapse_data_collector
sundarshankar89 Jul 21, 2025
08503d9
fmt fixes
sundarshankar89 Jul 21, 2025
dfa0e85
save db
sundarshankar89 Jul 21, 2025
9151f69
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Jul 21, 2025
a2f5289
review comments
sundarshankar89 Jul 21, 2025
bbc9775
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Jul 22, 2025
81ce857
merge main
sundarshankar89 Jul 22, 2025
e44af22
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Jul 22, 2025
1d0375c
Fixes review comments
sundarshankar89 Jul 22, 2025
1bf1106
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Jul 28, 2025
ffdb9a8
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Jul 28, 2025
b00ff9e
fixing review comments
sundarshankar89 Jul 29, 2025
b5120b3
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Jul 29, 2025
5682bfe
Modifed Dedicated Pool Extraction
sundarshankar89 Jul 30, 2025
3e874d8
fixed failing tests
sundarshankar89 Jul 30, 2025
a7f585c
Modified Serverless Extract
sundarshankar89 Aug 4, 2025
741eb63
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Aug 4, 2025
228ed24
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Aug 4, 2025
dec2b71
Fixes failing tests
sundarshankar89 Aug 4, 2025
37fd059
fix review comments
sundarshankar89 Aug 4, 2025
01b0868
merge changes
sundarshankar89 Aug 4, 2025
dfc2d87
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Aug 4, 2025
3cc3c83
fixed review comments
sundarshankar89 Aug 4, 2025
d7ee063
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Aug 4, 2025
562e3a6
modified file names
sundarshankar89 Aug 5, 2025
29cdca6
modified table names
sundarshankar89 Aug 5, 2025
b3f531b
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Aug 5, 2025
0130766
fixes logging
sundarshankar89 Aug 5, 2025
89f908e
fixed logging
sundarshankar89 Aug 5, 2025
bc9239d
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Aug 5, 2025
d38abfc
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Aug 5, 2025
2678720
refactored the code
sundarshankar89 Aug 6, 2025
9219f0f
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Aug 6, 2025
d0960b7
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Aug 6, 2025
d7c9196
fixed failing tests
sundarshankar89 Aug 6, 2025
10077f3
fixed review comments
sundarshankar89 Aug 6, 2025
67545d6
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Aug 7, 2025
c36bb95
ammended windows support
sundarshankar89 Aug 11, 2025
5f13f0f
amended windows support
sundarshankar89 Aug 11, 2025
46dcee6
amended windows support
sundarshankar89 Aug 11, 2025
153f224
amended windows support
sundarshankar89 Aug 11, 2025
7cf7c5c
amended windows support
sundarshankar89 Aug 11, 2025
b969785
amended windows support
sundarshankar89 Aug 11, 2025
7b0acd5
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Aug 11, 2025
8f4405c
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Aug 11, 2025
8a745dc
amended windows support
sundarshankar89 Aug 11, 2025
400b586
amended windows support
sundarshankar89 Aug 11, 2025
bfe2c37
amended windows support
sundarshankar89 Aug 11, 2025
33a42c8
added additional logs and handled empty list
sundarshankar89 Aug 18, 2025
abbe23b
added additional logs and handled empty list
sundarshankar89 Aug 18, 2025
34b6d9b
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Sep 2, 2025
c095e8f
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Sep 2, 2025
9e56b8e
Initial Commit of configure assessment
sundarshankar89 Sep 2, 2025
a230739
Fixed unnecessary exclude lists
sundarshankar89 Sep 2, 2025
be9b358
Merged UX Recommendation
sundarshankar89 Sep 2, 2025
dcf8ee9
Added more comments
sundarshankar89 Sep 2, 2025
3dedb84
updated to use passowrd prompt for terminal echo off
sundarshankar89 Sep 3, 2025
ee2a99e
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Sep 3, 2025
a045625
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Sep 3, 2025
aeb2e00
Merge branch 'main' into feature/configure-assessment
sundarshankar89 Sep 3, 2025
6c0a539
updated to use auth_type and add additional key string during authent…
sundarshankar89 Sep 3, 2025
028fadf
fix the string compare "ad_passwd_authentication"
sundarshankar89 Sep 3, 2025
18ff36c
Merge branch 'main' into feature/configure-assessment
gueniai Sep 3, 2025
177e69b
updated to reflect main
sundarshankar89 Sep 8, 2025
26fc1ed
Merge branch 'main' into feature/configure-assessment
sundarshankar89 Sep 8, 2025
eee4c24
Updated with custom gen ai
sundarshankar89 Sep 8, 2025
ffc33aa
Merge branch 'main' into feature/configure-assessment
sundarshankar89 Sep 8, 2025
9853440
Merge branch 'main' into feature/synapse_data_collector
sundarshankar89 Sep 15, 2025
4c386bd
Merge branch 'feature/synapse_data_collector' into feature/profiler_e…
sundarshankar89 Sep 15, 2025
ac77f81
Merge branch 'main' into feature/configure-assessment
sundarshankar89 Sep 15, 2025
f916a99
fmt fixes
sundarshankar89 Sep 15, 2025
afd8272
Scripts for Synapse Profiling re-imagined from existing profiler
sundarshankar89 Sep 15, 2025
75c5b5b
Introduced Profiler Skeleton
sundarshankar89 Sep 15, 2025
8a631ed
Merge branch 'feature/configure-assessment' into feature/add_profiler…
sundarshankar89 Sep 15, 2025
26fd78a
Addressed review comments
sundarshankar89 Sep 29, 2025
11e38d3
Merge branch 'main' into feature/configure-assessment
sundarshankar89 Sep 29, 2025
e1e23f2
Merge branch 'main' into feature/synapse_profiler_scripts
sundarshankar89 Sep 29, 2025
baef44e
Merge branch 'feature/configure-assessment' into feature/add_profiler…
sundarshankar89 Sep 29, 2025
9111c31
Addressed review comments
sundarshankar89 Sep 29, 2025
6d0de29
Merge branch 'main' into feature/configure-assessment
sundarshankar89 Oct 6, 2025
a604e0b
Merge branch 'main' into feature/synapse_profiler_scripts
sundarshankar89 Oct 6, 2025
ec2c1e4
Merge branch 'feature/configure-assessment' into feature/add_profiler…
sundarshankar89 Oct 6, 2025
599cbf5
fixed review comment
sundarshankar89 Oct 6, 2025
baf0eb3
fmt fixes
sundarshankar89 Oct 6, 2025
da0c85c
update pyproject.toml
sundarshankar89 Oct 6, 2025
e8f59a4
bump blueprint
sundarshankar89 Oct 6, 2025
b8a6c70
bump blueprint and fmt fixes
sundarshankar89 Oct 6, 2025
ae841e7
addressing review comments
sundarshankar89 Oct 6, 2025
354a461
Merge branch 'bump/blueprint-0.11.4' into feature/configure-assessment
sundarshankar89 Oct 6, 2025
d56958c
Merge branch 'feature/configure-assessment' into feature/add_profiler…
sundarshankar89 Oct 6, 2025
9925b44
Merge branch 'main' into feature/synapse_profiler_scripts
sundarshankar89 Oct 6, 2025
d305754
Merge branch 'main' into feature/add_profiler_skeleton
sundarshankar89 Oct 7, 2025
eac40a3
Merge branch 'main' into feature/synapse_profiler_scripts
sundarshankar89 Oct 7, 2025
c79c01a
fixing review comments
sundarshankar89 Oct 7, 2025
2195df6
fixing review comments-2
sundarshankar89 Oct 7, 2025
ccba2df
fixing review comments-3
sundarshankar89 Oct 7, 2025
9a9e909
fixing review comments-3
sundarshankar89 Oct 7, 2025
635b84a
fixed failing tests
sundarshankar89 Oct 7, 2025
c23cb0e
Merge branch 'main' into feature/synapse_profiler_scripts
sundarshankar89 Oct 7, 2025
53b3fa9
Merge branch 'main' into feature/add_profiler_skeleton
sundarshankar89 Oct 7, 2025
be777f6
Merge branch 'feature/synapse_profiler_scripts' into feature/add_prof…
sundarshankar89 Oct 7, 2025
4763885
fix a typo
sundarshankar89 Oct 7, 2025
6f8997c
Merge branch 'feature/synapse_profiler_scripts' into feature/add_prof…
sundarshankar89 Oct 7, 2025
4992e6b
added close connection
sundarshankar89 Oct 7, 2025
1a5288f
Merge branch 'feature/synapse_profiler_scripts' into feature/add_prof…
sundarshankar89 Oct 7, 2025
9df6d0b
fixes review comments
sundarshankar89 Oct 8, 2025
9e55fe8
fixes review comments
sundarshankar89 Oct 8, 2025
393dbe9
Merge branch 'main' into feature/synapse_profiler_scripts
sundarshankar89 Oct 9, 2025
11da6d9
Merge branch 'main' into feature/synapse_profiler_scripts
sundarshankar89 Oct 9, 2025
3dc6f88
added context manager
sundarshankar89 Oct 9, 2025
6085fca
Merge branch 'feature/synapse_profiler_scripts' into feature/add_prof…
sundarshankar89 Oct 9, 2025
cb38bf5
added connection close
sundarshankar89 Oct 9, 2025
13417bf
Merge branch 'feature/synapse_profiler_scripts' into feature/add_prof…
sundarshankar89 Oct 9, 2025
53429c4
Merge branch 'main' into feature/synapse_profiler_scripts
sundarshankar89 Oct 10, 2025
b660e4a
addressed merge conflicts
sundarshankar89 Oct 10, 2025
3dd7455
Merge branch 'feature/synapse_profiler_scripts' into feature/add_prof…
sundarshankar89 Oct 10, 2025
5dbb664
removed print
sundarshankar89 Oct 10, 2025
b262013
Merge branch 'feature/synapse_profiler_scripts' into feature/add_prof…
sundarshankar89 Oct 10, 2025
6f547d2
Merge branch 'feature/add_profiler_skeleton' into feature/profiler_en…
sundarshankar89 Oct 13, 2025
fc076cd
fmt fixes
sundarshankar89 Oct 13, 2025
fe50a8b
Merge branch 'main' into feature/profiler_entry_point
sundarshankar89 Oct 14, 2025
a08f4ab
added telemetry
sundarshankar89 Oct 14, 2025
3fb3165
made source-tech optional param
sundarshankar89 Oct 16, 2025
773cbba
made source-tech optional param
sundarshankar89 Oct 16, 2025
5643750
made source-tech optional param
sundarshankar89 Oct 16, 2025
1c40b90
made source-tech optional param
sundarshankar89 Oct 16, 2025
451caf2
made source-tech optional param
sundarshankar89 Oct 16, 2025
77cc4a7
Fixed Copilot review comments
sundarshankar89 Oct 16, 2025
e2c0819
Fixed Copilot review comments
sundarshankar89 Oct 16, 2025
a5630cd
Merge branch 'main' into feature/profiler_entry_point
sundarshankar89 Oct 22, 2025
9847822
Add CLI command for publishing 'local' dashboards.
goodwillpunning Oct 27, 2025
a3d03d6
Merge branch 'main' into feature/profiler_entry_point
sundarshankar89 Oct 27, 2025
0e659b0
Merge branch 'main' into feature/profiler_entry_point
sundarshankar89 Oct 28, 2025
37029bb
removed local dashboard
sundarshankar89 Oct 28, 2025
fca09b9
Merge branch 'main' into feature/profiler_entry_point
sundarshankar89 Oct 29, 2025
e3f7215
Merge branch 'main' into feature/profiler_entry_point
gueniai Nov 6, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion labs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,11 @@ commands:
- name: debug-me
description: "[INTERNAL] Debug SDK connectivity"
- name: install-assessment
description: "Install Assessment"
description: "[EXPERIMENTAL] Install Assessment"
- name: install-transpile
description: "Install Transpile"
- name: install-reconcile
description: "Install Reconcile"
- name: profile
description: "[EXPERIMENTAL] Profile the database"

7 changes: 4 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ asyncio_mode = "auto"
asyncio_default_fixture_loop_scope="function"

[tool.mypy]
exclude = ["tests/resources/.*"]
exclude = ["tests/resources/.*", "src/databricks/labs/remorph/resources/assessments/*"]

[tool.black]
target-version = ["py310"]
Expand Down Expand Up @@ -133,7 +133,8 @@ lint.ignore = [
"UP038", # Use `X | Y` in `isinstance` call instead of `(X, Y)`
]
extend-exclude = [
"notebooks/*.py"
"notebooks/*.py",
"src/databricks/labs/remorph/resources/assessments/*",
]


Expand Down Expand Up @@ -190,7 +191,7 @@ fail-under = 10.0
ignore-patterns = ["^\\.#"]

# Ignore files under tests/resources
ignore-paths = ["tests/resources"]
ignore-paths = ["tests/resources", "src/databricks/labs/remorph/resources/assessments/*" ]

# List of module names for which member attributes should not be checked (useful
# for modules/projects where namespaces are manipulated during runtime and thus
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,9 @@ def _configure_credentials(self) -> str:
"sql_user": self.prompts.question("Enter SQL user"),
"sql_password": self.prompts.question("Enter SQL password"),
"tz_info": self.prompts.question("Enter timezone (e.g. America/New_York)", default="UTC"),
"driver": self.prompts.question(
"Enter the ODBC driver installed locally", default="ODBC Driver 18 for SQL Server"
),
}

# Azure API Access Settings
Expand Down
105 changes: 62 additions & 43 deletions src/databricks/labs/remorph/assessments/pipeline.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from pathlib import Path
from subprocess import run, CalledProcessError
from subprocess import run, CalledProcessError, Popen, PIPE, STDOUT, DEVNULL
from dataclasses import dataclass
from enum import Enum

Expand Down Expand Up @@ -35,15 +35,17 @@ class StepExecutionResult:


class PipelineClass:
def __init__(self, config: PipelineConfig, executor: DatabaseManager):
def __init__(self, config: PipelineConfig, executor: DatabaseManager | None):
self.config = config
self.executor = executor
self.db_path_prefix = Path(config.extract_folder)
self._create_dir(self.db_path_prefix)

def execute(self) -> list[StepExecutionResult]:
logging.info(f"Pipeline initialized with config: {self.config.name}, version: {self.config.version}")
execution_results: list[StepExecutionResult] = []
for step in self.config.steps:
logging.info(f"Executing step: {step.name}")
result = self._process_step(step)
execution_results.append(result)
logging.info(f"Step '{step.name}' completed with status: {result.status}")
Expand All @@ -55,7 +57,6 @@ def _process_step(self, step: Step) -> StepExecutionResult:
if step.flag != "active":
logging.info(f"Skipping step: {step.name} as it is not active")
return StepExecutionResult(step_name=step.name, status=StepExecutionStatus.SKIPPED)

logging.debug(f"Executing step: {step.name}")
try:
status = self._execute_step(step)
Expand All @@ -80,6 +81,10 @@ def _execute_sql_step(self, step: Step):
with open(step.extract_source, 'r', encoding='utf-8') as file:
query = file.read()

if self.executor is None:
logging.error("DatabaseManager executor is not set.")
raise RuntimeError("DatabaseManager executor is not set.")

# Execute the query using the database manager
logging.info(f"Executing query: {query}")
try:
Expand All @@ -104,51 +109,65 @@ def _execute_python_step(self, step: Step):
venv_python = venv_dir / "bin" / "python"
venv_pip = venv_dir / "bin" / "pip"

logger.info(f"Creating a virtual environment for Python script execution: ${venv_dir}")
# Install dependencies in the virtual environment
logger.info(
f"Creating a virtual environment for Python script execution: ${venv_dir} for step: {step.name}"
)
if step.dependencies:
logging.info(f"Installing dependencies: {', '.join(step.dependencies)}")
try:
logging.debug("Upgrading local pip")
run([str(venv_pip), "install", "--upgrade", "pip"], check=True, capture_output=True, text=True)
self._install_dependencies(venv_pip, step.dependencies)

run([str(venv_pip), "install", *step.dependencies], check=True, capture_output=True, text=True)
except CalledProcessError as e:
logging.error(f"Failed to install dependencies: {e.stderr}")
raise RuntimeError(f"Failed to install dependencies: {e.stderr}") from e
self._run_python_script(venv_python, step.extract_source, db_path, credential_config)

@staticmethod
def _install_dependencies(venv_pip, dependencies):
logging.info(f"Installing dependencies: {', '.join(dependencies)}")
try:
logging.debug("Upgrading local pip")
run([str(venv_pip), "install", "--upgrade", "pip"], check=True, stdout=DEVNULL, stderr=DEVNULL)
run([str(venv_pip), "install", *dependencies], check=True, stdout=DEVNULL, stderr=DEVNULL)
except CalledProcessError as e:
logging.error(f"Failed to install dependencies: {e.stderr}")
raise RuntimeError(f"Failed to install dependencies: {e.stderr}") from e

# Execute the Python script using the virtual environment's Python interpreter
@staticmethod
def _run_python_script(venv_python, script_path, db_path, credential_config):
output_lines = []
try:
with Popen(
[
str(venv_python),
str(script_path),
"--db-path",
db_path,
"--credential-config-path",
credential_config,
],
stdout=PIPE,
stderr=STDOUT,
text=True,
bufsize=1,
) as process:
if process.stdout is not None:
for line in process.stdout:
logger.info(line.rstrip())
output_lines.append(line)
process.wait()
except Exception as e:
logging.error(f"Python script failed: {str(e)}")
raise RuntimeError(f"Script execution failed: {str(e)}") from e

if output_lines:
try:
result = run(
[
str(venv_python),
str(step.extract_source),
"--db-path",
db_path,
"--credential-config-path",
credential_config,
],
check=True,
capture_output=True,
text=True,
)

try:
output = json.loads(result.stdout)
if output["status"] == "success":
logging.info(f"Python script completed: {output['message']}")
else:
raise RuntimeError(f"Script reported error: {output['message']}")
except json.JSONDecodeError:
logging.info(f"Python script output: {result.stdout}")

except CalledProcessError as e:
error_msg = e.stderr
logging.error(f"Python script failed: {error_msg}")
raise RuntimeError(f"Script execution failed: {error_msg}") from e
output = json.loads(output_lines[-1])
if output.get("status") == "success":
logging.info(f"Python script completed: {output['message']}")
else:
raise RuntimeError(f"Script reported error: {output.get('message', 'Unknown error')}")
except json.JSONDecodeError:
logging.info("Could not parse script output as JSON.")
if process.returncode != 0:
raise RuntimeError(f"Script execution failed with exit code {process.returncode}")

def _save_to_db(self, result, step_name: str, mode: str, batch_size: int = 1000):
self._create_dir(self.db_path_prefix)
db_path = str(self.db_path_prefix / DB_NAME)

with duckdb.connect(db_path) as conn:
Expand Down Expand Up @@ -179,7 +198,7 @@ def _create_dir(dir_path: Path):
dir_path.mkdir(parents=True, exist_ok=True)

@staticmethod
def load_config_from_yaml(file_path: str) -> PipelineConfig:
def load_config_from_yaml(file_path: str | Path) -> PipelineConfig:
with open(file_path, 'r', encoding='utf-8') as file:
data = yaml.safe_load(file)
steps = [Step(**step) for step in data['steps']]
Expand Down
77 changes: 77 additions & 0 deletions src/databricks/labs/remorph/assessments/profiler.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import logging
from pathlib import Path

from databricks.labs.remorph.assessments.pipeline import PipelineClass
from databricks.labs.remorph.assessments.profiler_config import PipelineConfig
from databricks.labs.remorph.connections.database_manager import DatabaseManager
from databricks.labs.remorph.connections.credential_manager import (
create_credential_manager,
)
from databricks.labs.remorph.connections.env_getter import EnvGetter

_PLATFORM_TO_SOURCE_TECHNOLOGY = {
"Synapse": "src/databricks/labs/remorph/resources/assessments/synapse/pipeline_config.yml",
}

_CONNECTOR_REQUIRED = {
"Synapse": False,
}

PRODUCT_NAME = "remorph"
PRODUCT_PATH_PREFIX = Path(__file__).home() / ".databricks" / "labs" / PRODUCT_NAME / "lib"

logger = logging.getLogger(__name__)


class Profiler:

@classmethod
def supported_source_technologies(cls) -> list[str]:
return list(_PLATFORM_TO_SOURCE_TECHNOLOGY.keys())

@staticmethod
def path_modifier(config_file: str | Path) -> PipelineConfig:
# TODO: Make this work install during developer mode
config = PipelineClass.load_config_from_yaml(config_file)
for step in config.steps:
step.extract_source = f"{PRODUCT_PATH_PREFIX}/{step.extract_source}"
return config

def profile(self, platform: str, extractor: DatabaseManager | None = None):
config_path = _PLATFORM_TO_SOURCE_TECHNOLOGY.get(platform, None)
if not config_path:
raise ValueError(f"Unsupported platform: {platform}")
self._execute(platform, config_path, extractor)

def _setup_extractor(self, platform: str) -> DatabaseManager | None:
if not _CONNECTOR_REQUIRED[platform]:
return None
cred_manager = create_credential_manager(PRODUCT_NAME, EnvGetter())
connect_config = cred_manager.get_credentials(platform)
return DatabaseManager(platform, connect_config)

def _execute(self, platform: str, config_path: str, extractor=None):
try:
config_full_path = self._locate_config(config_path)
config = Profiler.path_modifier(config_full_path)

if extractor is None:
extractor = self._setup_extractor(platform)

results = PipelineClass(config, extractor).execute()

for result in results:
logger.info(f"Step: {result.step_name}, Status: {result.status}, Error: {result.error_message}")

except FileNotFoundError as e:
logging.error(f"Configuration file not found for source {platform}: {e}")
raise FileNotFoundError(f"Configuration file not found for source {platform}: {e}") from e
except Exception as e:
logging.error(f"Error executing pipeline for source {platform}: {e}")
raise RuntimeError(f"Pipeline execution failed for source {platform} : {e}") from e

def _locate_config(self, config_path: str) -> Path:
config_file = PRODUCT_PATH_PREFIX / config_path
if not config_file.exists():
raise FileNotFoundError(f"Configuration file not found: {config_file}")
return config_file
17 changes: 17 additions & 0 deletions src/databricks/labs/remorph/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
PROFILER_SOURCE_SYSTEM,
)

from databricks.labs.remorph.assessments.profiler import Profiler

from databricks.labs.remorph.__about__ import __version__

from databricks.labs.remorph.config import TranspileConfig
Expand Down Expand Up @@ -335,5 +337,20 @@ def analyze(w: WorkspaceClient, source_directory: str, report_file: str):
Analyzer.analyze(Path(input_folder), Path(output_file), source_tech)


@remorph.command()
def profile(w: WorkspaceClient):
"""Run the Profiler"""
with_user_agent_extra("cmd", "profiler")
ctx = ApplicationContext(w)
prompts = ctx.prompts
source_tech = prompts.choice("Select the source technology", Profiler.supported_source_technologies())
with_user_agent_extra("profiler_source_tech", make_alphanum_or_semver(source_tech))
user = ctx.current_user
logger.debug(f"User: {user}")
profiler = Profiler()
# TODO: Add extractor logic to ApplicationContext instead of creating inside the Profiler class
profiler.profile(source_tech, None)


if __name__ == "__main__":
remorph()
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ def _create_connector(db_type: str, config: dict[str, Any]) -> DatabaseConnector
"snowflake": SnowflakeConnector,
"mssql": MSSQLConnector,
"tsql": MSSQLConnector,
"synapse": MSSQLConnector,
}

connector_class = connectors.get(db_type.lower())
Expand Down
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
from pathlib import Path
import yaml
from databricks.labs.remorph.connections.credential_manager import (
CredentialManager,
LocalSecretProvider,
EnvSecretProvider,
DatabricksSecretProvider,
)

from databricks.labs.remorph.connections.env_getter import EnvGetter
from databricks.labs.remorph.resources.assessments.synapse.common.functions import get_synapse_jdbc_settings
from sqlalchemy import create_engine
from sqlalchemy.engine import Engine, Result, URL
from sqlalchemy.orm import sessionmaker
from sqlalchemy import text


def _load_credentials(path: Path) -> dict:
try:
with open(path, encoding="utf-8") as f:
return yaml.safe_load(f)
except FileNotFoundError as e:
raise FileNotFoundError(f"Credentials file not found at {path}") from e


def create_credential_manager(file_path: Path):
env_getter = EnvGetter()

secret_providers = {
'local': LocalSecretProvider(),
'env': EnvSecretProvider(env_getter),
'databricks': DatabricksSecretProvider(),
}

loader = _load_credentials(file_path)
return CredentialManager(loader, secret_providers)


def get_sqlpool_reader(config: dict, db_name: str, endpoint_key='dedicated_sql_endpoint'):
"""
:param config:
:param db_name:
:return: returns a sqlachemy reader for the given dedicated SQL Pool database
"""

query_params = {
"driver": config['driver'],
"loginTimeout": "30",
}

connection_string = URL.create(
"mssql+pyodbc",
username=config['sql_user'],
password=config['sql_password'],
host=config[endpoint_key],
port=config.get('port', 1433),
database=db_name,
query=query_params,
)
engine = create_engine(connection_string)
session = sessionmaker(bind=engine)
connection = session()

return connection
Loading