public List <EventData> Get(string Project, long LastEventId)
 {
     return(SqlConnector.GetUserVotes(Project, LastEventId));
 }
示例#2
0
 public RemovePlaylist(IUserPlaylistViewModel viewModel)
 {
     this._viewModel      = viewModel;
     this._listRepository = new PlaylistRepository(SqlConnector.GetDefaultConnection());
 }
 public void Post(long IssueId, [FromBody] IssueDiagnosticData Data)
 {
     SqlConnector.AddDiagnostic(IssueId, Data);
 }
 public void Put(long BuildId, [FromBody] IssueBuildUpdateData Data)
 {
     SqlConnector.UpdateBuild(BuildId, Data.Outcome);
 }
 public void Delete(long id)
 {
     SqlConnector.DeleteIssue(id);
 }
        public object Post(long IssueId, [FromBody] IssueBuildData Data)
        {
            long BuildId = SqlConnector.AddBuild(IssueId, Data);

            return(new { Id = BuildId });
        }
示例#7
0
        public static List <T> ToListWithInvalidation <T>(this IQueryable <T> simpleQuery, Type type, string exceptionContext, Action <SqlNotificationEventArgs> invalidation)
        {
            if (!WithSqlDependency)
            {
                throw new InvalidOperationException("ToListWithInvalidation requires SqlDependency");
            }

            ITranslateResult tr;

            using (ObjectName.OverrideOptions(new ObjectNameOptions {
                AvoidDatabaseName = true
            }))
                tr = ((DbQueryProvider)simpleQuery.Provider).GetRawTranslateResult(simpleQuery.Expression);

            OnChangeEventHandler onChange = (object sender, SqlNotificationEventArgs args) =>
            {
                try
                {
                    if (args.Type != SqlNotificationType.Change)
                    {
                        throw new InvalidOperationException(
                                  "Problems with SqlDependency (Type : {0} Source : {1} Info : {2}) on query: \r\n{3}"
                                  .FormatWith(args.Type, args.Source, args.Info, tr.MainCommand.PlainSql()));
                    }

                    if (args.Info == SqlNotificationInfo.PreviousFire)
                    {
                        throw new InvalidOperationException("The same transaction that loaded the data is invalidating it!")
                              {
                                  Data = { { "query", tr.MainCommand.PlainSql() } }
                              }
                    }
                    ;

                    if (CacheLogic.LogWriter != null)
                    {
                        CacheLogic.LogWriter.WriteLine("Change ToListWithInvalidations {0} {1}".FormatWith(typeof(T).TypeName()), exceptionContext);
                    }

                    invalidation(args);
                }
                catch (Exception e)
                {
                    e.LogException(c => c.ControllerName = exceptionContext);
                }
            };

            SimpleReader reader = null;

            Expression <Func <IProjectionRow, T> > projectorExpression = (Expression <Func <IProjectionRow, T> >)tr.GetMainProjector();
            Func <IProjectionRow, T> projector = projectorExpression.Compile();

            List <T> list = new List <T>();

            CacheLogic.AssertSqlDependencyStarted();

            Table        table = Schema.Current.Table(type);
            DatabaseName db    = table.Name.Schema?.Database;

            SqlConnector subConnector = ((SqlConnector)Connector.Current).ForDatabase(db);

            if (CacheLogic.LogWriter != null)
            {
                CacheLogic.LogWriter.WriteLine("Load ToListWithInvalidations {0} {1}".FormatWith(typeof(T).TypeName()), exceptionContext);
            }

            using (new EntityCache())
                using (var r = EntityCache.NewRetriever()) {
                    subConnector.ExecuteDataReaderDependency(tr.MainCommand, onChange, StartSqlDependencyAndEnableBrocker, fr =>
                    {
                        if (reader == null)
                        {
                            reader = new SimpleReader(fr, r);
                        }

                        list.Add(projector(reader));
                    }, CommandType.Text);

                    r.CompleteAll();
                }

            return(list);
        }
 public void Put(long id, IssueUpdateData Issue)
 {
     SqlConnector.UpdateIssue(id, Issue);
 }
 public FlightModel GetLatest()
 {
     return(SqlConnector.GetLatestFlight());
 }
 public int GetLatestID()
 {
     return(SqlConnector.GetLatestFlightID());
 }
 public IEnumerable <FlightModel> FlightByMonth(int MonthNumber)
 {
     return(SqlConnector.GetFlightByMonth(MonthNumber));
 }
 public FlightModel FlightByID(int FlightID)
 {
     return(SqlConnector.GetFlightByID(FlightID));
 }
 public FlightModel FlightByDate(string BookDate)
 {
     return(SqlConnector.GetFlightByDate(BookDate));
 }
 public IEnumerable <FlightModel> Get()
 {
     return(SqlConnector.GetFlights_All());
 }
