-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathmigration_planner.py
More file actions
117 lines (100 loc) · 3.98 KB
/
Copy pathmigration_planner.py
File metadata and controls
117 lines (100 loc) · 3.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# Copyright 2026 Google LLC
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# https://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Migration Estimator Tool for Microsoft Graph data estimation.
This application allows users to estimate the time and resources required to
migrate data from Microsoft 365 to Google Workspace.
DISCLAIMER
==========
The estimations provided by this tool are calculated projections intended for
preliminary planning only.
Actual migration timelines (ETAs) and batch execution may vary based on
real-time network conditions, source/target throttling policies, migration
configurations, and the volume of delta migrations.
The estimations do not constitute a performance guarantee or a binding service
level agreement (SLA).
Please note that this release is an experimental feature with limited and
evolving functionality.
Partners and/or Customers should NOT use this product for production projects
where business outcomes rely on the product functionality or timelines.
Partners and/or Customers should NOT commit hard migration timelines based on
this product.
By using this tool, you acknowledge that log files generated by this script
contain personally identifiable information and that you are solely responsible
for securing your local environment and these files.
Use of this tool is governed by the Apache 2.0 license.
Functionality Limitations
=========================
This tool only provides migration time estimates for the new Data Migration
Service with specific enhancements for large scale migrations. It does not cover
Google Workspace Migrate, or any other data migration tool.
Only Microsoft Exchange Online, Files and Chat scan and migration planning is supported.
ETAs (only supported for EO and chat) are based on the respective data types only.
This tool only provides a guesstimate, and migration timelines should in no way
be taken as guarantee or SLA.
"""
"""Selector app to choose between Exchange, Files and Chat migration planners."""
import os
import subprocess
import sys
import customtkinter as ctk
from util.constants import *
class SelectorApp(ctk.CTk):
"""Main application for workload selection."""
def __init__(self):
super().__init__()
self.title("Migration Planner Selector")
self.geometry("400x250")
self.configure(fg_color=COLOR_BACKGROUND)
ctk.CTkLabel(
self,
text="Select Workload",
font=FONT_HEADER_LARGE,
text_color=COLOR_TEXT_MAIN,
).pack(pady=(30, 20))
self.options = ["Exchange", "Chat", "Files"]
self.combobox = ctk.CTkComboBox(
self,
values=self.options,
width=250,
height=40,
corner_radius=20,
font=FONT_BODY_BOLD,
)
self.combobox.set("Exchange") # Set default
self.combobox.pack(pady=10)
self.btn_launch = ctk.CTkButton(
self,
text="Launch",
width=250,
height=40,
corner_radius=20,
font=FONT_BODY_BOLD,
fg_color=COLOR_PRIMARY,
hover_color=COLOR_PRIMARY_HOVER,
command=self.launch_selected,
)
self.btn_launch.pack(pady=10)
def launch_selected(self):
selection = self.combobox.get()
current_dir = os.path.dirname(os.path.abspath(__file__))
if selection == "Exchange":
module_name = "scripts.exchange_online"
elif selection == "Chat":
module_name = "scripts.chats"
elif selection == "Files":
module_name = "scripts.files"
else:
return
subprocess.Popen([sys.executable, "-m", module_name])
self.destroy()
if __name__ == "__main__":
app = SelectorApp()
app.mainloop()