/*public void Tick(PerformContext hangfireContext) * { * Task.Run(async () => * { * try * { * hangfireContext.WriteLine("Starting to check."); * var containers = await _containerService.CheckAsync(); * bool anyUpdate = false; * * foreach (var container in containers) * { * hangfireContext.WriteLine($"{container.Name} {container.Folder}"); * var probes = container.CheckForProbes(); * * hangfireContext.WriteLine($"{container.Name} is updating.."); * * var provider = _providerFactory.GetProvider(container.Repository.Provider); * * var fileList = container.Update(provider); * * if (fileList.Count() > 0) * { * container.Repository.UpdatedTime = DateTime.Now; * anyUpdate = true; * * foreach (var item in fileList) * { * hangfireContext.WriteLine($"{container.Name} {item} file updated."); * } * * hangfireContext.WriteLine($"{container.Name} is updated."); * * var activatedProbes = probes.Where(i => fileList.Contains(i.Object.Path)); * * foreach (var item in activatedProbes) * { * hangfireContext.WriteLine($"{item.Object.Path} file's probe is activated."); * _jobClient.Enqueue<ProbeControl>(i => i.Execute(null, item.Id, container.Repository.Id)); * //BackgroundJob.Enqueue<ProbeControl>(i => i.Execute(null, item.Id, container.Repository.Id)); * } * } * else * { * hangfireContext.WriteLine($"{container.Name} no new changes."); * } * } * * if (anyUpdate) * { * await _context.SaveChangesAsync(); * } * * hangfireContext.WriteLine($"Total found containers {containers.Count()}."); * * hangfireContext.WriteLine("End of check."); * } * catch (Exception ex) * { * hangfireContext.WriteLine(ConsoleTextColor.Red, ex); * } * * * }); * * }*/ public void Trigger(PerformContext hangfireContext, string repoName, string owner, List <string> modified) { var repo = _context.Repositories.FirstOrDefault(i => i.Name.Equals(repoName) && i.OwnerName.Equals(owner)); if (repo != null) { var container = _containerService.GetContainer(repo); var probes = container.CheckForProbes(); var provider = _providerFactory.GetProvider(repo.Provider); container.Update(provider); foreach (var probe in probes) { if (modified.Contains(probe.Object.Path)) { hangfireContext?.WriteLine($"{probe.Object.Path} file's probe is activated."); _jobClient.Enqueue <ProbeControl>(i => i.Execute(null, probe.Id, repo.Id)); //BackgroundJob.Enqueue<ProbeControl>(i => i.Execute(null, probe.Id, container.Repository.Id)); } } } }
public static IUnitOfWork Create(IProviderFactory providerFactory, string providerName) { var connection = providerFactory.GetProvider(providerName).GetConnection(); connection.Open(); return(new UnitOfWork(connection)); }
public async Task PerformMonitoringAsync() { var vehiclesFromDb = await _vehicleRepository.GetAllAsync(); foreach (var vehicle in vehiclesFromDb) { // TODO: perform db request to get not archived if (vehicle.IsArchived) { continue; } var provider = _providerFactory.GetProvider(vehicle.Url); try { var newVehicleData = await provider.GetByUrlAsync(vehicle.Url); var newCost = newVehicleData.Costs[0].CostInUsd; var oldCost = vehicle.Costs.Last().CostInUsd; if (newCost != oldCost) { foreach (var vehicleUserId in vehicle.UserIds) { var user = await _userRepository.GetByIdAsync(vehicleUserId); await _botClient.SendTextMessageAsync(user.ChatId, $"Цена на {vehicle.Name} ({vehicle.Url}) изменилась! Новая цена - ${newCost}. Старая цена - ${oldCost}"); } } vehicle.Costs = vehicle.Costs.Concat(newVehicleData.Costs).ToArray(); await _vehicleRepository.UpdateAsync(vehicle); } catch (ProviderException exception) { switch (exception.Type) { case ProviderExceptionType.ProviderNotFound: break; case ProviderExceptionType.AdClosedOrNotFound: await ArchiveVehicle(vehicle); break; default: throw new NotSupportedException($"Exception type {exception.Type} is not supported"); } } } }
/*public void Execute(PerformContext hangfireContext, Container container) * { * if (!container.IsTriggrProject()) * return; * * var probes = container.CheckForProbes(); * hangfireContext.WriteLine($"Executing ProbeControl"); * * var codeChangeProbes = probes.Where(i => i.ProbeType == ProbeType.CodeChanges).ToList(); * * var oldFiles = new Dictionary<Probe, string>(); * if (codeChangeProbes.Count > 0) * { * foreach (var probe in codeChangeProbes) * { * var tempFile = Path.GetTempFileName(); * * var objectPath = Path.Combine(container.Folder, probe.Object.Path); * if (File.Exists(objectPath)) * { * hangfireContext.WriteLine($"Probe {probe.Object.Path}"); * * File.Copy(objectPath, tempFile, true); * * oldFiles.Add(probe, tempFile); * } * } * } * * var provider = _providerFactory.GetProvider(container.Repository.Provider); * var updatedPath = provider.Update(container.Repository); * * if (!string.IsNullOrEmpty(updatedPath)) * { * foreach (var probe in probes) * { * if (probe.ProbeType == ProbeType.CodeChanges) * { * var tempFile = oldFiles[probe]; * var objectPath = Path.Combine(container.Folder, probe.Object.Path); * var language = _languageService.Define(probe.Object.Path); * * var result = _scriptExecutor.Execute(probe.ProbeType, language.FolderName, * objectPath, tempFile, probe.Object.Type, probe.Object.Name); * * hangfireContext.WriteLine($"Result of comparision {result}"); * * // it will changed with executing shell script * } * } * } * hangfireContext.WriteLine($"Finished ProbeControl"); * * } */ public void Execute(PerformContext hangfireContext, string probeId, string repoId) { var repository = _dbContext.Repositories.Find(repoId); // get the repository if (repository != null) { var container = _containerService.GetContainer(repoId); // get the container // get all probes and look for probeId var probes = container.CheckForProbes(); var probe = probes.FirstOrDefault(i => i.Id.Equals(probeId)); if (probe != null) { hangfireContext?.WriteLine(ConsoleTextColor.Gray, $"{probe.Object.Path} is found."); // define the language var language = _languageService.Define(probe.Object.Path); // get the provider var provider = _providerFactory.GetProvider(repository.Provider); // restore to previous file if (provider.Restore(repository, probe.Object.Path, true)) { hangfireContext?.WriteLine(ConsoleTextColor.Gray, $"{probe.Object.Path} is restored to old."); // get the file path var objectPath = Path.Combine(container.Folder, probe.Object.Path); // look for the object var ast1 = _scriptExecutor.Execute("AST", language.FolderName, objectPath, probe.Object.Type, probe.Object.Name); hangfireContext?.WriteLine(ConsoleTextColor.Gray, $"{probe.Object.Path} old version is loaded."); var temp1 = WriteToTemp(ast1); // restore to original file if (provider.Restore(repository, probe.Object.Path, false)) { // look for the object var ast2 = _scriptExecutor.Execute("AST", language.FolderName, objectPath, probe.Object.Type, probe.Object.Name); var temp2 = WriteToTemp(ast2); hangfireContext?.WriteLine(ConsoleTextColor.Gray, $"{probe.Object.Path} new version is loaded."); Control(hangfireContext, probe, repository, temp1, temp2, language.FolderName); } } } } }
public static List <IProvider> GetProviders(string configuration) { var providers = new List <IProvider> { new OpenRepoProviderFactory().GetProvider(string.Empty) }; var lines = configuration.Split("\n"); IProviderFactory currentProviderFactory = null; foreach (var line in lines) { try { if (line.Trim().StartsWith('#') || string.IsNullOrEmpty(line.Trim())) { continue; // Lines starting with # is a comment. } if (line.StartsWith(' ') || line.StartsWith('\t')) { if (currentProviderFactory == null) { LogService.Log($"Please provide a provider before you add configuration."); continue; } providers.Add(currentProviderFactory.GetProvider(line.Trim())); } else if (!string.IsNullOrEmpty(line.Trim())) { var providerId = line.Replace(":", " ").Trim(); currentProviderFactory = m_factories.FirstOrDefault(f => f.Id == providerId); if (currentProviderFactory == null) { LogService.Log($"Can't find provider with id {providerId}"); } } } catch (Exception e) { LogService.Log("Config Error: <<" + line + ">> " + e.Message); } } return(providers); }
public async Task <bool> FetchProviderAssets(ProviderCredentials accountProvider, string password, string code, CancellationToken cancellationToken) { var providerUserName = _encryptorManager.Decrypt(accountProvider.ProviderUserName, password); var providerUserPassword = _encryptorManager.Decrypt(accountProvider.ProviderUserPassword, password); try { var provider = _providerFactory.GetProvider(accountProvider.ProviderName); var isLoginSuccessful = await provider.LoginAsync(providerUserName, providerUserPassword, code, cancellationToken); if (!isLoginSuccessful) { return(false); } var assets = await provider.GetAssetsAsync(cancellationToken); var dateTimeNow = DateTimeOffset.UtcNow; if (accountProvider.LastSuccessfulUpdate.Date == dateTimeNow.Date) { var sameDayAssets = await GetCurrentAssetsForProviderAsync(accountProvider.Email, accountProvider, cancellationToken); var deleteAssetsTasks = sameDayAssets.Select(a => DeleteAssetAsync(accountProvider.Email, a, cancellationToken)); await Task.WhenAll(deleteAssetsTasks); } var saveAssetsTask = assets.Select(a => { a.StorageDate = dateTimeNow; return(SetAssetAsync(accountProvider.Email, a, cancellationToken)); }); await Task.WhenAll(saveAssetsTask); await _accountProvidersManager.SetLastSuccessfulUpdate(accountProvider.Email, accountProvider, dateTimeNow, cancellationToken); return(true); } catch (Exception) { return(false); } }
private static MigrationOptions GetOptions(out IEnumerable <ProviderInfo> providerInfos) { IProviderMetadata metadata = A.Fake <IProviderMetadata>(); A.CallTo(() => metadata.MaximumDbObjectNameLength).Returns(MaximumSupportedLength); A.CallTo(() => metadata.MajorVersion).Returns(Platform.MajorVersion); A.CallTo(() => metadata.InvariantName).Returns("System.Data.Odbc"); // for the Odbc specific tests IProvider provider = new ProviderStub(); IProviderFactory providerFactory = A.Fake <IProviderFactory>(); A.CallTo(() => providerFactory.GetProvider(metadata)).Returns(provider); providerInfos = new[] { new ProviderInfo(provider, metadata) }; var options = new MigrationOptions(); options.SupportedPlatforms.AddOrReplaceMinimumRequirement(Platform); return(options); }
public virtual T GetProvider <T>() { var innerProvider = innerFactory.GetProvider <T>(); if (innerProvider is ISchemaProvider) { return((T)(object)new SchemaProvider((ISchemaProvider)innerProvider)); } if (innerProvider is ITextFolderProvider) { return((T)(object)new TextFolderProvider((ITextFolderProvider)innerProvider)); } if (innerProvider is IMediaFolderProvider) { return((T)(object)new MediaFolderProvider((IMediaFolderProvider)innerProvider)); } return(innerProvider); }
public Container GetContainer(Repository repository) { Container result = null; var provider = _providerFactory.GetProvider(repository.Provider); string path = string.Empty; if (!provider.Exist(repository)) { path = provider.Clone(repository); } else { path = _storage.Combine(repository.Id); } result = new Container($"Container #{repository.Id}", path, repository) { UpdatedTime = repository.UpdatedTime }; return(result); }
public static List <IProvider> GetProviders(string configuration) { var providers = new List <IProvider>(); var lines = configuration.Split("\n"); IProviderFactory currentProviderFactory = null; foreach (var line in lines) { if (line.Trim().StartsWith('#')) { continue; // Lines starting with # is a comment. } if (line.StartsWith(' ') || line.StartsWith('\t')) { if (currentProviderFactory == null) { LogService.Log($"Please provider a provider before you configure nothing?"); continue; } providers.Add(currentProviderFactory.GetProvider(line.Trim())); } else if (!string.IsNullOrEmpty(line.Trim())) { var providerId = line.Replace(":", " ").Trim(); currentProviderFactory = m_factories.FirstOrDefault(f => f.Id == providerId); if (currentProviderFactory == null) { LogService.Log($"Can't find provider with id {providerId}"); } } } return(providers); }
public async Task <IEnumerable <HandlerResult> > HandleContextAsync(Message message) { var user = await _userRepository.GetByChatIdAsync(message.UserInfo.ChatId); var existingVehicle = await _vehicleRepository.GetByUrlAsync(message.Text); if (existingVehicle != null) { if (existingVehicle.UserIds.Contains(user.Id)) { user.Status = null; await _userRepository.UpdateAsync(user); return(new[] { new HandlerResult { Message = "Вы уже добавили эту ссылку. /help" } }); } user.VehicleIds = user.VehicleIds.Concat(new[] { existingVehicle.Id }).ToArray(); await _userRepository.UpdateAsync(user); existingVehicle.UserIds = existingVehicle.UserIds.Concat(new[] { user.Id }).ToArray(); await _vehicleRepository.UpdateAsync(existingVehicle); // TODO: refactor code duplication return(new[] { new HandlerResult { Message = "Ссылка сохранена. Я уведомлю вас когда цена изменится. /help" } }); } try { var vehicle = await _providerFactory.GetProvider(message.Text).GetByUrlAsync(message.Text); vehicle.UserIds = new[] { user.Id }; await _vehicleRepository.InsertAsync(vehicle); user.VehicleIds = user.VehicleIds.Concat(new[] { vehicle.Id }).ToArray(); user.Status = null; await _userRepository.UpdateAsync(user); return(new[] { new HandlerResult { Message = "Ссылка сохранена. Я уведомлю вас когда цена изменится. /help" } }); } catch (ProviderException exception) { var resultMessage = exception.Type switch { ProviderExceptionType.ProviderNotFound => "Извините, на данный момент мы не поддерживаем данного провайдера, либо вы отправили некорректную ссылку. Попробуйте еще раз.", ProviderExceptionType.AdClosedOrNotFound => "Извините, объявление закрыто или не найдено. Попробуйте еще раз.", _ => throw new NotSupportedException($"Exception with type {exception.Type} is not supported") }; return(new[] { new HandlerResult { Message = resultMessage } }); } } }
public ProviderInfo GetExactly(DbPlatform dbPlatform) { IProviderMetadata metadata = _providerFactory.GetProviderMetadatas().Single(m => m.Platform == dbPlatform.Platform && m.MajorVersion == dbPlatform.MajorVersion && m.Driver == dbPlatform.Driver); return(new ProviderInfo(_providerFactory.GetProvider(metadata), metadata)); }