コード例 #1
0
        public async Task DeleteAll()
        {
            using (WriteLock.Write())
            {
                using (var connection = CreateConnection())
                {
                    connection.RunInTransaction(db =>
                    {
                        var commandText = "delete from FileOrganizerResults";

                        db.Execute(commandText);
                    }, TransactionMode);
                }
            }
        }
コード例 #2
0
        public void DeleteAllSmartMatch()
        {
            using (WriteLock.Write())
            {
                using (var connection = CreateConnection())
                {
                    connection.RunInTransaction(db =>
                    {
                        var commandText = "delete from SmartMatch";

                        db.Execute(commandText);
                    }, TransactionMode);
                }
            }
        }
コード例 #3
0
        public int RemoveUnknownUsers(List <string> known_user_ids)
        {
            string sql_query = "delete from PlaybackActivity " +
                               "where UserId not in ('" + string.Join("', '", known_user_ids) + "') ";

            using (WriteLock.Write())
            {
                using var connection = CreateConnection();
                connection.RunInTransaction(db =>
                {
                    db.Execute(sql_query);
                }, TransactionMode);
            }
            return(1);
        }
コード例 #4
0
        /// <summary>
        /// Persists the user data.
        /// </summary>
        /// <param name="userId">The user id.</param>
        /// <param name="key">The key.</param>
        /// <param name="userData">The user data.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>Task.</returns>
        public async Task PersistUserData(Guid userId, string key, UserItemData userData, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            using (WriteLock.Write())
            {
                using (var connection = CreateConnection())
                {
                    connection.RunInTransaction(db =>
                    {
                        SaveUserData(db, userId, key, userData);
                    }, TransactionMode);
                }
            }
        }
コード例 #5
0
        public void AddComponentAsType(EntityComponentBase component, Type type)
        {
            using (UpgradeableReadLock.CreateLock(m_componentsSortedLock))
            {
                if (m_componentsSorted.ContainsKey(type.FullName.GetHashCode()))
                {
                    return;
                }

                using (WriteLock.CreateLock(m_componentsSortedLock))
                {
                    m_componentsSorted[type.FullName.GetHashCode()] = component;
                }
            }
        }
コード例 #6
0
        /// <summary>
        /// Opens the connection to the database
        /// </summary>
        /// <returns>Task.</returns>
        public void Initialize(ReaderWriterLockSlim writeLock, ManagedConnection managedConnection)
        {
            _connection = managedConnection;

            WriteLock.Dispose();
            WriteLock = writeLock;

            using (var connection = CreateConnection())
            {
                string[] queries =
                {
                    "create table if not exists userdata (key nvarchar, userId GUID, rating float null, played bit, playCount int, isFavorite bit, playbackPositionTicks bigint, lastPlayedDate datetime null)",

                    "create table if not exists DataSettings (IsUserDataImported bit)",

                    "drop index if exists idx_userdata",
                    "drop index if exists idx_userdata1",
                    "drop index if exists idx_userdata2",
                    "drop index if exists userdataindex1",

                    "create unique index if not exists userdataindex on userdata (key, userId)",
                    "create index if not exists userdataindex2 on userdata (key, userId, played)",
                    "create index if not exists userdataindex3 on userdata (key, userId, playbackPositionTicks)",
                    "create index if not exists userdataindex4 on userdata (key, userId, isFavorite)",

                    "pragma shrink_memory"
                };

                connection.RunQueries(queries);

                connection.RunInTransaction(db =>
                {
                    var existingColumnNames = GetColumnNames(db, "userdata");

                    AddColumn(db, "userdata", "AudioStreamIndex", "int", existingColumnNames);
                    AddColumn(db, "userdata", "SubtitleStreamIndex", "int", existingColumnNames);
                }, TransactionMode);

                try
                {
                    ImportUserDataIfNeeded(connection);
                }
                catch (Exception ex)
                {
                    Logger.ErrorException("Error in ImportUserDataIfNeeded", ex);
                }
            }
        }