示例#15
0
        public static void StartSqlDependencyAndEnableBrocker()
        {
            if (!WithSqlDependency)
            {
                started = true;
                return;
            }

            lock (startKeyLock)
            {
                SqlConnector connector = (SqlConnector)Connector.Current;

                if (DropStaleServices)
                {
                    //to avoid massive logs with SqlQueryNotificationStoredProcedure
                    //http://rusanu.com/2007/11/10/when-it-rains-it-pours/
                    var staleServices = (from s in Database.View <SysServiceQueues>()
                                         where s.activation_procedure != null && !Database.View <SysProcedures>().Any(p => "[" + p.Schema().name + "].[" + p.name + "]" == s.activation_procedure)
                                         select new ObjectName(new SchemaName(null, s.Schema().name), s.name)).ToList();

                    foreach (var s in staleServices)
                    {
                        TryDropService(s.Name);
                        TryDropQueue(s);
                    }

                    var oldProcedures = (from p in Database.View <SysProcedures>()
                                         where p.name.Contains("SqlQueryNotificationStoredProcedure-") && !Database.View <SysServiceQueues>().Any(s => "[" + p.Schema().name + "].[" + p.name + "]" == s.activation_procedure)
                                         select new ObjectName(new SchemaName(null, p.Schema().name), p.name)).ToList();

                    foreach (var item in oldProcedures)
                    {
                        Executor.ExecuteNonQuery(new SqlPreCommandSimple($"DROP PROCEDURE {item.ToString()}"));
                    }
                }

                foreach (var database in Schema.Current.DatabaseNames())
                {
                    SqlConnector sub = connector.ForDatabase(database);

                    try
                    {
                        try
                        {
                            SqlDependency.Start(sub.ConnectionString);
                        }
                        catch (InvalidOperationException ex)
                        {
                            string databaseName = database?.ToString() ?? Connector.Current.DatabaseName();

                            if (ex.Message.Contains("SQL Server Service Broker"))
                            {
                                EnableOrCreateBrocker(databaseName);

                                SqlDependency.Start(sub.ConnectionString);
                            }
                        }
                    }
                    catch (SqlException e)
                    {
                        if (e.Number == 2797)
                        {
                            string currentUser = (string)Executor.ExecuteDataTable("SELECT CURRENT_USER").Rows[0][0];

                            Executor.ExecuteNonQuery("ALTER USER [{0}]  WITH DEFAULT_SCHEMA = dbo;".FormatWith(currentUser));

                            SqlDependency.Start(sub.ConnectionString);
                        }
                        else
                        {
                            throw e;
                        }
                    }
                }

                RegisterOnShutdown();

                started = true;
            }
        }
 public IssueData Get(long id)
 {
     return(SqlConnector.GetIssue(id));
 }
 public void Post([FromBody] TelemetryErrorData Data, string Version, string IpAddress)
 {
     SqlConnector.PostErrorData(Data, Version, IpAddress);
 }
        public object Post(IssueData Issue)
        {
            long IssueId = SqlConnector.AddIssue(Issue);

            return(new { Id = IssueId });
        }
