示例#1
0
        public async Task <Metric> CreateAsync(CreateMetricRequest request)
        {
            Ensure.NotNull(request, nameof(request));

            var id = await db.Metrics.Sequence.NextAsync();

            var metric = new Metric(
                id: id,
                ownerId: request.OwnerId,
                name: request.Name,
                type: request.Type,
                unit: request.Unit
                );

            await db.Metrics.InsertAsync(metric);

            if (request.Dimensions != null)
            {
                var dimensions = new MetricDimension[request.Dimensions.Length];

                for (var i = 0; i < dimensions.Length; i++)
                {
                    dimensions[i] = new MetricDimension(
                        id: ScopedId.Create(metric.Id, i + 1),
                        name: request.Name
                        );
                }

                await db.MetricDimensions.InsertAsync(dimensions);
            }

            return(metric);
        }
示例#2
0
        public Task <IReadOnlyList <DatabaseBackup> > ListAsync(IDatabaseInfo database)
        {
            Ensure.NotNull(database, nameof(database));

            var range = ScopedId.GetRange(database.Id);

            return(db.DatabaseBackups.QueryAsync(Between("id", range.Start, range.End), Order.Descending("id")));
        }
示例#3
0
        public static async Task <long> NextAsync(IDbContext context, long programId)
        {
            using (var connection = await context.GetConnectionAsync())
            {
                var currentReleaseCount = await connection.ExecuteScalarAsync <int>(sql, new { id = programId });

                return(ScopedId.Create(programId, currentReleaseCount + 1));
            }
        }
        public static async Task <long> NextAsync(IDbContext context, long domainId)
        {
            using (var connection = await context.GetConnectionAsync())
            {
                var currentValue = await connection.ExecuteScalarAsync <int>(sql, new { id = domainId });

                return(ScopedId.Create(domainId, currentValue + 1));
            }
        }
示例#5
0
        public Task <IReadOnlyList <RepositoryCommit> > ListAsync(IRepository repository)
        {
            var range = ScopedId.GetRange(repository.Id);

            return(db.RepositoryCommits.QueryAsync(
                       Between("id", range.Start, range.End),
                       order: Order.Descending("id")
                       ));
        }
示例#6
0
        public Task <IReadOnlyList <DatabaseGrant> > ListAsync(IDatabaseInfo database)
        {
            Ensure.NotNull(database, nameof(database));

            var range = ScopedId.GetRange(database.Id);

            return(db.DatabaseGrants.QueryAsync(
                       And(Between("id", range.Start, range.End), IsNull("deleted"))
                       ));
        }
示例#7
0
        public async Task <IReadOnlyList <DomainRecord> > ListAsync(IDomain domain)
        {
            var range = ScopedId.GetRange(domain.Id);

            // order?

            return(await db.DomainRecords.QueryAsync(
                       And(Between("id", range.Start, range.End), IsNull("deleted"))
                       ));
        }
        public Task <IReadOnlyList <DomainAuthorization> > ListAsync(IDomain domain)
        {
            Ensure.NotNull(domain, nameof(domain));

            var range = ScopedId.GetRange(domain.Id);

            return(db.DomainAuthorizations.QueryAsync(
                       Expression.Between("id", range.Start, range.End)
                       ));
        }
示例#9
0
        public static async Task <long> GetNextScopedIdAsync <T>(this Dataset <T, long> dataset, long scopeId)
        {
            var range = ScopedId.GetRange(scopeId);

            // should be max id in range...
            var count = await dataset.CountAsync(
                Expression.Between("id", range.Start, range.End)
                );

            return(ScopedId.Create(scopeId, count));
        }
示例#10
0
        /// <summary>
        /// Converts the specified id into a new Id.  If we've already converted this id, 
        /// then returns the original conversion.  This method is for creating outgoing 
        /// ids.
        /// </summary>
        /// <param name="scope">The scope for the id.  For example, for an auto-incrementing 
        /// int id in a table, this might be the table name.  This is how we can distinguish 
        /// between two ids that might be the same.</param>
        /// <param name="originalId"></param>
        /// <returns></returns>
        public string GetConvertedId(string scope, string originalId)
        {
            ScopedId scopedId = new ScopedId(scope, originalId);

            string convertedId;
            if(this.idMap.TryGetValue(scopedId, out convertedId))
                return convertedId;

            convertedId = Generate(scope, originalId);
            this.idMap.Add(scopedId, convertedId);
            return convertedId;
        }
        public async Task <DomainAuthorization> GetLatestAsync(IDomain domain)
        {
            Ensure.NotNull(domain, nameof(domain));

            var range = ScopedId.GetRange(domain.Id);

            return((await db.DomainAuthorizations.QueryAsync(
                        Expression.Between("id", range.Start, range.End),
                        order: Order.Descending("id"),
                        take: 1
                        )).FirstOrDefault());
        }
示例#12
0
        public Task <IReadOnlyList <DatabaseGrant> > ListAsync(IDatabaseInfo database, IUser user)
        {
            Ensure.NotNull(database, nameof(database));
            Ensure.NotNull(user, nameof(user));

            var range = ScopedId.GetRange(database.Id);

            return(db.DatabaseGrants.QueryAsync(
                       Conjunction(
                           Between("id", range.Start, range.End),
                           Eq("userId", user.Id),
                           IsNull("deleted")
                           )
                       ));
        }
示例#13
0
        public void B()
        {
            var name = DomainName.Parse("www.processor.ai");

            var record = new DomainRecord(
                id: ScopedId.Create(456, 1),
                name: "www",
                path: name.Path,
                type: DnsRecordType.A,
                value: "192.168.1.1",
                ttl: 600,
                flags: DomainRecordFlags.None
                );

            Assert.Equal(1912602625, record.Id);
            Assert.Equal("www", record.Name);
            Assert.Equal("ai/processor/www", record.Path);
            Assert.Equal(456, record.DomainId);
            Assert.Equal(1, (int)record.Type);
            Assert.Equal("192.168.1.1", record.Value);
            Assert.Equal(600, record.Ttl);
        }
示例#14
0
        public static Uid Create(long accountId, DateTimeOffset timestamp, long sequenceNumber)
        {
            #region Preconditions

            if (accountId < 0)
            {
                throw new ArgumentException("Must be >= 0", nameof(accountId));
            }

            if (sequenceNumber < 0)
            {
                throw new ArgumentException("Must be >= 0", nameof(sequenceNumber));
            }

            #endregion

            var(hours, milliseconds) = Timestamp.Split(timestamp.ToUnixTimeMilliseconds());

            return(new Uid(
                       upper: (ulong)ScopedId.Create(accountId, (int)hours),
                       lower: RequestIdLower.Create((ulong)milliseconds, (ulong)sequenceNumber)
                       ));
        }