コード例 #7
0
        public ZooKeeperLockProvider(string connectionString, ILoggerFactory loggerFactory)
        {
            throw new NotImplementedException();

            _logger           = loggerFactory.CreateLogger <ZooKeeperLockProvider>();
            _connectionString = connectionString;
            WriteLock wl = new WriteLock(GetSession(), @"/workflow_locks", null);
            //try
            //{
            //    //todo: clean this up
            //    //wl.Lock().Wait();
            //}
            //catch
            //{
            //}
        }
コード例 #8
0
 /// <summary>
 /// protected method allow the inheritor to add many types at once
 /// </summary>
 /// <param name="types"></param>
 protected void AddTypes(IEnumerable <Type> types)
 {
     using (var l = new WriteLock(_lock))
     {
         foreach (var t in types)
         {
             EnsureCorrectType(t);
             if (InstanceTypes.Contains(t))
             {
                 throw new InvalidOperationException("The Type " + t + " already exists in the collection");
             }
             ;
             InstanceTypes.Add(t);
         }
     }
 }
コード例 #9
0
ファイル: ActorContext.cs プロジェクト: teoadal/velo
        public bool Remove(Actor actor)
        {
            bool removeResult;

            using (WriteLock.Enter(_actorsLock))
            {
                removeResult = _actors.Remove(actor.Id);
            }

            if (removeResult)
            {
                Unsubscribe(actor);
            }

            return(removeResult);
        }
コード例 #10
0
ファイル: ActorFilter2.cs プロジェクト: teoadal/velo
        private void OnActorAdded(Actor actor)
        {
            if (!actor.TryGetComponents <TComponent1, TComponent2>(out var component1, out var component2))
            {
                return;
            }

            var wrapper = new Actor <TComponent1, TComponent2>(actor, component1, component2);

            using (WriteLock.Enter(_lock))
            {
                _actors.Add(wrapper);
            }

            OnWrapperAdded(wrapper);
        }
コード例 #11
0
        private void TryAdd(TKey local1, CacheKey <TKey, TValue> key1)
        {
            IDisposable disposable = WriteLock.TryEnter(this.readerWriterLockSlim, base.LockTimeout);

            try
            {
                this.cacheKeys.Add(local1, key1);
            }
            finally
            {
                if (disposable != null)
                {
                    disposable.Dispose();
                }
            }
        }
コード例 #12
0
        private void OnActorComponentAdded(Actor actor, IComponent component)
        {
            if (!(component is TComponent found))
            {
                return;
            }

            var wrapper = new Actor <TComponent>(actor, found);

            using (WriteLock.Enter(_lock))
            {
                _actors.Add(wrapper);
            }

            OnWrapperAdded(wrapper);
        }
コード例 #13
0
        private void TryCacheItemRemove(TKey local1)
        {
            IDisposable disposable = WriteLock.TryEnter(this.readerWriterLockSlim, base.LockTimeout);

            try
            {
                this.cacheKeys.Remove(local1);
            }
            finally
            {
                if (disposable != null)
                {
                    disposable.Dispose();
                }
            }
        }
        private void InitializeInternal()
        {
            using (WriteLock.Write())
            {
                using var connection = CreateConnection();
                _logger.LogInformation("Initialize PlaybackActivity Repository");

                string        sql_info = "pragma table_info('PlaybackActivity')";
                List <string> cols     = new List <string>();
                foreach (var row in connection.Query(sql_info))
                {
                    string table_schema = row[1].ToString().ToLower() + ":" + row[2].ToString().ToLower();
                    cols.Add(table_schema);
                }
                string actual_schema   = string.Join("|", cols);
                string required_schema = "datecreated:datetime|userid:text|itemid:text|itemtype:text|itemname:text|playbackmethod:text|clientname:text|devicename:text|playduration:int";
                if (required_schema != actual_schema)
                {
                    _logger.LogInformation("PlaybackActivity table schema miss match!");
                    _logger.LogInformation("Expected : {RequiredSchema}", required_schema);
                    _logger.LogInformation("Received : {ActualSchema}", actual_schema);
                    _logger.LogInformation("Dropping and recreating PlaybackActivity table");
                    connection.Execute("drop table if exists PlaybackActivity");
                }
                else
                {
                    _logger.LogInformation("PlaybackActivity table schema OK");
                    _logger.LogInformation("Expected : {RequiredSchema}", required_schema);
                    _logger.LogInformation("Received : {ActualSchema}", actual_schema);
                }

                // ROWID
                connection.Execute("create table if not exists PlaybackActivity (" +
                                   "DateCreated DATETIME NOT NULL, " +
                                   "UserId TEXT, " +
                                   "ItemId TEXT, " +
                                   "ItemType TEXT, " +
                                   "ItemName TEXT, " +
                                   "PlaybackMethod TEXT, " +
                                   "ClientName TEXT, " +
                                   "DeviceName TEXT, " +
                                   "PlayDuration INT" +
                                   ")");

                connection.Execute("create table if not exists UserList (UserId TEXT)");
            }
        }
