Exemplo n.º 1
0
        /// <summary>
        /// Method: Add
        /// Description: It is used to add new resource to resources table when provisioning the addon
        /// </summary>
        /// <param name="item"></param>
        public void Add(Resources item, OauthGrant?oauthGrant)
        {
            using (var transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    Console.WriteLine("Resource: " + JsonConvert.SerializeObject(item));
                    Console.WriteLine("Resource add starts");
                    _context.Resources.Add(item);
                    Console.WriteLine("Resource add ended");

                    HerokuAuthToken authToken = default(HerokuAuthToken);
                    if (oauthGrant.HasValue)
                    {
                        Console.WriteLine("Auth-Token get starts");
                        authToken = HerokuApi.GetAddonAccessTokenSync(oauthGrant.Value.code, oauthGrant.Value.type);
                        if (!authToken.IsNull())
                        {
                            Console.WriteLine("Auth-Token=> {0}:{1}", authToken.access_token, authToken.refresh_token);
                        }
                        else
                        {
                            throw new ArgumentNullException("Heroku access token not able to get");
                        }
                        Console.WriteLine("Auth-Token get ended");
                    }
                    else
                    {
                        Console.WriteLine("OAuth-Grant is null");
                        throw new ArgumentNullException("OAuth-Grant is null");
                    }

                    authToken.auth_id = item.uuid;
                    PartnerAuthTokens pAuthToken = authToken.ToPartnerAuthToken();
                    pAuthToken.oauth_code       = oauthGrant.Value.code;
                    pAuthToken.oauth_type       = oauthGrant.Value.type;
                    pAuthToken.oauth_expired_in = DateTime.Now.AddSeconds(280);
                    Console.WriteLine("AuthToken: " + JsonConvert.SerializeObject(pAuthToken));
                    Console.WriteLine("AuthToken add starts");
                    _context.PartnerAuthTokens.Add(pAuthToken);
                    Console.WriteLine("AuthToken add ended");
                    _context.SaveChanges();
                    transaction.Commit();
                    if (!authToken.IsNull())
                    {
                        var task = HerokuApi.AddUpdateMainAppConfigByResourceId(item.uuid, authToken.access_token);
                        task.Wait();
                    }
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw ex;
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Method: Add
        /// Description: It is used to add new token to parnerauthtoken table
        /// </summary>
        /// <param name="item"></param>
        public PartnerAuthTokens Add(PartnerAuthTokens item)
        {
            //Get AuthTokens by auth_id
            var entity = Find(item.auth_id);

            if (entity == null)
            {
                _context.PartnerAuthTokens.Add(item);
                _context.SaveChanges();

                //attach resource reference
                _context.Entry(item).Reference(e => e.Resource).Load();
            }
            else
            {
                entity.access_token          = item.access_token;
                entity.refresh_token         = item.refresh_token;
                entity.token_type            = item.token_type;
                entity.user_id               = item.user_id;
                entity.session_nonce         = item.session_nonce;
                entity.expires_in            = item.expires_in;
                _context.Entry(entity).State = EntityState.Modified;
                _context.SaveChanges();
            }

            //assign resource
            item.redirect_url = entity.redirect_url;
            item.Resource     = entity.Resource;
            return(item);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Method: AddEditExtensionsConfig
        /// Description: It is used to add/update connector in connectors table
        /// </summary>
        /// <param name="connectorConfig"></param>
        public void AddEditExtensionsConfig(ConnectorConfig connectorConfig)
        {
            using (var transaction = _context.Database.BeginTransaction())
            {
                Connectors    entity;
                DeDupSettings dedupSettings          = null;
                bool          isNew                  = false;
                int           isSyncTableExist       = 0;
                int           isSyncGoldenTableExist = 0;
                if (connectorConfig.connectorId.HasValue)
                {
                    entity = Find(connectorConfig.ccid, connectorConfig.connectorId);
                    if (entity != null)
                    {
                        //delete sync process if it is in progress while updating connector
                        if (!string.IsNullOrEmpty(entity.job_id) ||
                            entity.schedule_type != ScheduleType.MANUAL_SYNC)
                        {
                            //delete old jobs
                            JobScheduler.Instance.DeleteJob(ccid: entity.ccid, connectorId: entity.connector_id, jobId: entity.job_id, scheduleType: entity.schedule_type);

                            //reset job id once deleted
                            entity.job_id = string.Empty;
                            if (entity.sync_status == 1)
                            {
                                //set status interrupted
                                entity.sync_status = 10;
                            }
                            else if (entity.sync_status.HasValue)
                            {
                                //reset sync status
                                entity.sync_status = 0;
                            }
                        }
                        else if (entity.sync_status.HasValue)
                        {
                            //reset sync status
                            entity.sync_status = 0;
                        }

                        if (entity.sync_status != 2 && entity.sync_status != 10)
                        {
                            entity.sync_count           = null;
                            entity.unique_records_count = null;
                            entity.sync_updated_count   = null;
                            entity.total_records_count  = null;
                            entity.sync_log_json        = null;
                            entity.sync_started_at      = null;
                            entity.sync_ended_at        = null;
                            entity.last_sync_at         = null;
                            entity.last_sync_status     = null;
                        }

                        dedupSettings = entity.DeDupSetting;
                        //check table exist or not. if not then create table and sync
                        isSyncTableExist       = SyncRepository.SyncTableIsExist(connectorConfig);
                        isSyncGoldenTableExist = SyncRepository.SyncGoldenTableIsExist(connectorConfig);
                    }
                }
                else
                {
                    isNew  = true;
                    entity = new Connectors()
                    {
                        ccid = connectorConfig.ccid
                    };
                    //Set next connector id
                    entity.connector_id = GetMaxID(entity.ccid, ref dedupSettings) + 1;
                }

                entity.connector_name = connectorConfig.connectorName;
                if (isNew)
                {
                    entity.sync_src        = connectorConfig.dataSource;
                    entity.src_object_name = connectorConfig.sourceObjectName;
                    //commented by Kathir on 12-Aug-2020
                    // entity.src_object_fields_json = JsonConvert.SerializeObject(connectorConfig.sourceObjectFields);
                    if (entity.sync_src == DataSource.Heroku_Postgres ||
                        entity.sync_src == DataSource.Azure_Postgres ||
                        entity.sync_src == DataSource.AWS_Postgres ||
                        entity.sync_src == DataSource.Azure_SQL)
                    {
                        entity.src_config_json = JsonConvert.SerializeObject(connectorConfig.dbConfig);
                    }
                    if (connectorConfig.dedup_type != DedupType.Full_Dedup)
                    {
                        entity.connector_type   = (ConnectorType)connectorConfig.syncDestination;
                        entity.dest_object_name = connectorConfig.destObjectName;
                    }
                    else
                    {
                        if (connectorConfig.dataSource == DataSource.Heroku_Postgres)
                        {
                            entity.connector_type = ConnectorType.Heroku_Postgres;
                        }
                        if (connectorConfig.dataSource == DataSource.AWS_Postgres)
                        {
                            entity.connector_type = ConnectorType.AWS_Postgres;
                        }
                        if (connectorConfig.dataSource == DataSource.Azure_Postgres)
                        {
                            entity.connector_type = ConnectorType.Azure_Postgres;
                        }
                        entity.dest_object_name = string.Empty;
                    }
                    entity.src_schema        = connectorConfig.dbSchema;
                    entity.dedup_type        = connectorConfig.dedup_type;
                    entity.dedup_source_type = connectorConfig.dedupSourceType;
                    if ((connectorConfig.dedupSourceType == SourceType.Copy_Source_data_to_Destination_and_Remove_Duplicates_from_Destination || connectorConfig.dedupSourceType == SourceType.Merge_Table_A_Data_to_Table_B_and_Remove_Duplicates_from_Table_B))
                    {
                        entity.compare_object_fields = JsonConvert.SerializeObject(connectorConfig.compareObjectFieldsMapping);
                        entity.compare_config_json   = JsonConvert.SerializeObject(connectorConfig.dbConfig_compare);
                    }

                    //if (IsMultipleConfigSupported)
                    {
                        if (entity.connector_type == ConnectorType.Heroku_Postgres ||
                            entity.connector_type == ConnectorType.Azure_Postgres ||
                            entity.connector_type == ConnectorType.AWS_Postgres ||
                            entity.connector_type == ConnectorType.Azure_SQL)
                        {
                            entity.dest_config_json = JsonConvert.SerializeObject(connectorConfig.destDBConfig);
                        }
                    }

                    //set global db setting
                    if (dedupSettings != null)
                    {
                        //save sync database url
                        if (connectorConfig.dbConfig != null &&
                            !string.IsNullOrEmpty(connectorConfig.dbConfig.syncDefaultDatabaseUrl))
                        {
                            if (string.IsNullOrEmpty(dedupSettings.database_config_json))
                            {
                                dedupSettings.database_config_json  = JsonConvert.SerializeObject((new List <DatabaseConfig>()
                                {
                                    connectorConfig.dbConfig
                                }));
                                _context.Entry(dedupSettings).State = EntityState.Modified;
                            }
                            else
                            {
                                var dbConfigs = dedupSettings.ToModel <List <DatabaseConfig> >();
                                if (dbConfigs != null && dbConfigs.FirstOrDefault(p => p.databaseType == connectorConfig.dbConfig.databaseType) == null)
                                {
                                    dbConfigs.Add(connectorConfig.dbConfig);
                                    dedupSettings.database_config_json  = JsonConvert.SerializeObject(dbConfigs);
                                    _context.Entry(dedupSettings).State = EntityState.Modified;
                                }
                            }
                        }
                    }
                    else
                    {
                        dedupSettings = new DeDupSettings()
                        {
                            ccid = connectorConfig.ccid
                        };
                        //save sync database url
                        if (connectorConfig.dbConfig != null && !string.IsNullOrEmpty(connectorConfig.dbConfig.syncDefaultDatabaseUrl))
                        {
                            dedupSettings.database_config_json = JsonConvert.SerializeObject((new List <DatabaseConfig>()
                            {
                                connectorConfig.dbConfig
                            }));
                        }
                        //add dedupsetting
                        _context.Entry(dedupSettings).State = EntityState.Added;
                    }
                    entity.unique_records_count = null;
                    entity.sync_updated_count   = null;
                    entity.sync_count           = null;
                    entity.total_records_count  = null;
                }

                entity.schedule_type            = connectorConfig.scheduleType;
                entity.src_new_record_filter    = connectorConfig.srcNewRecordFilter;
                entity.src_update_record_filter = connectorConfig.srcUpdateRecordFilter;
                entity.two_way_sync_priority    = connectorConfig.twoWaySyncPriority;
                entity.dest_schema = connectorConfig.destDBSchema;
                entity.custom_schedule_in_minutes = connectorConfig.customScheduleInMinutes;
                //Added by Kathir on 20-8-2020
                entity.dedup_method = connectorConfig.dedup_method;
                //if (connectorConfig.dedup_method == SimilarityType.Fuzzy_Compare)
                //{
                //    entity.fuzzy_ratio = connectorConfig.fuzzy_ratio;
                //}
                entity.fuzzy_ratio          = connectorConfig.fuzzy_ratio;
                entity.review_before_delete = connectorConfig.review_before_delete;
                entity.backup_before_delete = connectorConfig.backup_before_delete;
                if (connectorConfig.dedup_type == DedupType.Full_Dedup)
                {
                    entity.simulation_count = -1;
                }
                else
                {
                    entity.simulation_count = connectorConfig.simulation_count;
                }
                if (string.IsNullOrEmpty(entity.src_object_name))
                {
                    entity.src_object_name = connectorConfig.sourceObjectName;
                }
                if ((connectorConfig.dedupSourceType == SourceType.Copy_Source_data_to_Destination_and_Remove_Duplicates_from_Destination || connectorConfig.dedupSourceType == SourceType.Merge_Table_A_Data_to_Table_B_and_Remove_Duplicates_from_Table_B))
                {
                    //entity.compare_object_fields = JsonConvert.SerializeObject(connectorConfig.compareObjectFieldsMapping);
                    entity.compare_config_json = JsonConvert.SerializeObject(connectorConfig.dbConfig_compare);
                }
                //commented by Kathir on 12-Aug-2020
                //if (string.IsNullOrEmpty(entity.src_object_fields_json))
                //{
                //    entity.src_object_fields_json = JsonConvert.SerializeObject(connectorConfig.sourceObjectFields);
                //}
                if (string.IsNullOrEmpty(entity.dest_object_name))
                {
                    if (connectorConfig.dedup_type == DedupType.Full_Dedup && connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table)
                    {
                        entity.dest_object_name = connectorConfig.sourceObjectName;
                    }
                    else if (connectorConfig.dedup_type == DedupType.Full_Dedup && (connectorConfig.dedupSourceType == SourceType.Copy_Source_data_to_Destination_and_Remove_Duplicates_from_Destination || connectorConfig.dedupSourceType == SourceType.Merge_Table_A_Data_to_Table_B_and_Remove_Duplicates_from_Table_B))
                    {
                        entity.dest_object_name = (connectorConfig.dbConfig_compare.table_type == SelectedTableType.Create_New_Table ? connectorConfig.dbConfig_compare.new_table_name : connectorConfig.dbConfig_compare.object_name);
                    }
                    else
                    {
                        entity.dest_object_name = connectorConfig.destObjectName;
                    }
                }
                //Assigned source object fields to compare object field json
                entity.compare_object_fields = JsonConvert.SerializeObject(connectorConfig.sourceObjectFields);
                //if (connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table)
                //{
                //    if (connectorConfig.sourceObjectFields != null && connectorConfig.sourceObjectFields.Count > 0)
                //    {
                //        foreach (string sel_fields in connectorConfig.sourceObjectFields)
                //        {
                //            connectorConfig.compareObjectFieldsMapping.Add(new KeyValuePair<string, string>(sel_fields, sel_fields));
                //        }
                //    }
                //    entity.compare_object_fields = JsonConvert.SerializeObject(connectorConfig.sourceObjectFields);
                //}
                if (connectorConfig.dedup_type == DedupType.Full_Dedup)
                {
                    entity.dest_object_name = (connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table ? connectorConfig.sourceObjectName : (connectorConfig.dbConfig_compare.table_type == SelectedTableType.Create_New_Table ? connectorConfig.dbConfig_compare.new_table_name : connectorConfig.dbConfig_compare.object_name));
                    connectorConfig.destDBConfig.syncDefaultDatabaseUrl = (connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table ? connectorConfig.dbConfig.syncDefaultDatabaseUrl : connectorConfig.dbConfig_compare.syncDefaultDatabaseUrl);

                    connectorConfig.destDBConfig.databaseType = (connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table ? connectorConfig.dbConfig.databaseType : connectorConfig.dbConfig_compare.databaseType);
                    connectorConfig.destDBConfig.dataSource   = (connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table ? connectorConfig.dbConfig.dataSource : connectorConfig.dbConfig_compare.dataSource);

                    entity.dest_config_json = JsonConvert.SerializeObject(connectorConfig.destDBConfig);
                    entity.dest_schema      = (connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table ? connectorConfig.dbSchema : connectorConfig.dbConfig_compare.db_schema);
                }
                //save extension setting
                _context.Entry(entity).State = isNew ? EntityState.Added : EntityState.Modified;
                _context.SaveChanges();
                //if (isSyncTableExist == 0 && connectorConfig.dedup_type != DedupType.Full_Dedup)
                //{
                //    var errorMessage = string.Empty;
                //    if (connectorConfig.syncDestination == ConnectorType.Heroku_Postgres
                //        || connectorConfig.syncDestination == ConnectorType.Azure_Postgres
                //        || connectorConfig.syncDestination == ConnectorType.AWS_Postgres)
                //    {
                //        var dbStatus = SyncRepository.CreatePostgresTable(connectorConfig, out errorMessage);
                //        if (dbStatus == -1)
                //        {
                //            transaction.Rollback();
                //            throw new Exception(message: (string.IsNullOrEmpty(errorMessage) ? "Not able to create postgres table." : errorMessage)) { };
                //        }
                //        else if (dbStatus == 2)
                //        {
                //            transaction.Rollback();
                //            throw new Exception(message: "The " + connectorConfig.destObjectName + " postgres table already exists.") { };
                //        }
                //    }
                //}
                //if (isSyncGoldenTableExist == 0 && connectorConfig.dbConfig_compare.table_type == SelectedTableType.Create_New_Table)
                //{
                //    var errorMessage = string.Empty;
                //    if (connectorConfig.dbConfig_compare.dataSource == DataSource.Heroku_Postgres
                //        || connectorConfig.dbConfig_compare.dataSource == DataSource.Azure_Postgres
                //        || connectorConfig.dbConfig_compare.dataSource == DataSource.AWS_Postgres)
                //    {
                //        var dbStatus = SyncRepository.CreatePostgresGoldenTable(connectorConfig, out errorMessage);
                //        if (dbStatus == -1)
                //        {
                //            transaction.Rollback();
                //            throw new Exception(message: (string.IsNullOrEmpty(errorMessage) ? "Not able to create postgres table." : errorMessage)) { };
                //        }
                //        else if (dbStatus == 2)
                //        {
                //            transaction.Rollback();
                //            throw new Exception(message: "The " + connectorConfig.dbConfig_compare.new_table_name + " postgres table already exists.") { };
                //        }
                //    }
                //}
                transaction.Commit();

                //Schedule job if scheduletype is not manual
                if (entity.schedule_type != ScheduleType.MANUAL_SYNC)
                {
                    if (entity.schedule_type == ScheduleType.CUSTOM)
                    {
                        JobScheduler.Instance.ScheduleJob(entity.ccid, entity.connector_id, entity.connector_type, entity.schedule_type, (entity.custom_schedule_in_minutes.HasValue ? entity.custom_schedule_in_minutes.Value : 1200));
                    }
                    else
                    {
                        JobScheduler.Instance.ScheduleJob(entity.ccid, entity.connector_id, entity.connector_type, entity.schedule_type);
                    }
                }
                //});
            }
        }
Exemplo n.º 4
0
 /// <summary>
 /// Method: Add
 /// Description: It is used to add new DeDupSettings to DeDupSettings table
 /// </summary>
 /// <param name="item"></param>
 public void Add(DeDupSettings item)
 {
     _context.DeDupSettings.Add(item);
     _context.SaveChanges();
 }