diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-02-06 01:19:06 +0200 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-02-06 01:19:06 +0200 |
| commit | c210f8d477af51fd70af0901315a48e193568059 (patch) | |
| tree | 2ceda8036375cedf39bed1ccd652a9d89d2997f0 /Software | |
| parent | 42f6e5e39ba83531adf8712155ca0015346bd662 (diff) | |
| download | Tango-c210f8d477af51fd70af0901315a48e193568059.tar.gz Tango-c210f8d477af51fd70af0901315a48e193568059.zip | |
Working on azure utils...
Diffstat (limited to 'Software')
9 files changed, 1394 insertions, 44 deletions
diff --git a/Software/DB/SQLExaminer Projects/GENERAL_ENV_CREATE.sdeproj b/Software/DB/SQLExaminer Projects/GENERAL_ENV_CREATE.sdeproj new file mode 100644 index 000000000..83146f3b8 --- /dev/null +++ b/Software/DB/SQLExaminer Projects/GENERAL_ENV_CREATE.sdeproj @@ -0,0 +1,1121 @@ +<SqlDataExaminer version="21"> + <Sources> + <Source id="1"> + <EngineType>MsSqlAzure</EngineType> + <StorageType>LiveDb</StorageType> + <ServerName>twine.database.windows.net</ServerName> + <Database>Tango_DEV</Database> + <WinAuth>False</WinAuth> + <AzurePwd>False</AzurePwd> + <Login>Roy</Login> + <Password>Aa123456</Password> + <SavePasswords>true</SavePasswords> + </Source> + <Source id="2"> + <EngineType>MsSqlAzure</EngineType> + <StorageType>LiveDb</StorageType> + <ServerName>twine.database.windows.net</ServerName> + <Database>Tango_ALPHA</Database> + <WinAuth>False</WinAuth> + <AzurePwd>False</AzurePwd> + <Login>Roy</Login> + <Password>Aa123456</Password> + <SavePasswords>true</SavePasswords> + </Source> + </Sources> + <Items> + <Item name="dbo.ACTION_LOGS" type="table"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="TYPE" /> + <Column name="USER_GUID" /> + <Column name="RELATED_OBJECT_NAME" /> + <Column name="RELATED_OBJECT_GUID" /> + <Column name="MESSAGE" /> + <Column name="DIFFERENCE" /> + </Columns> + </Item> + <Item name="dbo.ADDRESSES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="ADDRESS_STRING" /> + <Column name="LOCALITY" /> + <Column name="COUNTRY" /> + <Column name="CITY" /> + <Column name="STATE" /> + <Column name="COUNTRY_CODE" /> + <Column name="POSTAL_CODE" /> + </Columns> + </Item> + <Item name="dbo.APPLICATION_DISPLAY_PANEL_VERSIONS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="VERSION" /> + <Column name="NAME" /> + </Columns> + </Item> + <Item name="dbo.APPLICATION_FIRMWARE_VERSIONS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="VERSION" /> + <Column name="NAME" /> + </Columns> + </Item> + <Item name="dbo.APPLICATION_OS_VERSIONS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="VERSION" /> + <Column name="NAME" /> + </Columns> + </Item> + <Item name="dbo.BRUSH_STOPS" type="table"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="SEGMENT_GUID" /> + <Column name="COLOR_SPACE_GUID" /> + <Column name="OFFSET_PERCENT" /> + <Column name="STOP_INDEX" /> + <Column name="CYAN" /> + <Column name="MAGENTA" /> + <Column name="YELLOW" /> + <Column name="BLACK" /> + <Column name="RED" /> + <Column name="GREEN" /> + <Column name="BLUE" /> + <Column name="L" /> + <Column name="A" /> + <Column name="B" /> + <Column name="V0" /> + <Column name="V0_DIV" /> + <Column name="V1" /> + <Column name="V1_DIV" /> + <Column name="V2" /> + <Column name="V2_DIV" /> + <Column name="V3" /> + <Column name="V3_DIV" /> + <Column name="V4" /> + <Column name="V4_DIV" /> + <Column name="V5" /> + <Column name="V5_DIV" /> + <Column name="V6" /> + <Column name="V6_DIV" /> + <Column name="V7" /> + <Column name="V7_DIV" /> + <Column name="CORRECTED" /> + <Column name="COLOR_CATALOG_GUID" /> + <Column name="COLOR_CATALOGS_ITEM_GUID" /> + <Column name="IS_TRANSPARENT" /> + </Columns> + </Item> + <Item name="dbo.CARTRIDGE_TYPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + </Columns> + </Item> + <Item name="dbo.CATS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="NAME" /> + <Column name="MACHINE_GUID" /> + <Column name="RML_GUID" /> + <Column name="LIQUID_TYPE_GUID" /> + <Column name="DATA" /> + </Columns> + </Item> + <Item name="dbo.CCTS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + <Column name="FILE_NAME" /> + <Column name="DATA" /> + </Columns> + </Item> + <Item name="dbo.COLOR_CATALOGS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="COMPANY" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + <Column name="DESIGN_TYPE" /> + <Column name="LOGO" /> + <Column name="IMAGE" /> + </Columns> + </Item> + <Item name="dbo.COLOR_CATALOGS_GROUPS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="NAME" /> + <Column name="GROUP_INDEX" /> + <Column name="COLOR_CATALOG_GUID" /> + </Columns> + </Item> + <Item name="dbo.COLOR_CATALOGS_ITEMS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="COLOR_CATALOGS_GROUP_GUID" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="ITEM_INDEX" /> + <Column name="CYAN" /> + <Column name="MAGENTA" /> + <Column name="YELLOW" /> + <Column name="BLACK" /> + <Column name="RED" /> + <Column name="GREEN" /> + <Column name="BLUE" /> + <Column name="L" /> + <Column name="A" /> + <Column name="B" /> + <Column name="PROCESS_PARAMETERS_TABLE_INDEX" /> + </Columns> + </Item> + <Item name="dbo.COLOR_CATALOGS_ITEMS_RECIPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="COLOR_CATALOGS_ITEM_GUID" /> + <Column name="RML_GUID" /> + <Column name="CYAN" /> + <Column name="MAGENTA" /> + <Column name="YELLOW" /> + <Column name="BLACK" /> + <Column name="PROCESS_PARAMETERS_TABLE_INDEX" /> + </Columns> + </Item> + <Item name="dbo.COLOR_SPACES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + <Column name="THUMBNAIL" /> + </Columns> + </Item> + <Item name="dbo.CONFIGURATIONS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="APPLICATION_OS_VERSION_GUID" /> + <Column name="APPLICATION_FIRMWARE_VERSION_GUID" /> + <Column name="APPLICATION_DISPLAY_PANEL_VERSION_GUID" /> + <Column name="EMBEDDED_FIRMWARE_VERSION_GUID" /> + <Column name="HARDWARE_VERSION_GUID" /> + <Column name="HARDWARE_CONFIGURATION_STRING" /> + </Columns> + </Item> + <Item name="dbo.CONTACTS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="FIRST_NAME" /> + <Column name="LAST_NAME" /> + <Column name="FULL_NAME" /> + <Column name="EMAIL" /> + <Column name="PHONE_NUMBER" /> + <Column name="FAX" /> + </Columns> + </Item> + <Item name="dbo.CUSTOMERS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="ORGANIZATION_GUID" /> + <Column name="NAME" /> + </Columns> + </Item> + <Item name="dbo.DISPENSER_TYPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="CAPACITY" /> + </Columns> + </Item> + <Item name="dbo.DISPENSERS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="SERIAL_NUMBER" /> + <Column name="DISPENSER_TYPE_GUID" /> + <Column name="NL_PER_PULSE" /> + <Column name="PART_NUMBER" /> + <Column name="PCB_SERIAL" /> + <Column name="PCB_VERSION" /> + <Column name="PRODUCTION_DATE" /> + <Column name="CALIBRATION_DATA" /> + </Columns> + </Item> + <Item name="dbo.EMBEDDED_FIRMWARE_VERSIONS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="VERSION" /> + <Column name="NAME" /> + </Columns> + </Item> + <Item name="dbo.EVENT_TYPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="TITLE" /> + <Column name="DESCRIPTION" /> + <Column name="TECHNICAL_DESCRIPTION" /> + <Column name="COMPONENT_INDEX" /> + <Column name="EVENT_CATEGORY" /> + <Column name="EVENT_GROUP" /> + <Column name="EVENT_NOTIFICATION_TIME" /> + <Column name="EVENT_ACTIONS" /> + <Column name="REQUIRES_USER_INTERVENTION" /> + <Column name="GUIDANCE" /> + </Columns> + </Item> + <Item name="dbo.FIBER_SHAPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="NAME" /> + <Column name="CODE" /> + </Columns> + </Item> + <Item name="dbo.FIBER_SYNTHS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="NAME" /> + <Column name="CODE" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_BLOWER_TYPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_BLOWERS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="HARDWARE_BLOWER_TYPE_GUID" /> + <Column name="HARDWARE_VERSION_GUID" /> + <Column name="ENABLED" /> + <Column name="VOLTAGE" /> + <Column name="HEATING_VOLTAGE" /> + <Column name="ACTIVE" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_BREAK_SENSOR_TYPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_BREAK_SENSORS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="HARDWARE_BREAK_SENSOR_TYPE_GUID" /> + <Column name="HARDWARE_VERSION_GUID" /> + <Column name="ENABLED" /> + <Column name="DE_BOUNCE_TIME_MILLI" /> + <Column name="ACTIVE" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_DANCER_TYPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_DANCERS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="HARDWARE_DANCER_TYPE_GUID" /> + <Column name="HARDWARE_VERSION_GUID" /> + <Column name="GRADUAL" /> + <Column name="K" /> + <Column name="X" /> + <Column name="PULSE_PER_MM_SPRING" /> + <Column name="MAXIMAL_MOVEMENT_MM" /> + <Column name="ZERO_POINT" /> + <Column name="RESOLUTION_BITS" /> + <Column name="ARM_LENGTH" /> + <Column name="ASSEMBLY_DIRECTION_RIGHT" /> + <Column name="ACCELERATE_ON_TENSION_RAISE" /> + <Column name="ACTIVE" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_MOTOR_TYPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + <Column name="SUPPORTS_HOMING" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_MOTORS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="HARDWARE_MOTOR_TYPE_GUID" /> + <Column name="HARDWARE_VERSION_GUID" /> + <Column name="MIN_FREQUENCY" /> + <Column name="MAX_FREQUENCY" /> + <Column name="SET_MICRO_STEP" /> + <Column name="MICRO_STEP" /> + <Column name="MAX_CHANGE_SLOPE" /> + <Column name="HIGH_LENGTH_MICRO_SECOND" /> + <Column name="SPEED_MASTER" /> + <Column name="PULSE_PER_ROUND" /> + <Column name="PULLEY_RADIUS" /> + <Column name="CONFIG_WORD" /> + <Column name="DIRECTION_THREAD_WIZE" /> + <Column name="KVAL_HOLD" /> + <Column name="KVAL_RUN" /> + <Column name="KVAL_ACC" /> + <Column name="KVAL_DEC" /> + <Column name="OVER_CURRENT_THRESHOLD" /> + <Column name="STALL_THRESHOLD" /> + <Column name="THERMAL_COMPENSATION_FACTOR" /> + <Column name="LOW_SPEED_OPTIMIZATION" /> + <Column name="ST_SLP" /> + <Column name="INT_SPD" /> + <Column name="FN_SLP_ACC" /> + <Column name="FN_SLP_DEC" /> + <Column name="FS_SPD" /> + <Column name="GATE_CFG_1" /> + <Column name="GATE_CFG_2" /> + <Column name="T_VAL_HOLD" /> + <Column name="T_VAL_RUN" /> + <Column name="T_VAL_ACC" /> + <Column name="T_VAL_DEC" /> + <Column name="T_FAST" /> + <Column name="T_ON_MIN" /> + <Column name="T_OFF_MIN" /> + <Column name="ACTIVE" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_PID_CONTROL_TYPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_PID_CONTROLS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="HARDWARE_PID_CONTROL_TYPE_GUID" /> + <Column name="HARDWARE_VERSION_GUID" /> + <Column name="OUTPUT_PROPORTIONAL_POWER_LIMIT" /> + <Column name="OUTPUT_PROPORTIONAL_BAND" /> + <Column name="INTEGRAL_TIME" /> + <Column name="DERIVATIVE_TIME" /> + <Column name="SENSOR_CORRECTION_ADJUSTMENT" /> + <Column name="SENSOR_MIN_VALUE" /> + <Column name="SENSOR_MAX_VALUE" /> + <Column name="SET_POINT_RAMP_RATEOR_SOFT_START_RAMP" /> + <Column name="SET_POINT_CONTROL_OUTPUT_RATE" /> + <Column name="CONTROL_OUTPUT_TYPE" /> + <Column name="SSR_CONTROL_OUTPUT_TYPE" /> + <Column name="OUTPUT_ON_OFF_HYSTERESIS_VALUE" /> + <Column name="PROCESS_VARIABLE_SAMPLING_RATE" /> + <Column name="PV_INPUT_FILTER_FACTOR_MODE" /> + <Column name="OUTPUT_PROPORTIONAL_CYCLE_TIME" /> + <Column name="AC_HEATERS__HALF_CYCLE_TIME" /> + <Column name="PROPORTIONAL_GAIN" /> + <Column name="PID_ACTIVE" /> + <Column name="EPSILON" /> + <Column name="ACTIVE" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_SPEED_SENSOR_TYPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_SPEED_SENSORS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="HARDWARE_SPEED_SENSOR_TYPE_GUID" /> + <Column name="HARDWARE_VERSION_GUID" /> + <Column name="RESOLUTION_BITS" /> + <Column name="PERIMETER" /> + <Column name="ACTIVE" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_VERSIONS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="VERSION" /> + <Column name="NAME" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_WINDER_TYPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + </Columns> + </Item> + <Item name="dbo.HARDWARE_WINDERS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="HARDWARE_WINDER_TYPE_GUID" /> + <Column name="HARDWARE_VERSION_GUID" /> + <Column name="MILLIMETER_PER_ROTATION" /> + <Column name="ACTIVE" /> + </Columns> + </Item> + <Item name="dbo.IDS_PACK_FORMULAS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + <Column name="AUTO_CALCULATED" /> + </Columns> + </Item> + <Item name="dbo.IDS_PACKS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CONFIGURATION_GUID" /> + <Column name="DISPENSER_GUID" /> + <Column name="LIQUID_TYPE_GUID" /> + <Column name="CARTRIDGE_TYPE_GUID" /> + <Column name="MID_TANK_TYPE_GUID" /> + <Column name="IDS_PACK_FORMULA_GUID" /> + <Column name="PACK_INDEX" /> + <Column name="IS_EMPTY" /> + </Columns> + </Item> + <Item name="dbo.JOB_RUNS" type="table"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="MACHINE_GUID" /> + <Column name="JOB_GUID" /> + <Column name="START_DATE" /> + <Column name="END_DATE" /> + <Column name="STATUS" /> + <Column name="END_POSITION" /> + <Column name="FAILED_MESSAGE" /> + <Column name="IS_SYNCHRONIZED" /> + <Column name="JOB_LENGTH" /> + <Column name="LIQUID_QUANTITY_STRING" /> + </Columns> + </Item> + <Item name="dbo.JOBS" type="table"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CREATION_DATE" /> + <Column name="LAST_RUN" /> + <Column name="MACHINE_GUID" /> + <Column name="USER_GUID" /> + <Column name="RML_GUID" /> + <Column name="WINDING_METHOD_GUID" /> + <Column name="SPOOL_TYPE_GUID" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + <Column name="INTER_SEGMENT_LENGTH" /> + <Column name="ENABLE_INTER_SEGMENT" /> + <Column name="ENABLE_LUBRICATION" /> + <Column name="JOB_INDEX" /> + <Column name="ESTIMATED_DURATION_MILI" /> + <Column name="HAS_EMBROIDERY_FILE" /> + <Column name="EMBROIDERY_FILE_DATA" /> + <Column name="EMBROIDERY_FILE_NAME" /> + <Column name="EMBROIDERY_JPEG" /> + <Column name="STATUS" /> + <Column name="COLOR_SPACE_GUID" /> + <Column name="COLOR_CATALOG_GUID" /> + <Column name="NUMBER_OF_UNITS" /> + <Column name="TYPE" /> + <Column name="CUSTOMER_GUID" /> + <Column name="SPOOLS_DISTRIBUTION" /> + <Column name="NUMBER_OF_HEADS" /> + <Column name="SAMPLE_UNITS_OR_METERS" /> + <Column name="FINE_TUNING_STATUS" /> + <Column name="FINE_TUNING_APPROVE_DATE" /> + <Column name="SAMPLE_DYE_STATUS" /> + <Column name="SAMPLE_DYE_APPROVE_DATE" /> + <Column name="EDITING_STATE" /> + <Column name="LENGTH_PERCENTAGE_FACTOR" /> + <Column name="IS_SYNCHRONIZED" /> + <Column name="SOURCE" /> + </Columns> + </Item> + <Item name="dbo.LINEAR_MASS_DENSITY_UNITS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="NAME" /> + <Column name="CODE" /> + </Columns> + </Item> + <Item name="dbo.LIQUID_TYPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="VERSION" /> + <Column name="COLOR" /> + <Column name="PREFERRED_INDEX" /> + <Column name="HAS_PIGMENT" /> + </Columns> + </Item> + <Item name="dbo.LIQUID_TYPES_RMLS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="LIQUID_TYPE_GUID" /> + <Column name="RML_GUID" /> + <Column name="MAX_NL_PER_CM" /> + <Column name="DEFAULT_CAT_DATA" /> + </Columns> + </Item> + <Item name="dbo.MACHINE_STUDIO_VERSIONS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="VERSION" /> + <Column name="BLOB_NAME" /> + <Column name="INSTALLER_BLOB_NAME" /> + <Column name="COMMENTS" /> + <Column name="USER_GUID" /> + </Columns> + </Item> + <Item name="dbo.MACHINE_VERSIONS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="VERSION" /> + <Column name="NAME" /> + <Column name="PROTOTYPE_MACHINE_DATA" /> + </Columns> + </Item> + <Item name="dbo.MACHINES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="SERIAL_NUMBER" /> + <Column name="NAME" /> + <Column name="PRODUCTION_DATE" /> + <Column name="ORGANIZATION_GUID" /> + <Column name="SITE_GUID" /> + <Column name="MACHINE_VERSION_GUID" /> + <Column name="CONFIGURATION_GUID" /> + <Column name="DEFAULT_RML_GUID" /> + <Column name="LOADED_RML_GUID" /> + <Column name="TARGET_JOB_TYPES" /> + <Column name="TARGET_COLOR_SPACE_CODES" /> + <Column name="DEFAULT_COLOR_SPACE_GUID" /> + <Column name="DEFAULT_SEGMENT_LENGTH" /> + <Column name="DEFAULT_SPOOL_TYPE_GUID" /> + <Column name="OS_KEY" /> + <Column name="AUTO_LOGIN" /> + <Column name="AUTO_CHECK_FOR_UPDATES" /> + <Column name="SETUP_ACTIVATION" /> + <Column name="SETUP_REMOTE_ASSISTANCE" /> + <Column name="SETUP_UWF" /> + <Column name="SETUP_FIRMWARE" /> + <Column name="SETUP_FPGA" /> + <Column name="IS_DEMO" /> + <Column name="SUSPEND_VERSION_UPDATE" /> + <Column name="FORCE_VERSION_UPDATE" /> + <Column name="PERFORM_SCHEMA_UPDATE_ON_DATA_UPDATE" /> + <Column name="DEVICE_COM_PORT" /> + <Column name="IS_DEVICE_REGISTERED" /> + <Column name="DEVICE_ID" /> + <Column name="DEVICE_NAME" /> + </Columns> + </Item> + <Item name="dbo.MACHINES_EVENTS" type="table"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="HOST_NAME" /> + <Column name="MACHINE_GUID" /> + <Column name="EVENT_TYPE_GUID" /> + <Column name="USER_GUID" /> + <Column name="DATE_TIME" /> + <Column name="DESCRIPTION" /> + <Column name="IS_SYNCHRONIZED" /> + </Columns> + </Item> + <Item name="dbo.MEDIA_CONDITIONS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="NAME" /> + <Column name="CODE" /> + </Columns> + </Item> + <Item name="dbo.MEDIA_MATERIALS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="NAME" /> + <Column name="CODE" /> + </Columns> + </Item> + <Item name="dbo.MEDIA_PURPOSES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="NAME" /> + <Column name="CODE" /> + </Columns> + </Item> + <Item name="dbo.MID_TANK_TYPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="LITER_CAPACITY" /> + </Columns> + </Item> + <Item name="dbo.ORGANIZATIONS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="NAME" /> + <Column name="CONTACT_GUID" /> + <Column name="ADDRESS_GUID" /> + </Columns> + </Item> + <Item name="dbo.PERMISSIONS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + </Columns> + </Item> + <Item name="dbo.PROCESS_PARAMETERS_TABLES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="NAME" /> + <Column name="DYEING_SPEED" /> + <Column name="MIN_INK_UPTAKE" /> + <Column name="MAX_INK_UPTAKE" /> + <Column name="FEEDER_TENSION" /> + <Column name="PULLER_TENSION" /> + <Column name="WINDER_TENSION" /> + <Column name="MIXER_TEMP" /> + <Column name="HEAD_ZONE1_TEMP" /> + <Column name="HEAD_ZONE2_TEMP" /> + <Column name="HEAD_ZONE3_TEMP" /> + <Column name="HEAD_ZONE4_TEMP" /> + <Column name="HEAD_ZONE5_TEMP" /> + <Column name="HEAD_ZONE6_TEMP" /> + <Column name="DRYER_AIR_FLOW" /> + <Column name="DRYER_ZONE1_TEMP" /> + <Column name="DRYER_ZONE2_TEMP" /> + <Column name="DRYER_ZONE3_TEMP" /> + <Column name="DRYER_BUFFER_LENGTH" /> + <Column name="HEAD_AIR_FLOW" /> + <Column name="PROCESS_PARAMETERS_TABLES_GROUP_GUID" /> + <Column name="TABLE_INDEX" /> + </Columns> + </Item> + <Item name="dbo.PROCESS_PARAMETERS_TABLES_GROUPS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="RML_GUID" /> + <Column name="NAME" /> + <Column name="ACTIVE" /> + <Column name="SAVE_DATE" /> + </Columns> + </Item> + <Item name="dbo.RMLS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="NAME" /> + <Column name="MANUFACTURER" /> + <Column name="CODE" /> + <Column name="WHITE_POINT_L" /> + <Column name="WHITE_POINT_A" /> + <Column name="WHITE_POINT_B" /> + <Column name="MEDIA_MATERIAL_GUID" /> + <Column name="MEDIA_PURPOSE_GUID" /> + <Column name="MEDIA_CONDITION_GUID" /> + <Column name="LINEAR_MASS_DENSITY_UNIT_GUID" /> + <Column name="FIBER_SHAPE_GUID" /> + <Column name="FIBER_SYNTH_GUID" /> + <Column name="FIBER_SIZE" /> + <Column name="NUMBER_OF_FIBERS" /> + <Column name="PLIES_PER_FIBER" /> + <Column name="PLIES_PER_THREAD" /> + <Column name="TWISTED" /> + <Column name="AIR_ENTANGLEMENT" /> + <Column name="LUBRICANT" /> + <Column name="TENSILE_STRENGTH" /> + <Column name="ELONGATION_AT_BREAK_PERCENTAGE" /> + <Column name="ESTIMATED_THREAD_DIAMETER" /> + <Column name="RANK" /> + <Column name="THUMBNAIL" /> + <Column name="CCT_GUID" /> + <Column name="COLOR_CONVERSION_VERSION" /> + </Columns> + </Item> + <Item name="dbo.ROLES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + </Columns> + </Item> + <Item name="dbo.ROLES_PERMISSIONS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="ROLE_GUID" /> + <Column name="PERMISSION_GUID" /> + </Columns> + </Item> + <Item name="dbo.SEGMENTS" type="table"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="NAME" /> + <Column name="JOB_GUID" /> + <Column name="LENGTH" /> + <Column name="SEGMENT_INDEX" /> + </Columns> + </Item> + <Item name="dbo.SITES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="ORGANIZATION_GUID" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + </Columns> + </Item> + <Item name="dbo.SITES_CATALOGS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="SITE_GUID" /> + <Column name="COLOR_CATALOG_GUID" /> + </Columns> + </Item> + <Item name="dbo.SITES_RMLS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="SITE_GUID" /> + <Column name="RML_GUID" /> + </Columns> + </Item> + <Item name="dbo.SPOOL_TYPES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="LENGTH" /> + <Column name="WEIGHT" /> + <Column name="DIAMETER" /> + <Column name="ROTATIONS_PER_PASSAGE" /> + </Columns> + </Item> + <Item name="dbo.SPOOLS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="SPOOL_TYPE_GUID" /> + <Column name="MACHINE_GUID" /> + <Column name="START_OFFSET_PULSES" /> + <Column name="BACKING_RATE" /> + <Column name="SEGMENT_OFFSET_PULSES" /> + <Column name="BOTTOM_BACKING_RATE" /> + </Columns> + </Item> + <Item name="dbo.SYNC_CONFIGURATIONS" type="table" extracted="True"> + <Columns> + <Column name="ID" key="true" /> + <Column name="TABLE_NAME" /> + <Column name="SYNC_TYPE" /> + </Columns> + </Item> + <Item name="dbo.TANGO_UPDATES" type="table"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="APPLICATION_VERSION" /> + <Column name="FIRMWARE_VERSION" /> + <Column name="MACHINE_GUID" /> + <Column name="STATUS" /> + <Column name="FAILED_REASON" /> + <Column name="FAILED_LOG" /> + <Column name="START_DATE" /> + <Column name="END_DATE" /> + <Column name="IS_SYNCHRONIZED" /> + </Columns> + </Item> + <Item name="dbo.TANGO_VERSIONS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="VERSION" /> + <Column name="FIRMWARE_VERSION" /> + <Column name="BLOB_NAME" /> + <Column name="INSTALLER_BLOB_NAME" /> + <Column name="COMMENTS" /> + <Column name="USER_GUID" /> + <Column name="MACHINE_VERSION_GUID" /> + </Columns> + </Item> + <Item name="dbo.TECH_CONTROLLERS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + <Column name="MIN" /> + <Column name="MAX" /> + <Column name="UNITS" /> + </Columns> + </Item> + <Item name="dbo.TECH_DISPENSERS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + </Columns> + </Item> + <Item name="dbo.TECH_HEATERS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + </Columns> + </Item> + <Item name="dbo.TECH_IOS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="TYPE" /> + <Column name="DESIGNATOR" /> + <Column name="ASM" /> + <Column name="INTERFACE_NAME" /> + <Column name="SENSOR" /> + <Column name="INIT_VALUE" /> + <Column name="AVERAGING" /> + <Column name="MIN" /> + <Column name="MAX" /> + </Columns> + </Item> + <Item name="dbo.TECH_MONITORS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + <Column name="MIN" /> + <Column name="MAX" /> + <Column name="UNITS" /> + <Column name="POINTS_PER_FRAME" /> + <Column name="MULTI_CHANNEL" /> + <Column name="CHANNEL_COUNT" /> + </Columns> + </Item> + <Item name="dbo.TECH_VALVES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + <Column name="TYPE" /> + <Column name="STATE1" /> + <Column name="STATE2" /> + </Columns> + </Item> + <Item name="dbo.USERS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="DELETED" /> + <Column name="EMAIL" /> + <Column name="PASSWORD" /> + <Column name="ORGANIZATION_GUID" /> + <Column name="CONTACT_GUID" /> + <Column name="ADDRESS_GUID" /> + <Column name="LAST_LOGIN" /> + </Columns> + </Item> + <Item name="dbo.USERS_ROLES" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="USER_GUID" /> + <Column name="ROLE_GUID" /> + </Columns> + </Item> + <Item name="dbo.WINDING_METHODS" type="table" extracted="True"> + <Columns> + <Column name="GUID" key="true" /> + <Column name="ID" /> + <Column name="LAST_UPDATED" /> + <Column name="CODE" /> + <Column name="NAME" /> + <Column name="DESCRIPTION" /> + </Columns> + </Item> + </Items> + <SchemaMapping> + <SMItem schema1="dbo" schema2="dbo" /> + </SchemaMapping> + <ProjectSettings> + <AllSettings> + <ComparisonCaseSensitive>1</ComparisonCaseSensitive> + <CompareTrimmedStrings>False</CompareTrimmedStrings> + <EmptyEqualsNull>False</EmptyEqualsNull> + <PrecedeStringConstWithNPrefix>0</PrecedeStringConstWithNPrefix> + <AutoSelectKeyColumns>0</AutoSelectKeyColumns> + <PerformanceOptions> + <PerformanceOption name="Auto" value="True" /> + </PerformanceOptions> + </AllSettings> + </ProjectSettings> +</SqlDataExaminer>
\ No newline at end of file diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/ViewModels/EnvironmentCreationViewVM.cs b/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/ViewModels/EnvironmentCreationViewVM.cs index 5a1fa8cca..74995c16d 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/ViewModels/EnvironmentCreationViewVM.cs +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/ViewModels/EnvironmentCreationViewVM.cs @@ -4,6 +4,7 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows; using Microsoft.Azure.Management.AppService.Fluent; using Microsoft.Azure.Management.Fluent; using Tango.AzureUtils.ActiveDirectory; @@ -33,7 +34,7 @@ namespace Tango.AzureUtils.UI.ViewModels } private String _slotName; - [Required] + [Required(ErrorMessage = "Deployment slot name is required.")] public String SlotName { get { return _slotName; } @@ -41,8 +42,8 @@ namespace Tango.AzureUtils.UI.ViewModels } private String _email; - [Required] - [EmailAddress] + [Required(ErrorMessage = "Active directory email is required.")] + [EmailAddress(ErrorMessage = "Please enter a valid email.")] public String Email { get { return _email; } @@ -50,7 +51,7 @@ namespace Tango.AzureUtils.UI.ViewModels } private String _password; - [Required] + [Required(ErrorMessage = "Password is required.")] public String Password { get { return _password; } @@ -67,8 +68,6 @@ namespace Tango.AzureUtils.UI.ViewModels public override void OnApplicationReady() { Email = "roy@twine-s.com"; - Password = "1Creativity"; - SlotName = "ROY"; } public override void OnAuthenticated(IAzure azure, List<IWebAppBase> apps) @@ -77,7 +76,21 @@ namespace Tango.AzureUtils.UI.ViewModels DeploymentSlots = apps.OfType<IDeploymentSlot>().Where(x => x.Parent == _machineServiceApp).ToList(); SelectedDeploymentSlot = DeploymentSlots.FirstOrDefault(); - _environmentManager = new EnvironmentManager(azure, new ActiveDirectoryManager(azure, AzureUtilsAuthenticationFactory.GetCredentials())); + _environmentManager = new EnvironmentManager(azure); + _environmentManager.ConfirmationRequired += _environmentManager_ConfirmationRequired; + _environmentManager.Progress += (x, e) => StatusManager.UpdateStatus(e); + } + + private void _environmentManager_ConfirmationRequired(object sender, AzureUtilsConfirmationEventArgs e) + { + if (MessageBox.Show(e.Message, "Confirmation Required", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.OK) + { + e.Confirm(); + } + else + { + e.Cancel(); + } } private async void CreateDeploymentSlot() @@ -87,9 +100,7 @@ namespace Tango.AzureUtils.UI.ViewModels if (!Validate()) return; IsFree = false; - StatusManager.UpdateStatus(AzureUtilsStage.Creating, "Creating new deployment slot...", true); await _environmentManager.CreateDeploymentSlot(_machineServiceApp as IWebApp, SelectedDeploymentSlot, SlotName, Email, Password); - StatusManager.UpdateStatus(AzureUtilsStage.Ready, "Deployment slot created successfully."); } catch (Exception ex) { diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Views/EnvironmentCreationView.xaml b/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Views/EnvironmentCreationView.xaml index 4c899bf2d..c7278e2da 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Views/EnvironmentCreationView.xaml +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Views/EnvironmentCreationView.xaml @@ -4,6 +4,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:vm="clr-namespace:Tango.AzureUtils.UI.ViewModels" + xmlns:helpers="clr-namespace:Tango.SharedUI.Helpers;assembly=Tango.SharedUI" xmlns:global="clr-namespace:Tango.AzureUtils.UI" xmlns:local="clr-namespace:Tango.AzureUtils.UI.Views" mc:Ignorable="d" @@ -34,9 +35,9 @@ <TextBox Margin="0 2 0 0" FontSize="20" Text="{Binding Email}"></TextBox> <TextBlock Margin="0 10 0 0">Password</TextBlock> - <TextBox Margin="0 2 0 0" FontSize="20" Text="{Binding Password}"></TextBox> + <PasswordBox Margin="0 2 0 0" FontSize="20" helpers:PasswordHelper.Attach="True" helpers:PasswordHelper.Password="{Binding Password,Mode=TwoWay}"></PasswordBox> - <Button Margin="0 40 0 0" Padding="20" Command="{Binding CreateDeploymentSlotCommand}">CREATE DEPLOYMENT SLOT</Button> + <Button Margin="0 40 0 0" Padding="20" Command="{Binding CreateDeploymentSlotCommand}">CREATE ENVIRONMENT</Button> </StackPanel> </Grid> </Grid> diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils/AzureUtilsComponentBase.cs b/Software/Visual_Studio/Azure/Tango.AzureUtils/AzureUtilsComponentBase.cs index 507c9adbc..5ad584cd7 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils/AzureUtilsComponentBase.cs +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils/AzureUtilsComponentBase.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; +using Tango.Logging; namespace Tango.AzureUtils { @@ -13,6 +14,7 @@ namespace Tango.AzureUtils protected IAzure Azure { get; private set; } public event EventHandler<AzureUtilsProgressEventArgs> Progress; + public event EventHandler<AzureUtilsConfirmationEventArgs> ConfirmationRequired; public AzureUtilsComponentBase(IAzure azure) { @@ -21,6 +23,8 @@ namespace Tango.AzureUtils protected virtual void OnProgress(AzureUtilsStage stage, String message = null, double progress = 0, double maximum = 100, bool indeterminate = true) { + LogManager.Log($"{stage}: {message}"); + Progress?.Invoke(this, new AzureUtilsProgressEventArgs() { Stage = stage, @@ -30,5 +34,40 @@ namespace Tango.AzureUtils IsIndeterminate = indeterminate, }); } + + protected virtual void OnProgress(AzureUtilsProgressEventArgs e) + { + Progress?.Invoke(this, e); + } + + protected async Task<bool> RequestConfirmation(String message, bool throwIfCancel = true) + { + LogManager.Log($"Confirmation Required: {message}"); + + AzureUtilsConfirmationEventArgs e = new AzureUtilsConfirmationEventArgs(message); + if (ConfirmationRequired != null) + { + OnProgress(AzureUtilsStage.ConfirmationRequired, "Waiting for user confirmation..."); + + OnRequestConfirmation(e); + var result = await e.GetAwaiter(); + + if (!result) + { + throw new OperationCanceledException("Operation canceled."); + } + + return result; + } + else + { + return true; + } + } + + protected void OnRequestConfirmation(AzureUtilsConfirmationEventArgs e) + { + ConfirmationRequired?.Invoke(this, e); + } } } diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils/AzureUtilsConfirmationEventArgs.cs b/Software/Visual_Studio/Azure/Tango.AzureUtils/AzureUtilsConfirmationEventArgs.cs new file mode 100644 index 000000000..9a27e06de --- /dev/null +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils/AzureUtilsConfirmationEventArgs.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.AzureUtils +{ + public class AzureUtilsConfirmationEventArgs : EventArgs + { + private TaskCompletionSource<bool> _completionSource; + + public String Message { get; set; } + + public AzureUtilsConfirmationEventArgs(String message) + { + Message = message; + _completionSource = new TaskCompletionSource<bool>(); + } + + internal Task<bool> GetAwaiter() + { + return _completionSource.Task; + } + + public void Confirm() + { + _completionSource.SetResult(true); + } + + public void Cancel() + { + _completionSource.SetResult(false); + } + } +} diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils/AzureUtilsStage.cs b/Software/Visual_Studio/Azure/Tango.AzureUtils/AzureUtilsStage.cs index 3364dc8c7..994ada3aa 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils/AzureUtilsStage.cs +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils/AzureUtilsStage.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,12 +13,21 @@ namespace Tango.AzureUtils Initializing, Error, Validating, + [Description("Confirmation Required")] + ConfirmationRequired, //Deployment - DownloadingFTP, - UploadingFTP, + Downloading, + Uploading, //Environment Creating, + + [Description("Environment Group")] + EnvironmentGroup, + [Description("Deployment Slot")] + DeploymentSlot, + Database, + Storage, } } diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils/Deployment/DeploymentManager.cs b/Software/Visual_Studio/Azure/Tango.AzureUtils/Deployment/DeploymentManager.cs index 3c27d8e01..2500b293c 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils/Deployment/DeploymentManager.cs +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils/Deployment/DeploymentManager.cs @@ -51,12 +51,12 @@ namespace Tango.AzureUtils.Deployment _ftpDownloadProgress = new Progress<FtpProgress>((p) => { - OnProgress(AzureUtilsStage.DownloadingFTP, $"Downloading {p.RemotePath}...", p.Progress, 100, false); + OnProgress(AzureUtilsStage.Downloading, $"Downloading {p.RemotePath}...", p.Progress, 100, false); }); _ftpUploadProgress = new Progress<FtpProgress>((p) => { - OnProgress(AzureUtilsStage.UploadingFTP, $"Uploading {p.LocalPath}...", p.Progress, 100, false); + OnProgress(AzureUtilsStage.Uploading, $"Uploading {p.LocalPath}...", p.Progress, 100, false); }); } @@ -77,6 +77,8 @@ namespace Tango.AzureUtils.Deployment { await ValidateUpgrade(sourceApp, targetApp); + await OpenSQLExaminerSchema(sourceApp, targetApp); + await OpenSQLExaminerData(sourceApp, targetApp); await UpgradeStorage(sourceApp, targetApp); await UpgradeVersions(sourceApp, targetApp); @@ -107,13 +109,21 @@ namespace Tango.AzureUtils.Deployment File.WriteAllText(tempFile, projectXml.ToString()); Process.Start(tempFile); + + await RequestConfirmation($"Please synchronize the database schema between '{sourceSettings.DB_CATALOG}' and '{targetSettings.DB_CATALOG}'.\nPlease confirm in order to continue."); + OnProgress(AzureUtilsStage.Database, $"Waiting for database schema synchronization..."); } } - public async Task OpenSQLExaminerData(IWebAppBase sourceApp, IWebAppBase targetApp) + public async Task OpenSQLExaminerData(IWebAppBase sourceApp, IWebAppBase targetApp, bool forCreation = false) { String projectFile = Path.Combine(AssemblyHelper.GetCurrentAssemblyFolder(), "Deployment", "GENERAL_ENV_UPGRADE.sdeproj"); + if (forCreation) + { + projectFile = Path.Combine(AssemblyHelper.GetCurrentAssemblyFolder(), "Deployment", "GENERAL_ENV_CREATE.sdeproj"); + } + using (Stream stream = GetFileStream(projectFile)) { XElement projectXml = XElement.Load(stream); @@ -127,6 +137,9 @@ namespace Tango.AzureUtils.Deployment File.WriteAllText(tempFile, projectXml.ToString()); Process.Start(tempFile); + + await RequestConfirmation($"Please synchronize the database static collections between '{sourceSettings.DB_CATALOG}' and '{targetSettings.DB_CATALOG}'.\nPlease confirm in order to continue."); + OnProgress(AzureUtilsStage.Database, $"Waiting for database static collections synchronization..."); } } diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils/Environment/EnvironmentManager.cs b/Software/Visual_Studio/Azure/Tango.AzureUtils/Environment/EnvironmentManager.cs index c7e48fab1..822813742 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils/Environment/EnvironmentManager.cs +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils/Environment/EnvironmentManager.cs @@ -11,6 +11,8 @@ using Microsoft.Azure.Management.Sql.Fluent.Models; using Microsoft.WindowsAzure.Storage; using Tango.AzureUtils.ActiveDirectory; using Tango.AzureUtils.Deployment; +using Tango.BL; +using Tango.Core; using Tango.Core.DB; namespace Tango.AzureUtils.Environment @@ -18,88 +20,196 @@ namespace Tango.AzureUtils.Environment public class EnvironmentManager : AzureUtilsComponentBase { private ActiveDirectoryManager _adManager; + private DeploymentManager _deploymentManager; - public EnvironmentManager(IAzure azure, ActiveDirectoryManager activeDirectoryManager) : base(azure) + public EnvironmentManager(IAzure azure) : base(azure) { - _adManager = activeDirectoryManager; + _adManager = new ActiveDirectoryManager(azure, AzureUtilsAuthenticationFactory.GetCredentials()); + _adManager.ConfirmationRequired += (x, e) => OnRequestConfirmation(e); + _adManager.Progress += (x, e) => OnProgress(e); + + _deploymentManager = new DeploymentManager(azure); + _deploymentManager.ConfirmationRequired += (x, e) => OnRequestConfirmation(e); + _deploymentManager.Progress += (x, e) => OnProgress(e); } #region Deployment Slots - public async Task<IDeploymentSlot> CreateDeploymentSlot(IWebApp app, IDeploymentSlot existingSlot, String name, String adEmail, String adPassword) + public async Task<IDeploymentSlot> CreateDeploymentSlot(IWebApp app, IDeploymentSlot sourceSlot, String name, String adEmail, String adPassword) { - var settings = await existingSlot.GetMachineServiceSettingsAsync(); - String dbCatalog = $"Tango_{name}"; String machineStudioContainerName = $"machine-studio-versions-{name.ToLower()}"; String ppcContainerName = $"tango-versions-{name.ToLower()}"; String machineServiceBackupsContainerName = $"machine-service-backups-{name.ToLower()}"; String machineServiceLogsContainerName = $"machine-service-logs-{name.ToLower()}"; String environmentGroupName = $"Tango {name}"; + String slotName = app.Name + "-" + name; + OnProgress(AzureUtilsStage.Initializing, $"Retrieving '{sourceSlot.Name}' settings..."); + var settings = await sourceSlot.GetMachineServiceSettingsAsync(); + + OnProgress(AzureUtilsStage.EnvironmentGroup, $"Authenticating with active directory graph..."); await _adManager.Authenticate(adEmail, adPassword); if (!await _adManager.IsGroupExists(environmentGroupName)) { + OnProgress(AzureUtilsStage.EnvironmentGroup, $"Creating environment group '{environmentGroupName}'..."); await _adManager.AddGroup(environmentGroupName); + + OnProgress(AzureUtilsStage.EnvironmentGroup, $"Adding environment group user '{adEmail}'..."); await _adManager.AddUserToGroup(environmentGroupName, adEmail); } + else + { + await RequestConfirmation($"Environment group '{environmentGroupName}' already exists. Do you wish to continue?"); + } - return new object() as IDeploymentSlot; + OnProgress(AzureUtilsStage.DeploymentSlot, $"Checking '{app.Name}' deployment slots..."); + IDeploymentSlot slot = (await app.DeploymentSlots.ListAsync()).ToList().SingleOrDefault(x => x.Name == slotName); + + if (slot == null) + { + //Add Slot + OnProgress(AzureUtilsStage.DeploymentSlot, $"Creating new deployment slot '{slotName}'..."); - var dictionary = new Dictionary<string, string>(); - dictionary.Add(nameof(MachineServiceSettings.DB_ADDRESS), settings.DB_ADDRESS); - dictionary.Add(nameof(MachineServiceSettings.DB_CATALOG), dbCatalog); - dictionary.Add(nameof(MachineServiceSettings.DB_PASSWORD), settings.DB_PASSWORD); - dictionary.Add(nameof(MachineServiceSettings.DB_USER_NAME), settings.DB_USER_NAME); - dictionary.Add(nameof(MachineServiceSettings.DEPLOYMENT_SLOT), name); - dictionary.Add(nameof(MachineServiceSettings.ENFORCE_MACHINE_STUDIO_VERSION), settings.ENFORCE_MACHINE_STUDIO_VERSION); - dictionary.Add(nameof(MachineServiceSettings.ENVIRONMENT_GROUP), environmentGroupName); - dictionary.Add(nameof(MachineServiceSettings.STORAGE_ACCOUNT), settings.STORAGE_ACCOUNT); - dictionary.Add(nameof(MachineServiceSettings.MACHINE_STUDIO_VERSIONS_CONTAINER), machineStudioContainerName); - dictionary.Add(nameof(MachineServiceSettings.TANGO_VERSIONS_CONTAINER), ppcContainerName); + var dictionary = new Dictionary<string, string>(); + dictionary.Add(nameof(MachineServiceSettings.DB_ADDRESS), settings.DB_ADDRESS); + dictionary.Add(nameof(MachineServiceSettings.DB_CATALOG), dbCatalog); + dictionary.Add(nameof(MachineServiceSettings.DB_PASSWORD), settings.DB_PASSWORD); + dictionary.Add(nameof(MachineServiceSettings.DB_USER_NAME), settings.DB_USER_NAME); + dictionary.Add(nameof(MachineServiceSettings.DEPLOYMENT_SLOT), name); + dictionary.Add(nameof(MachineServiceSettings.ENFORCE_MACHINE_STUDIO_VERSION), settings.ENFORCE_MACHINE_STUDIO_VERSION); + dictionary.Add(nameof(MachineServiceSettings.ENVIRONMENT_GROUP), environmentGroupName); + dictionary.Add(nameof(MachineServiceSettings.STORAGE_ACCOUNT), settings.STORAGE_ACCOUNT); + dictionary.Add(nameof(MachineServiceSettings.MACHINE_STUDIO_VERSIONS_CONTAINER), machineStudioContainerName); + dictionary.Add(nameof(MachineServiceSettings.TANGO_VERSIONS_CONTAINER), ppcContainerName); - //Add Slot - var slot = await app.DeploymentSlots - .Define(app.Name + "-" + name) + slot = await app.DeploymentSlots + .Define(slotName) .WithBrandNewConfiguration() .WithWebAppAlwaysOn(true) .WithWebSocketsEnabled(true) .WithStickyAppSettings(dictionary) .WithStickyConnectionString(dbCatalog, $"Server=tcp:twine.database.windows.net,1433;Initial Catalog={dbCatalog};Persist Security Info=False;User ID=BackupUser;Password=Aa123456;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;", Microsoft.Azure.Management.AppService.Fluent.Models.ConnectionStringType.SQLAzure) .CreateAsync(); + } + else + { + await RequestConfirmation($"Deployment slot '{slotName}' already exists. Do you wish to continue."); + } //Add Database + OnProgress(AzureUtilsStage.Database, $"Checking twine database server..."); var sqlServer = (await Azure.SqlServers.ListAsync()).SingleOrDefault(x => x.Name == "twine"); - var database = await sqlServer.Databases.Define(dbCatalog).WithEdition(DatabaseEdition.Standard).CreateAsync(); + var existingDatabase = (await sqlServer.Databases.ListAsync()).SingleOrDefault(x => x.Name == dbCatalog); + + if (existingDatabase == null) + { + OnProgress(AzureUtilsStage.Database, $"Creating new database '{dbCatalog}'..."); + var database = await sqlServer.Databases.Define(dbCatalog).WithEdition(DatabaseEdition.Standard).CreateAsync(); + } + else + { + await RequestConfirmation($"Database '{dbCatalog}' already exists. Do you wish to continue?"); + } + + //Add permissions for environment group on database + OnProgress(AzureUtilsStage.Database, $"Adding environment group permissions on '{dbCatalog}'..."); + using (DbManager db = DbManager.FromDataSource(new DataSource() + { + Type = DataSourceType.Azure, + Address = settings.DB_ADDRESS, + Catalog = dbCatalog, + UserName = adEmail, + Password = adPassword, + IntegratedSecurity = false + })) + { + try + { + await db.ExecuteCommandAsync($"CREATE USER [{environmentGroupName}] FROM EXTERNAL PROVIDER"); + await db.ExecuteCommandAsync($"ALTER ROLE db_datareader ADD MEMBER [{environmentGroupName}];"); + await db.ExecuteCommandAsync($"ALTER ROLE db_datawriter ADD MEMBER [{environmentGroupName}];"); + } + catch (Exception ex) + { + await RequestConfirmation($"Error creating/adding permissions for environment group '{environmentGroupName}' on database.\n{ex.FlattenMessage()}\n\nDo you wish to continue?"); + } + } + + OnProgress(AzureUtilsStage.Database, $"Adding BackupUser permissions on '{dbCatalog}'..."); + //Create backup user using (DbManager db = DbManager.FromCredentials(settings.DB_ADDRESS, dbCatalog, settings.DB_USER_NAME, settings.DB_PASSWORD)) { - await db.ExecuteCommandAsync("CREATE USER [BackupUser] FOR LOGIN [BackupUser] WITH DEFAULT_SCHEMA=[dbo]"); - await db.ExecuteCommandAsync("EXEC sp_addrolemember N'db_owner', N'BackupUser'"); - await db.ExecuteCommandAsync("EXEC sp_addrolemember N'db_accessadmin', N'BackupUser'"); - await db.ExecuteCommandAsync("EXEC sp_addrolemember N'db_securityadmin', N'BackupUser'"); - await db.ExecuteCommandAsync("EXEC sp_addrolemember N'db_backupoperator', N'BackupUser'"); - await db.ExecuteCommandAsync("EXEC sp_addrolemember N'db_datareader', N'BackupUser'"); - await db.ExecuteCommandAsync("EXEC sp_addrolemember N'db_datawriter', N'BackupUser'"); + try + { + await db.ExecuteCommandAsync("CREATE USER [BackupUser] FOR LOGIN [BackupUser] WITH DEFAULT_SCHEMA=[dbo]"); + await db.ExecuteCommandAsync("EXEC sp_addrolemember N'db_owner', N'BackupUser'"); + await db.ExecuteCommandAsync("EXEC sp_addrolemember N'db_accessadmin', N'BackupUser'"); + await db.ExecuteCommandAsync("EXEC sp_addrolemember N'db_securityadmin', N'BackupUser'"); + await db.ExecuteCommandAsync("EXEC sp_addrolemember N'db_backupoperator', N'BackupUser'"); + await db.ExecuteCommandAsync("EXEC sp_addrolemember N'db_datareader', N'BackupUser'"); + await db.ExecuteCommandAsync("EXEC sp_addrolemember N'db_datawriter', N'BackupUser'"); + } + catch (Exception ex) + { + await RequestConfirmation($"Error creating/adding permissions for BackupUser on database.\n{ex.FlattenMessage()}\n\nDo you wish to continue?"); + } } + //Synchronize Schema + //await _deploymentManager.OpenSQLExaminerSchema(sourceSlot, slot); + //await RequestConfirmation($"Please synchronize the database schema between '{settings.DB_CATALOG}' and '{dbCatalog}'.\nPlease confirm in order to continue."); + //OnProgress(AzureUtilsStage.Database, $"Waiting for database schema synchronization..."); + + //await _deploymentManager.OpenSQLExaminerData(sourceSlot, slot, true); + //await RequestConfirmation($"Please synchronize the database static collections between '{settings.DB_CATALOG}' and '{dbCatalog}'.\nPlease confirm in order to continue."); + //OnProgress(AzureUtilsStage.Database, $"Waiting for database static collections synchronization..."); + + //OnProgress(AzureUtilsStage.Database, $"Retrieving latest Machine Studio version..."); + //var latestMsVersion = await _deploymentManager.GetLatestMachineStudioVersion(sourceSlot); + + //OnProgress(AzureUtilsStage.Database, $"Retrieving latest PPC version..."); + //var latestPPCVersion = await _deploymentManager.GetLatestPPCVersion(sourceSlot); + + //var targetSettings = await slot.GetMachineServiceSettingsAsync(); + + //using (ObservablesContext db = ObservablesContext.CreateDefault(targetSettings.ToDataSource())) + //{ + // db.MachineStudioVersions.Add(latestMsVersion); + // db.TangoVersions.Add(latestPPCVersion); + //} + //Add Storage Containers + OnProgress(AzureUtilsStage.Storage, $"Connecting to storage account..."); var targetAccount = CloudStorageAccount.Parse(settings.STORAGE_ACCOUNT); var targetClient = targetAccount.CreateCloudBlobClient(); + OnProgress(AzureUtilsStage.Storage, $"Creating storage container '{machineStudioContainerName}'..."); var machineStudioContainer = targetClient.GetContainerReference(machineStudioContainerName); await machineStudioContainer.CreateIfNotExistsAsync(); + OnProgress(AzureUtilsStage.Storage, $"Creating storage container '{ppcContainerName}'..."); var ppcContainer = targetClient.GetContainerReference(ppcContainerName); await ppcContainer.CreateIfNotExistsAsync(); + OnProgress(AzureUtilsStage.Storage, $"Creating storage container '{machineServiceBackupsContainerName}'..."); var machineServiceBackupsContainer = targetClient.GetContainerReference(machineServiceBackupsContainerName); await machineServiceBackupsContainer.CreateIfNotExistsAsync(); + OnProgress(AzureUtilsStage.Storage, $"Creating storage container '{machineServiceLogsContainerName}'..."); var machineServiceLogsContainer = targetClient.GetContainerReference(machineServiceLogsContainerName); await machineServiceLogsContainer.CreateIfNotExistsAsync(); + _deploymentManager.UpgradeConfiguration.UpgradeMachineService = true; + _deploymentManager.UpgradeConfiguration.UpgradeMachineStudio = true; + _deploymentManager.UpgradeConfiguration.UpgradePPC = true; + + await _deploymentManager.PerformFullUpgrade(sourceSlot, slot); + + OnProgress(AzureUtilsStage.Ready, "Deployment slot created successfully.", 0, 100, false); + return slot; } diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils/Tango.AzureUtils.csproj b/Software/Visual_Studio/Azure/Tango.AzureUtils/Tango.AzureUtils.csproj index 77547a85c..f7a0e2436 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils/Tango.AzureUtils.csproj +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils/Tango.AzureUtils.csproj @@ -226,6 +226,7 @@ <Compile Include="AzureUtilsAuthenticationFactory.cs" /> <Compile Include="AzureUtilsComponentBase.cs" /> <Compile Include="AzureUtilsCredentials.cs" /> + <Compile Include="AzureUtilsConfirmationEventArgs.cs" /> <Compile Include="Deployment\DeploymentManager.cs" /> <Compile Include="AzureUtilsProgressEventArgs.cs" /> <Compile Include="AzureUtilsStage.cs" /> @@ -244,6 +245,10 @@ <Link>Deployment\GENERAL_ENV_UPGRADE.seproj</Link> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="..\..\..\DB\SQLExaminer Projects\GENERAL_ENV_CREATE.sdeproj"> + <Link>Deployment\GENERAL_ENV_CREATE.sdeproj</Link> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <None Include="app.config" /> <None Include="packages.config" /> </ItemGroup> @@ -256,6 +261,10 @@ <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project> <Name>Tango.Core</Name> </ProjectReference> + <ProjectReference Include="..\..\Tango.Logging\Tango.Logging.csproj"> + <Project>{BC932DBD-7CDB-488C-99E4-F02CF441F55E}</Project> + <Name>Tango.Logging</Name> + </ProjectReference> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> </Project>
\ No newline at end of file |