コード例 #15
0
ファイル: Actor.cs プロジェクト: teoadal/velo
        public void AddComponents(params IComponent[] components)
        {
            using (WriteLock.Enter(_lock))
            {
                CollectionUtils.EnsureCapacity(ref _components, _componentsLength + components.Length);

                foreach (var component in components)
                {
                    CollectionUtils.Insert(ref _components, _componentsLength++, component);
                }
            }

            foreach (var component in components)
            {
                OnComponentAdded(component);
            }
        }
コード例 #16
0
 public void RemoveCheckpoint(Guid checkpointId)
 {
     using (WriteLock.Write())
     {
         using (var connection = CreateConnection())
         {
             connection.RunInTransaction(db =>
             {
                 using (var statement = db.PrepareStatement($"delete from {CheckpointsTable} where Guid=@Guid;"))
                 {
                     statement.TryBind("@Guid", checkpointId);
                     statement.MoveNext();
                 }
             }, TransactionMode);
         }
     }
 }
コード例 #17
0
        public async Task DeleteAll()
        {
            await WriteLock.WaitAsync().ConfigureAwait(false);

            IDbTransaction transaction = null;

            try
            {
                transaction = _connection.BeginTransaction();

                _deleteAllCommand.Transaction = transaction;

                _deleteAllCommand.ExecuteNonQuery();

                transaction.Commit();
            }
            catch (OperationCanceledException)
            {
                if (transaction != null)
                {
                    transaction.Rollback();
                }

                throw;
            }
            catch (Exception e)
            {
                Logger.ErrorException("Failed to delete results", e);

                if (transaction != null)
                {
                    transaction.Rollback();
                }

                throw;
            }
            finally
            {
                if (transaction != null)
                {
                    transaction.Dispose();
                }

                WriteLock.Release();
            }
        }
コード例 #18
0
        /// <summary>
        /// Retrieve all users from the database
        /// </summary>
        /// <returns>IEnumerable{User}.</returns>
        public List <User> RetrieveAllUsers()
        {
            var list = new List <User>();

            using (WriteLock.Read())
            {
                using (var connection = CreateConnection(true))
                {
                    foreach (var row in connection.Query("select id,guid,data from LocalUsersv2"))
                    {
                        list.Add(GetUser(row));
                    }
                }
            }

            return(list);
        }
コード例 #19
0
        /// <summary>
        /// Retrieve all groups from the database
        /// </summary>
        /// <returns>IEnumerable{Group}.</returns>
        public List <Group> RetrieveAllGroups()
        {
            var list = new List <Group>();

            using (WriteLock.Read())
            {
                using (var connection = CreateConnection(true))
                {
                    foreach (var row in connection.Query("SELECT Id,Name FROM Groups"))
                    {
                        list.Add(GetGroup(row));
                    }
                }
            }

            return(list);
        }
        public List <string> GetTypeFilterList()
        {
            List <string> filter_Type_list = new List <string>();

            using (WriteLock.Read())
            {
                using var connection = CreateConnection(true);
                string sql_query = "select distinct ItemType from PlaybackActivity";
                using var statement = connection.PrepareStatement(sql_query);
                foreach (var row in statement.ExecuteQuery())
                {
                    string type = row[0].ToString();
                    filter_Type_list.Add(type);
                }
            }
            return(filter_Type_list);
        }