示例#19
0
        static void Main(string[] args)
        {
            Console.WriteLine("TransactionEngine - I do as I told");

            // Init
            var unitConverion = new Nethereum.Util.UnitConversion();

            var kv = new KeyVault(ConfigurationManager.AppSettings["AzureKeyVaultUri"],
                                  ConfigurationManager.AppSettings["applicationId"],
                                  ConfigurationManager.AppSettings["applicationSecret"]);

            var encryptionKeyName = ConfigurationManager.AppSettings["EncryptionKeyName"];
            var decryptionKeyName = ConfigurationManager.AppSettings["DecryptionKeyName"];
            var signKeyName       = ConfigurationManager.AppSettings["SignKeyName"];
            var verifyKeyName     = ConfigurationManager.AppSettings["VerifyKeyName"];

            var encryptionCertPassword = ConfigurationManager.AppSettings["EncryptionCertPassword"];
            var decryptionCertPassword = ConfigurationManager.AppSettings["DecryptionCertPassword"];
            var signCertPassword       = ConfigurationManager.AppSettings["SignCertPassword"];
            var verifyCertPassword     = ConfigurationManager.AppSettings["VerifyCertPassword"];

            var secretsMgmnt =
                new KeyVaultCryptoActions(
                    new CertificateInfo(encryptionKeyName, encryptionCertPassword),
                    new CertificateInfo(decryptionKeyName, decryptionCertPassword),
                    new CertificateInfo(signKeyName, signCertPassword),
                    new CertificateInfo(verifyKeyName, verifyCertPassword),
                    kv,
                    kv);

            secretsMgmnt.InitializeAsync().Wait();

            //var securedComm = new RabbitMQBusImpl(ConfigurationManager.AppSettings["rabbitMqUri"], secretsMgmnt, true, "securedCommExchange");
            var queueClient =
                new CloudQueueClientWrapper(ConfigurationManager.AppSettings["AzureStorageConnectionString"]);

            var securedCommForTransactions  = new AzureQueue("transactions", queueClient, secretsMgmnt, true);
            var securedCommForNotifications = new AzureQueue("notifications", queueClient, secretsMgmnt, true);
            var taskInitTransactions        = securedCommForTransactions.InitializeAsync();
            var taskInitNotifications       = securedCommForNotifications.InitializeAsync();

            Task.WhenAll(taskInitTransactions, taskInitNotifications).Wait();

            var sqlDb = new SqlConnector(ConfigurationManager.AppSettings["SqlUserID"],
                                         ConfigurationManager.AppSettings["SqlPassword"],
                                         ConfigurationManager.AppSettings["SqlInitialCatalog"],
                                         ConfigurationManager.AppSettings["SqlDataSource"],
                                         ConfigurationManager.AppSettings["applicationId"],
                                         ConfigurationManager.AppSettings["applicationSecret"]);

            sqlDb.Initialize().Wait();
            var ethereumNodeWrapper = new EthereumAccount(sqlDb, ConfigurationManager.AppSettings["EthereumNodeUrl"]);

            // Listen on transactions requests, process them and notify the users when done
            securedCommForTransactions.DequeueAsync(
                msg =>
            {
                Console.WriteLine("Got work!");

                var data           = Communication.Utils.FromByteArray <string>(msg);
                var msgArray       = data.Split(';');
                var amount         = unitConverion.ToWei(msgArray[0]);
                var senderName     = msgArray[1];
                var reciverAddress = msgArray[2];

                try
                {
                    var transactionHash = ethereumNodeWrapper
                                          .SignTransactionAsync(senderName, reciverAddress, amount).Result;
                    var transactionResult = ethereumNodeWrapper.SendRawTransactionAsync(transactionHash).Result;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                    throw;
                }

                // Wait for miner
                Thread.Sleep(3000);

                // notify a user about his balance change
                securedCommForNotifications.EnqueueAsync(Communication.Utils.ToByteArray(reciverAddress)).Wait();
            },
                (message) => { Console.WriteLine("Verification failure, doing nothing"); },
                TimeSpan.FromSeconds(3)).Wait();
        }
 public List <IssueBuildData> Get(long IssueId)
 {
     return(SqlConnector.GetBuilds(IssueId));
 }
 public List <string> Get(long IssueId)
 {
     return(SqlConnector.GetWatchers(IssueId));
 }
 public List <IssueDiagnosticData> Get(long IssueId)
 {
     return(SqlConnector.GetDiagnostics(IssueId));
 }
 public void Post(long IssueId, [FromBody] IssueWatcherData Data)
 {
     SqlConnector.AddWatcher(IssueId, Data.UserName);
 }
 public IssueBuildData Get(long BuildId)
 {
     return(SqlConnector.GetBuild(BuildId));
 }
 public void Delete(long IssueId, [FromBody] IssueWatcherData Data)
 {
     SqlConnector.RemoveWatcher(IssueId, Data.UserName);
 }
示例#26
0
 public LatestData Get(string Project = null)
 {
     return(SqlConnector.GetLastIds(Project));
 }
 public List <IssueData> Get(bool IncludeResolved = false, int MaxResults = -1)
 {
     return(SqlConnector.GetIssues(IncludeResolved, MaxResults));
 }
 public void Post([FromBody] EventData Event)
 {
     SqlConnector.PostEvent(Event);
 }
 public List <IssueData> Get(string User)
 {
     return(SqlConnector.GetIssues(User));
 }
示例#30
0
 private void DropDatabase(SqlConnector newDatabase)
 {
     DisconnectedTools.DropDatabase(new DatabaseName(null, newDatabase.DatabaseName()));
 }
示例#31
0
 /// <summary>
 /// Connects the bot to the SQL database.
 /// </summary>
 private SqlConnector ConnectDatabase(Backend backend)
 {
     var sqlConnector = new SqlConnector();
     Logger.Log(this, "Connecting to the database", LogLevel.Info);
     try
     {
         if (sqlConnector.OpenConnection(backend.ConnectionString))
             Logger.Log(this, "Database connection established", LogLevel.Info);
         else
             Logger.Log(this, "Database connection not established. Statistics collection will not be possible.", LogLevel.Warning);
     }
     catch (Exception e)
     {
         Logger.LogException(this, e, "trying to connect to the database");
     }
     return sqlConnector;
 }