コード例 #1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var authUrl = "http://localhost:8000";

            #region IdentityServerSetup

            services.AddIdentityServer()
            .AddDeveloperSigningCredential()
            .AddInMemoryApiResources(MemoryDb.GetApiResources())
            .AddInMemoryClients(MemoryDb.GetClients())
            .AddTestUsers(MemoryDb.GetUsers());

            #endregion

            #region Validation Settings
            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.Authority                 = authUrl;
                options.RequireHttpsMetadata      = false;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer   = true,
                    ValidIssuer      = authUrl,
                    ValidateAudience = false,
                    ValidAudience    = "sinanbir.com.auth",                 //test purposes
                    ValidateLifetime = true,
                };
            });

            #endregion
            services.AddMvc();
        }
コード例 #2
0
        /// <summary>
        /// Awaitable.
        /// Stores perf counters into memory
        /// </summary>
        /// <param name="counters"></param>
        /// <returns></returns>
        public async Task StorePerfCounters(IEnumerable <IPerfCounterInputData> counters, DateTime?now = null, string appId = null)
        {
            try
            {
                var sb = new StringBuilder();

                DateTime timeStamp = DateTime.Now;

                DateTimeOffset dateExpiration = timeStamp.AddSeconds(ExpirationInSeconds);

                var timeStampStr = timeStamp.ToString("hh:mm:ss.fff");

                foreach (var item in counters)
                {
                    var row = MemoryDb.Get(timeStampStr) as DataRowPerTimeStamp;
                    if (row == null)
                    {
                        row = new DataRowPerTimeStamp(timeStamp);
                        MemoryDb.Add(timeStampStr, row, dateExpiration);
                    }

                    row.AddCounterValue(item.Name, item.Value);

                    counterNames.Add(item.Name);
                }
            }
            catch (Exception exc)
            {
                if (OnError != null)
                {
                    OnError(new object(), new PerfonErrorEventArgs(exc.ToString()));
                }
            }
        }
コード例 #3
0
        public void UpsertTest()
        {
            Random mrand = new Random();

            using (MemoryDb db = new MemoryDb())
            {
                ScalableEntity[] entities = new ScalableEntity[5000];
                for (int i = 0; i < entities.Length; i++)
                {
                    byte[] key   = new byte[150];
                    byte[] value = new byte[1024];
                    mrand.NextBytes(value);
                    mrand.NextBytes(key);
                    entities[i] = new ScalableEntity(key, value);
                }
                db.Upsert(entities).Wait();
                List <ScalableEntity> results = new List <ScalableEntity>();
                db.Retrieve(entities.Select(m => m.Key), rows => {
                    lock (results)
                    {
                        results.AddRange(rows);
                    }
                    return(true);
                }).Wait();
                Assert.AreEqual(entities.Length, results.Count);
                Assert.IsTrue(results.SequenceEqual(entities, EntityComparer.instance));
            }
        }
コード例 #4
0
        public Object GetTraceData(int PageIndex, int PageSize)
        {
            using MemoryDb db = new MemoryDb();
            var data = db.Traces
                       .Where(t => t.CreateTime > Convert.ToDateTime(DateTime.Now.AddDays(-1).ToShortDateString()))
                       .Where(t => t.CreateTime <= Convert.ToDateTime(DateTime.Now.AddDays(1).ToShortDateString()))
                       .OrderByDescending(t => t.CreateTime).Select(t => t.Result.ToModel <JObject>()).ToPage(PageIndex, PageSize);

            return(data);
        }
コード例 #5
0
        public void ClearMemory()
        {
            using MemoryDb db = new MemoryDb();
            var Trace = db.Traces.ToList();

            if (Trace.Count > 500)
            {
                db.Traces.RemoveRange(Trace);
                db.SaveChanges();
            }
        }
コード例 #6
0
        public override void SessionReceive(IServer Server, SessionReceiveEventArgs Event)
        {
            var Pipe = Event.Stream.ToPipeStream();

            if (Pipe.TryReadLine(out string Data))
            {
                using MemoryDb db = new MemoryDb();
                var View = db.Traces.Add(new TraceModel
                {
                    Result     = Data,
                    CreateTime = DateTime.Now
                });
                db.SaveChanges();
            }
        }
コード例 #7
0
        public void RangeRetrieveTest()
        {
            using (MemoryDb db = new MemoryDb())
            {
                ScalableEntity[] entities = new ScalableEntity[5000];
                for (int i = 0; i < entities.Length; i++)
                {
                    entities[i] = new ScalableEntity(BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder(i)), new byte[5000])
                    {
                        UseLinearHash = true
                    };
                }
                db.Upsert(entities).Wait();
                List <ScalableEntity> data = new List <ScalableEntity>();
                db.Retrieve(null, null, rows => {
                    lock (data)
                    {
                        data.AddRange(rows);
                    }
                    return(true);
                }).Wait();
                Assert.AreEqual(entities.Length, data.Count);
                Assert.IsTrue(entities.Intersect(data, EntityComparer.instance).Count() == data.Count);

                data.Clear();
                int    count = 0;
                object sync  = new object();
                db.Retrieve(BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder(200)), BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder(1000)), rows => {
                    lock (sync)
                    {
                        count += rows.Count();
                    }
                    Assert.IsFalse(rows.Where(m => {
                        int val = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt32(m.Key, 0));
                        return(!(val > 200 && val < 1000));
                    }).Any());
                    return(true);
                }).Wait();
                Assert.AreEqual(799, count);
            }
        }
コード例 #8
0
        /// <summary>
        /// Do not process skip in the function, because results could be incorrect due to expiration.
        /// Skip is measured against the start of data series
        /// </summary>
        /// <param name="counterName"></param>
        /// <param name="date"></param>
        /// <param name="skip"></param>
        /// <param name="appId"></param>
        /// <returns></returns>
        public Task <IEnumerable <IPerfCounterValue> > QueryCounterValues(string counterName, DateTime?date = null, int skip = 0, string appId = null)
        {
            if (!date.HasValue)
            {
                date = DateTime.Now;
            }

            var list = new List <IPerfCounterValue>();

            var all = MemoryDb.ToList();

            foreach (var item in all)
            {
                var row = item.Value as DataRowPerTimeStamp;
                var res = row.TryGetCounterValue(counterName);
                if (!double.IsNaN(res) && row.TimeStamp.Date == date.Value.Date)
                {
                    list.Add(new PerfCounterValue(row.TimeStamp, res));
                }
            }

            return(Task.FromResult(list as IEnumerable <IPerfCounterValue>));
        }
コード例 #9
0
 public static void InitMemoryDb()
 {
     MemoryDb.Init();
 }
コード例 #10
0
 public DataRepository(MemoryDb memoryDb)
 {
     _memoryDb = memoryDb;
 }