コード例 #21
0
        /// <summary>
        /// Retrieve all plains from the database
        /// </summary>
        /// <returns>IEnumerable{Group}.</returns>
        public List <Plain> RetrieveAllPlains()
        {
            var list = new List <Plain>();

            using (WriteLock.Read())
            {
                using (var connection = CreateConnection(true))
                {
                    foreach (var row in connection.Query("SELECT Id,Name,MaxSimultaneousScreens FROM Plains"))
                    {
                        list.Add(GetPlain(row));
                    }
                }
            }

            return(list);
        }
        public SortedDictionary <int, int> GetDurationHistogram(int days, DateTime endDate, string[] types)
        {
            /*
             * SELECT CAST(PlayDuration / 300 as int) AS FiveMinBlock, COUNT(1) ActionCount
             * FROM PlaybackActivity
             * GROUP BY CAST(PlayDuration / 300 as int)
             * ORDER BY CAST(PlayDuration / 300 as int) ASC;
             */

            List <string> filters = new List <string>();

            foreach (string filter in types)
            {
                filters.Add("'" + filter + "'");
            }

            SortedDictionary <int, int> report = new SortedDictionary <int, int>();

            DateTime start_date = endDate.Subtract(new TimeSpan(days, 0, 0, 0));

            string sql =
                "SELECT CAST(PlayDuration / 300 as int) AS FiveMinBlock, COUNT(1) ActionCount " +
                "FROM PlaybackActivity " +
                "WHERE DateCreated >= @start_date AND DateCreated <= @end_date " +
                "AND UserId not IN (select UserId from UserList) " +
                "AND ItemType IN (" + string.Join(",", filters) + ") " +
                "GROUP BY CAST(PlayDuration / 300 as int) " +
                "ORDER BY CAST(PlayDuration / 300 as int) ASC";

            using (WriteLock.Read())
            {
                using var connection = CreateConnection(true);
                using var statement  = connection.PrepareStatement(sql);
                statement.TryBind("@start_date", start_date.ToString("yyyy-MM-dd 00:00:00"));
                statement.TryBind("@end_date", endDate.ToString("yyyy-MM-dd 23:59:59"));

                foreach (var row in statement.ExecuteQuery())
                {
                    int block_num = row[0].ToInt();
                    int count     = row[1].ToInt();
                    report.Add(block_num, count);
                }
            }

            return(report);
        }
        public List <Dictionary <string, string> > GetUsageForUser(string date, string userId, string[] types)
        {
            List <string> filters = new List <string>();

            foreach (string filter in types)
            {
                filters.Add("'" + filter + "'");
            }

            string sql_query = "SELECT DateCreated, ItemId, ItemType, ItemName, ClientName, PlaybackMethod, DeviceName, PlayDuration, rowid " +
                               "FROM PlaybackActivity " +
                               "WHERE DateCreated >= @date_from AND DateCreated <= @date_to " +
                               "AND UserId = @user_id " +
                               "AND ItemType IN (" + string.Join(",", filters) + ") " +
                               "ORDER BY DateCreated";

            List <Dictionary <string, string> > items = new List <Dictionary <string, string> >();

            using (WriteLock.Read())
            {
                using var connection = CreateConnection(true);
                using var statement  = connection.PrepareStatement(sql_query);
                statement.TryBind("@date_from", date + " 00:00:00");
                statement.TryBind("@date_to", date + " 23:59:59");
                statement.TryBind("@user_id", userId);
                foreach (var row in statement.ExecuteQuery())
                {
                    Dictionary <string, string> item = new Dictionary <string, string>
                    {
                        ["Time"]           = row[0].ReadDateTime().ToLocalTime().ToString("HH:mm"),
                        ["Id"]             = row[1].ToString(),
                        ["Type"]           = row[2].ToString(),
                        ["ItemName"]       = row[3].ToString(),
                        ["ClientName"]     = row[4].ToString(),
                        ["PlaybackMethod"] = row[5].ToString(),
                        ["DeviceName"]     = row[6].ToString(),
                        ["PlayDuration"]   = row[7].ToString(),
                        ["RowId"]          = row[8].ToString()
                    };

                    items.Add(item);
                }
            }

            return(items);
        }
コード例 #24
0
 public async Task DeleteCompleted()
 {
     using (WriteLock.Write())
     {
         using (var connection = CreateConnection())
         {
             connection.RunInTransaction(db =>
             {
                 using (var statement = db.PrepareStatement("delete from FileOrganizerResults where Status = @Status"))
                 {
                     statement.TryBind("@Status", FileSortingStatus.Success.ToString());
                     statement.MoveNext();
                 }
             }, TransactionMode);
         }
     }
 }
コード例 #25
0
        /// <summary>
        /// Tear down the object and dispose of resources.
        /// </summary>
        public void Dispose()
        {
            if (_SslStream != null)
            {
                _SslStream.Close();
                _SslStream.Dispose();
                _SslStream = null;
            }

            if (_NetworkStream != null)
            {
                _NetworkStream.Close();
                _NetworkStream.Dispose();
                _NetworkStream = null;
            }

            if (TokenSource != null)
            {
                if (!TokenSource.IsCancellationRequested)
                {
                    TokenSource.Cancel();
                }
                TokenSource.Dispose();
                TokenSource = null;
            }

            if (WriteLock != null)
            {
                WriteLock.Dispose();
                WriteLock = null;
            }

            if (ReadLock != null)
            {
                ReadLock.Dispose();
                ReadLock = null;
            }

            if (_TcpClient != null)
            {
                _TcpClient.Close();
                _TcpClient.Dispose();
                _TcpClient = null;
            }
        }
コード例 #26
0
        public List <Dictionary <string, object> > GetMoviesReport(int days, DateTime end_date)
        {
            List <Dictionary <string, object> > report = new List <Dictionary <string, object> >();

            DateTime start_date = end_date.Subtract(new TimeSpan(days, 0, 0, 0));
            Dictionary <String, Dictionary <string, int> > usage = new Dictionary <String, Dictionary <string, int> >();

            string sql = "";

            sql += "SELECT ItemName AS name, ";
            sql += "COUNT(1) AS play_count, ";
            sql += "SUM(PlayDuration) AS total_duarion ";
            sql += "FROM PlaybackActivity ";
            sql += "WHERE ItemType = 'Movie' ";
            sql += "AND DateCreated >= @start_date AND DateCreated <= @end_date ";
            sql += "AND UserId not IN (select UserId from UserList) ";
            sql += "GROUP BY name";

            using (WriteLock.Read())
            {
                using (var connection = CreateConnection(true))
                {
                    using (var statement = connection.PrepareStatement(sql))
                    {
                        statement.TryBind("@start_date", start_date.ToString("yyyy-MM-dd 00:00:00"));
                        statement.TryBind("@end_date", end_date.ToString("yyyy-MM-dd 23:59:59"));

                        foreach (var row in statement.ExecuteQuery())
                        {
                            string item_label   = row[0].ToString();
                            int    action_count = row[1].ToInt();
                            int    seconds_sum  = row[2].ToInt();

                            Dictionary <string, object> row_data = new Dictionary <string, object>();
                            row_data.Add("label", item_label);
                            row_data.Add("count", action_count);
                            row_data.Add("time", seconds_sum);
                            report.Add(row_data);
                        }
                    }
                }
            }

            return(report);
        }
コード例 #27
0
        public void Update(AuthenticationInfo info, CancellationToken cancellationToken)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }

            cancellationToken.ThrowIfCancellationRequested();

            using (WriteLock.Write())
            {
                using (var connection = CreateConnection())
                {
                    connection.RunInTransaction(db =>
                    {
                        using (var statement = db.PrepareStatement("replace into AccessTokens (Id, AccessToken, DeviceId, AppName, AppVersion, DeviceName, UserId, UserName, IsActive, DateCreated, DateLastActivity, DateRevoked) values (@Id, @AccessToken, @DeviceId, @AppName, @AppVersion, @DeviceName, @UserId, @UserName, @IsActive, @DateCreated, @DateLastActivity, @DateRevoked)"))
                        {
                            statement.TryBind("@Id", info.Id.ToGuidBlob());
                            statement.TryBind("@AccessToken", info.AccessToken);

                            statement.TryBind("@DeviceId", info.DeviceId);
                            statement.TryBind("@AppName", info.AppName);
                            statement.TryBind("@AppVersion", info.AppVersion);
                            statement.TryBind("@DeviceName", info.DeviceName);
                            statement.TryBind("@UserId", (info.UserId.Equals(Guid.Empty) ? null : info.UserId.ToString("N")));
                            statement.TryBind("@UserName", info.UserName);
                            statement.TryBind("@IsActive", info.IsActive);
                            statement.TryBind("@DateCreated", info.DateCreated.ToDateTimeParamValue());
                            statement.TryBind("@DateLastActivity", info.DateLastActivity.ToDateTimeParamValue());

                            if (info.DateRevoked.HasValue)
                            {
                                statement.TryBind("@DateRevoked", info.DateRevoked.Value.ToDateTimeParamValue());
                            }
                            else
                            {
                                statement.TryBindNull("@DateRevoked");
                            }

                            statement.MoveNext();
                        }
                    }, TransactionMode);
                }
            }
        }
        public List <string> GetUserList()
        {
            List <string> user_id_list = new List <string>();

            using (WriteLock.Read())
            {
                using var connection = CreateConnection(true);
                string sql_query = "select UserId from UserList";
                using var statement = connection.PrepareStatement(sql_query);
                foreach (var row in statement.ExecuteQuery())
                {
                    string type = row[0].ToString();
                    user_id_list.Add(type);
                }
            }

            return(user_id_list);
        }
コード例 #29
0
 private void DisposeConnection()
 {
     try
     {
         lock (_disposeLock)
         {
             using (WriteLock.Write())
             {
                 _connection?.Dispose();
                 _dbConnection?.Dispose();
             }
         }
     }
     catch (Exception ex)
     {
         _logger.LogError(ex, "Error disposing database", ex);
     }
 }
        public void UpdatePlaybackAction(PlaybackInfo playInfo)
        {
            string sql_add = "update PlaybackActivity set PlayDuration = @PlayDuration where DateCreated = @DateCreated and UserId = @UserId and ItemId = @ItemId";

            using (WriteLock.Write())
            {
                using var connection = CreateConnection();
                connection.RunInTransaction(db =>
                {
                    using var statement = db.PrepareStatement(sql_add);
                    statement.TryBind("@DateCreated", playInfo.Date.ToDateTimeParamValue());
                    statement.TryBind("@UserId", playInfo.UserId);
                    statement.TryBind("@ItemId", playInfo.ItemId);
                    statement.TryBind("@PlayDuration", playInfo.PlaybackDuration);
                    statement.MoveNext();
                }, TransactionMode);
            }
        }
コード例 #31
0
			public LockWatcher(WriteLock outerInstance)
			{
				this.outerInstance = outerInstance;
			}
コード例 #32
0
ファイル: WriteLock.cs プロジェクト: chriseldredge/zookeeper
 public DisposableLock(WriteLock writeLock)
 {
     this.writeLock = writeLock;
 }
コード例 #33
0
ファイル: WriteLock.cs プロジェクト: chriseldredge/zookeeper
 public LockWatcher(WriteLock writeLock)
 {
     this.writeLock = writeLock;
 }
コード例 #34
0
			public ZooKeeperOperationAnonymousInnerClass(WriteLock outerInstance)
			{
				this.outerInstance = outerInstance;
			}
コード例 #35
0
			public LockZooKeeperOperation(WriteLock outerInstance)
			{
				this.outerInstance = outerInstance;
			}