public TypedViewMetaDetailsResponse GetTypedViewMetaDetails(ServiceStack.ServiceInterface.Service service)
        {
            // The entity meta details don't change per type, so cache these for performance
            var cacheKey    = string.Format("{0}-typedview-meta-details", TypedViewType.ToString().ToLower());
            var metaDetails = CacheClient.Get <TypedViewMetaDetailsResponse>(cacheKey);

            if (metaDetails != null)
            {
                return(metaDetails);
            }

            var request        = service.RequestContext.Get <IHttpRequest>();
            var appUri         = request.GetApplicationUrl().TrimEnd('/');
            var baseServiceUri = appUri + request.PathInfo.Replace("/meta", "");
            var queryString    = request.QueryString["format"] != null ? "&format=" + request.QueryString["format"] : "";
            var fields         = new List <Link>();

            foreach (var f in FieldMap)
            {
                var link = Link.Create(
                    f.Key.ToCamelCase(), f.Value.DataType.Name, "field",
                    string.Format("{0}?select={1}{2}", baseServiceUri, f.Key.ToLowerInvariant(), queryString),
                    string.Format("The {0} field for the {1} resource.", f.Value.Name, typeof(TDto).Name),
                    new Dictionary <string, string>()
                    );
                var props = new SortedDictionary <string, string>();
                props.Add("index", f.Value.FieldIndex.ToString(CultureInfo.InvariantCulture));
                if (f.Value.IsNullable)
                {
                    props.Add("isNullable", "true");
                }
                if (f.Value.IsOfEnumDataType)
                {
                    props.Add("isEnumType", "true");
                }
                if (f.Value.MaxLength > 0)
                {
                    props.Add("maxLength", f.Value.MaxLength.ToString(CultureInfo.InvariantCulture));
                }
                if (f.Value.Precision > 0)
                {
                    props.Add("precision", f.Value.Precision.ToString(CultureInfo.InvariantCulture));
                }
                if (f.Value.Scale > 0)
                {
                    props.Add("scale", f.Value.Scale.ToString(CultureInfo.InvariantCulture));
                }
                link.Properties = new Dictionary <string, string>(props);
                fields.Add(link);
            }

            metaDetails = new TypedViewMetaDetailsResponse()
            {
                Name       = typeof(TDto).Name,
                FieldCount = fields.Count,
                Fields     = fields.ToArray()
            };
            CacheClient.Set(cacheKey, metaDetails);
            return(metaDetails);
        }
Esempio n. 2
0
        public static void Run()
        {
            var cacheClient = new CacheClient();

            Console.WriteLine("***** BEGIN CACHE MISS TEST *****");
            Console.WriteLine();

            cacheClient.HostDisconnected += (sender, e) => { Console.WriteLine("*** Host disconnected"); };
            cacheClient.HostReconnected  += (sender, e) => { Console.WriteLine("*** Host reconnected"); };

            // Try and get 10 items
            string value = null;

            for (int i = 0; i < 10; i++)
            {
                var cacheKey = "doesNotExist" + i;
                var result   = cacheClient.TryGet(cacheKey, out value);
                if (!result)
                {
                    Console.WriteLine("PASS: Did not receive value for cache key: {0}", cacheKey);
                }
                else
                {
                    Console.WriteLine("FAIL: Received value for cache key: {0}", cacheKey);
                }
            }

            // Bulk 10
            var bulkResult = cacheClient.Get <string>(new[] { "doesNotExist0", "doesNotExist1", "doesNotExist2", "doesNotExist3", "doesNotExist4",
                                                              "doesNotExist5", "doesNotExist6", "doesNotExist7", "doesNotExist8", "doesNotExist9" });

            if (bulkResult == null)
            {
                Console.WriteLine("PASS: Did not receive values for bulk cache keys");
            }
            else
            {
                Console.WriteLine("FAIL: Received values for bulk cache keys");
            }

            // Tag
            var tagResult = cacheClient.GetTagged <string>("tagDoesntExist");

            if (tagResult == null)
            {
                Console.WriteLine("PASS: Did not receive values for tag cache keys");
            }
            else
            {
                Console.WriteLine("FAIL: Received values for tag cache keys");
            }

            var key = Console.ReadKey();

            // Graceful shutdown option
            if (key.KeyChar == 'q')
            {
                cacheClient.Shutdown();
            }
        }
Esempio n. 3
0
 public void Run(string[] args)
 {
     using (var client = new CacheClient(cacheServiceNode))
     {
         client.Put("message", "hello");
         Console.WriteLine(client.Get("message"));
     }
 }
        public async static Task Run()
        {
            // =========================================================
            // Iron.io Cache
            // =========================================================

            IronCacheRestClient ironCacheClient = Client.New();

            // Get a Cache object
            CacheClient cache = ironCacheClient.Cache("my_cache");

            // Put value to cache by key
            await cache.Put("number_item", 42);

            CacheItem item = await cache.Get("number_item");

            // Get value from cache by key
            Console.WriteLine(item.Value);

            // Get value from cache by key
            Console.WriteLine(await cache.Get <int>("number_item"));

            // Numbers can be incremented
            await cache.Increment("number_item", 10);

            // Immediately delete an item
            await cache.Delete("number_item");

            await cache.Put("complex_item", new { greeting = "Hello", target = "world" });

            CacheItem complexItem = await cache.Get("complex_item");

            // Get value from cache by key
            Console.WriteLine(complexItem.Value);

            await cache.Delete("complex_item");

            await cache.Put("sample_class", new SampleClass { Name = "Sample Class CacheItem" });

            SampleClass sampleClassItem = await cache.Get <SampleClass>("sample_class");

            Console.WriteLine(sampleClassItem.Inspect());

            await cache.Delete("sample_class");
        }
Esempio n. 5
0
        public static void Run()
        {
            var cacheClient = new CacheClient();

            Console.WriteLine("***** BEGIN CACHE MISS TEST *****");
            Console.WriteLine();

            cacheClient.HostDisconnected += (sender, e) => { Console.WriteLine("*** Host disconnected"); };
            cacheClient.HostReconnected += (sender, e) => { Console.WriteLine("*** Host reconnected"); };

            // Try and get 10 items
            string value = null;
            for (int i = 0; i < 10; i++)
            {
                var cacheKey = "doesNotExist" + i;
                var result = cacheClient.TryGet(cacheKey, out value);
                if (!result)
                {
                    Console.WriteLine("PASS: Did not receive value for cache key: {0}", cacheKey);
                }
                else
                {
                    Console.WriteLine("FAIL: Received value for cache key: {0}", cacheKey);
                }
            }

            // Bulk 10
            var bulkResult = cacheClient.Get<string>(new[] { "doesNotExist0", "doesNotExist1", "doesNotExist2", "doesNotExist3", "doesNotExist4",
                "doesNotExist5", "doesNotExist6", "doesNotExist7", "doesNotExist8", "doesNotExist9" });

            if (bulkResult == null)
            {
                Console.WriteLine("PASS: Did not receive values for bulk cache keys");
            }
            else
            {
                Console.WriteLine("FAIL: Received values for bulk cache keys");
            }

            // Tag
            var tagResult = cacheClient.GetTagged<string>("tagDoesntExist");
            if (tagResult == null)
            {
                Console.WriteLine("PASS: Did not receive values for tag cache keys");
            }
            else
            {
                Console.WriteLine("FAIL: Received values for tag cache keys");
            }

            var key = Console.ReadKey();
            // Graceful shutdown option
            if (key.KeyChar == 'q')
            {
                cacheClient.Shutdown();
            }
        }
Esempio n. 6
0
        static void Test1()
        {
            var client = new CacheClient();

            client.SetServer("tcp://127.0.0.1:1234");

            //client.Bench();

            client.Set("aa", 1234);
            client.Set("bb", false);
            client.Set("cc", 3.14);
            client.Set("dd", "NewLife", 5);
            client.Set("ee", new { Name = "新生命", Year = 2002 });

            Console.WriteLine(client.Get <Int32>("aa"));
            Console.WriteLine(client.Get <Boolean>("bb"));
            Console.WriteLine(client.Get <Double>("cc"));
            Console.WriteLine(client.Get <String>("dd"));
            Console.WriteLine(client.Get <Object>("ee").ToJson());

            Console.WriteLine();
            Console.WriteLine("Count={0}", client.Count);
            Console.WriteLine("Keys={0}", client.Keys.Join());
            Thread.Sleep(2000);
            Console.WriteLine("Expire={0}", client.GetExpire("dd"));

            Console.WriteLine();
            client.Decrement("aa", 30);
            client.Increment("cc", 0.3);

            Console.WriteLine();
            var dic = client.GetAll <Object>(new[] { "aa", "cc", "ee" });

            foreach (var item in dic)
            {
                var val = item.Value;
                if (val != null && item.Value.GetType().GetTypeCode() == TypeCode.Object)
                {
                    val = val.ToJson();
                }

                Console.WriteLine("{0}={1}", item.Key, val);
            }
        }
Esempio n. 7
0
        public bool ValidUpdater(UpdateFulfillment instance, string fulfiller)
        {
            var key         = SessionFeature.GetSessionKey();
            var currentUser = CacheClient.Get <AuthUserSession>(key);

            if (instance.Status == "Completed" && fulfiller != currentUser.UserName)
            {
                return(false);
            }
            return(true);
        }
Esempio n. 8
0
 public object Get(string key)
 {
     using (var client = new CacheClient(cacheServiceNode))
     {
         var value = client.Get(key);
         if (value == null)
         {
             return(new Http404NotFound());
         }
         return(new JSONResult(value, null));
     }
 }
Esempio n. 9
0
        public void Get()
        {
            // Arrange
            var datakey = new DataKey <int>("Key1");

            m_mockProtocol.Setup(protocol => protocol.Get(GetOperation.Get, datakey)).Returns(true);

            // Act
            m_client.Get(datakey);

            // Assert
        }
Esempio n. 10
0
 public Session this[Guid sessionId] {
     get {
         Console.WriteLine("UserSession get CacheClient: '{0}'", CacheClient);
         var authSession = CacheClient.Get <Session>(Session.ToCacheKey(sessionId));
         if (authSession != default(Session))
         {
             authSession.SetRedisClient((CacheClient as IRedisClientsManager).GetClient());
         }
         return(authSession);
     }
     set {
         if (sessionId != value.Id)
         {
             throw new Exception(string.Format("sessionId {0}!={1} value.Id ", sessionId, value.Id));
         }
         CacheClient.Replace <Session>(Session.ToCacheKey(sessionId), value, value.ExpiresAt);
     }
 }
Esempio n. 11
0
 /// <summary>
 /// 出队
 /// </summary>
 public static void Dequeue <T>(Action <T> action)
 {
     //默认使用线程池
     Task.Run(() =>
     {
         while (true)
         {
             if (cacheClient.GetListLength(key) > 0)
             {
                 var exception = cacheClient.Get <T>(key);
                 action(exception);
             }
             else
             {
                 Thread.Sleep(2000);
             }
         }
     });
     #region 线程池版本
     //ThreadPool.QueueUserWorkItem(o =>
     //{
     //    while (true)
     //    {
     //        if (cacheClient.GetListLength(key) > 0)
     //        {
     //            var exception = cacheClient.Get<T>(key);
     //            action(exception);
     //        }
     //        else
     //        {
     //            Thread.Sleep(2000);
     //        }
     //    }
     //});
     #endregion
 }
        public List <SubscriptionRelayConfig> GetAll(string eventName)
        {
            Guard.AgainstNullOrEmpty(() => eventName, eventName);

            var cached = CacheClient.Get <CachedSubscription>(FormatCacheKey(eventName));

            if (cached != null)
            {
                return(cached.Subscribers);
            }

            var fetched = SubscriptionService.Search(eventName);

            if (fetched.Any())
            {
                var expiry = TimeSpan.FromSeconds(ExpiryTimeSeconds);
                CacheClient.Set(FormatCacheKey(eventName), new CachedSubscription
                {
                    Subscribers = fetched
                }, expiry);
            }

            return(fetched);
        }
Esempio n. 13
0
 public virtual T Get <T>(string key)
 {
     return(_cache.Get <T>(key));
 }
Esempio n. 14
0
        public static void Run()
        {
            var cacheClient = new CacheClient();

            var stopwatch = new Stopwatch();

            var overallStopwatch = new Stopwatch();

            overallStopwatch.Start();

            // 502 chars = ~1 kb
            const string value = "asdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasas";

            CustomObject myObject = new CustomObject();

            Console.WriteLine("***** BEGIN ADD 10000 TESTS *****");
            Console.WriteLine();

            #region Regular Add 10000 strings
            stopwatch.Start();
            for (int i = 1; i <= 10000; i++)
            {
                cacheClient.AddOrUpdate("test" + i, value);
            }
            stopwatch.Stop();

            Console.WriteLine("Add time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            #region Bulk Add 10000 strings
            var list = new List <KeyValuePair <string, object> >(10000);
            for (int i = 1; i <= 10000; i++)
            {
                list.Add(new KeyValuePair <string, object>("bulktest" + i, value));
            }

            stopwatch.Restart();
            cacheClient.AddOrUpdate(list);
            stopwatch.Stop();

            Console.WriteLine("Add Many time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            #region Tagged Add 10000 strings
            stopwatch.Restart();
            for (int i = 1; i <= 10000; i++)
            {
                cacheClient.AddOrUpdate("tagtest" + i, value, tagName: "demotag");
            }
            stopwatch.Stop();

            Console.WriteLine("Add Tagged time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            Console.WriteLine();
            Console.WriteLine("***** BEGIN SINGLE KEY GET TEST *****");
            Console.WriteLine();

            #region Regular Get 1 string proof
            string resultString = null;
            stopwatch.Restart();
            var result = cacheClient.TryGet("test5", out resultString) && string.Equals(resultString, value);
            stopwatch.Stop();

            Console.WriteLine("Get cache key \"test5\": time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            Console.WriteLine("Get cache key \"test5\": successful = " + result);
            Console.WriteLine("Get cache key \"test5\": result length: " + (resultString == null ? 0 : resultString.Length) + ", original length: " + value.Length);
            if (resultString != null)
            {
                var origHash   = value.GetHashCode();
                var resultHash = resultString.GetHashCode();
                Console.WriteLine("Original String Hash Code: " + origHash + ", Result String Hash Code: " + resultHash);
            }
            #endregion

            Console.WriteLine();
            Console.WriteLine("***** BEGIN GET 10000 TESTS *****");
            Console.WriteLine();

            string otherValue = null;

            #region Regular Get 10000 strings
            stopwatch.Restart();
            var failedKeyCount = 0;
            for (int i = 1; i <= 10000; i++)
            {
                if (!cacheClient.TryGet("test" + i, out otherValue))
                {
                    failedKeyCount++;
                }
            }
            stopwatch.Stop();

            Console.WriteLine("Failed Key Count: " + failedKeyCount + (failedKeyCount > 0 ? ", NOTE: network is probably slow" : ""));

            Console.WriteLine("Get time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            #region Bulk Get 10000 strings
            var list2 = new List <string>(10000);
            for (int i = 1; i <= 10000; i++)
            {
                list2.Add("bulktest" + i);
            }

            stopwatch.Restart();
            var getManyResults = cacheClient.Get <string>(list2);
            stopwatch.Stop();

            Console.WriteLine("Get Many time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            var getManyResultsCount = getManyResults != null ? getManyResults.Count : 0;
            Console.WriteLine("Get Many object count: " + getManyResultsCount + (getManyResultsCount < 10000 ? ", NOTE: network is probably slow" : ""));
            #endregion

            #region Tagged Get 10000 strings
            stopwatch.Restart();
            var getTaggedResults = cacheClient.GetTagged <string>("demotag");
            stopwatch.Stop();

            Console.WriteLine("Get Tagged time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            getManyResultsCount = getManyResults != null ? getManyResults.Count : 0;
            Console.WriteLine("Get Tagged object count: " + getManyResultsCount + (getManyResultsCount < 10000 ? ", NOTE: network is probably slow" : ""));
            #endregion

            Console.WriteLine();
            Console.WriteLine("***** BEGIN REMOVE 10000 TESTS *****");
            Console.WriteLine();

            #region Regular Remove 10000 strings
            stopwatch.Restart();
            for (int i = 1; i <= 10000; i++)
            {
                cacheClient.Remove("test" + i);
            }
            stopwatch.Stop();

            Console.WriteLine("Remove time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            #region Bulk Remove 10000 strings
            stopwatch.Restart();
            cacheClient.Remove(list2);
            stopwatch.Stop();

            Console.WriteLine("Remove Many time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            #region Tagged Remove 10000 strings
            stopwatch.Restart();
            cacheClient.RemoveTagged("demotag");
            stopwatch.Stop();

            Console.WriteLine("Remove Tagged time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            Console.WriteLine();
            Console.WriteLine("***** BEGIN ABSOLUTE EXPIRATION TEST *****");
            Console.WriteLine();

            #region Regular Add 10000 strings with absolute expiration
            var absoluteExpiration = DateTime.Now.AddMinutes(1);
            stopwatch.Restart();
            for (int i = 1; i <= 10000; i++)
            {
                cacheClient.AddOrUpdate("testabsolute" + i, value, absoluteExpiration: absoluteExpiration);
            }
            stopwatch.Stop();

            Console.WriteLine("Add absolute expiration time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            Console.WriteLine();
            Console.WriteLine("***** BEGIN 10000 COMPLEX OBJECT ADD TEST *****");
            Console.WriteLine();

            #region Regular Add 10000 complex objects with sliding expiration
            var slidingExpiration = new TimeSpan(0, 2, 0);
            stopwatch.Restart();
            for (int i = 1; i <= 10000; i++)
            {
                cacheClient.AddOrUpdate("testabsolutecomplex" + i, myObject, slidingExpiration: slidingExpiration);
            }
            stopwatch.Stop();

            Console.WriteLine("Add complex object time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            Console.WriteLine();
            Console.WriteLine("***** BEGIN 10000 COMPLEX OBJECT GET TEST *****");
            Console.WriteLine();

            #region Regular Get 10000 complex objects with sliding expiration
            stopwatch.Restart();
            failedKeyCount = 0;
            for (int i = 1; i <= 10000; i++)
            {
                if (!cacheClient.TryGet("testabsolutecomplex" + i, out myObject))
                {
                    failedKeyCount++;
                }
            }
            stopwatch.Stop();

            Console.WriteLine("Failed Key Count: " + failedKeyCount + (failedKeyCount > 0 ? ", NOTE: network is probably slow" : ""));

            Console.WriteLine("Get complex object time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            overallStopwatch.Stop();

            Console.WriteLine();
            Console.WriteLine("***** END TESTS *****");
            Console.WriteLine();

            Console.WriteLine("Total time taken: " + overallStopwatch.ElapsedMilliseconds + " ms, " + overallStopwatch.ElapsedTicks + " ticks");

            var key = Console.ReadKey();
            // Graceful shutdown option
            if (key.KeyChar == 'q')
            {
                cacheClient.Shutdown();
            }
        }
Esempio n. 15
0
        private static void Main(string[] args)
        {
            LogManager.Adapter = new ConsoleOutLoggerFactoryAdapter();

            // =========================================================
            // Iron.io MQ
            // =========================================================

            //IronMqRestClient ironMq = IronSharp.IronMQ.Client.New();

            // For beta testing
            IronMqRestClient ironMq = IronSharp.IronMQ.Client.New(new IronClientConfig {
                ProjectId = "53a3b3bd5e8edd1245000005", Token = "O7KrMTwmw997iq0KzL7v", Host = "192.168.1.155", ApiVersion = 3, Port = 8080, Scheme = Uri.UriSchemeHttp
            });

            // Simple actions

            // Post message to a queue
            TestPosting(ironMq);

            // Post message to a queue and reserve it
            TestReservation(ironMq);

            // Post message, reserve it and delete
            TestDeletingReservedMessage(ironMq);

            // Actions on queue

            // Update queue info
            TestUpdatingTheQueue(ironMq);

            // Clear all messages of queue
            TestClearingQueue(ironMq);

            // Delete queue and its messages
            TestDeletingQueue(ironMq);

            // Get list of all queus inside project
            TestGettingListQueue(ironMq);

            // Actions on messages

            //TestPosting(ironMq);
            //TestReservation(ironMq);
            //TestDeletingReservedMessage(ironMq);

            // Get message by id without reservation
            TestGettingMessageById(ironMq);

            // Get message without reserving it
            TestPeekingMessage(ironMq);

            // Delete unreserved message
            TestDeletingMessage(ironMq);

            // Touch message to prolongate reservation
            TestTouching(ironMq);

            // Touch message to prolongate reservation
            TestTouchingTwice(ironMq);

            // Release reserved message
            TestReleasing(ironMq);

            // Delete a bunch of messages
            TestDeletingMessages(ironMq);

            // Get subscriber's URL
            TestGettingSubscribersInfo(ironMq);

            // =========================================================
            // Iron.io Worker
            // =========================================================

            Console.WriteLine("Be sure to create a 'Test' worker before running this sample");
            Console.WriteLine("Press ANY key to continue");
            Console.Read();

            IronWorkerRestClient workerClient = IronSharp.IronWorker.Client.New();

            string taskId = workerClient.Tasks.Create("Test", new { Key = "Value" });

            Console.WriteLine("TaskID: {0}", taskId);

            TaskInfoCollection taskInfoCollection = workerClient.Tasks.List("Test");

            foreach (TaskInfo task in taskInfoCollection.Tasks)
            {
                Console.WriteLine(task.Inspect());
            }

            ScheduleOptions options = ScheduleBuilder.Build().
                                      Delay(TimeSpan.FromMinutes(1)).
                                      WithFrequency(TimeSpan.FromHours(1)).
                                      RunFor(TimeSpan.FromHours(3)).
                                      WithPriority(TaskPriority.Default);

            var payload = new
            {
                a = "b",
                c = new[] { 1, 2, 3 }
            };

            ScheduleIdCollection schedule = workerClient.Schedules.Create("Test", payload, options);

            Console.WriteLine(schedule.Inspect());

            workerClient.Schedules.Cancel(schedule.Schedules.First().Id);

            // =========================================================
            // Iron.io Cache
            // =========================================================

            IronCacheRestClient ironCacheClient = IronSharp.IronCache.Client.New();

            // Get a Cache object
            CacheClient cache = ironCacheClient.Cache("my_cache");

            // Put value to cache by key
            cache.Put("number_item", 42);

            // Get value from cache by key
            Console.WriteLine(cache.Get("number_item").Value);

            // Get value from cache by key
            Console.WriteLine(cache.Get <int>("number_item"));

            // Numbers can be incremented
            cache.Increment("number_item", 10);

            // Immediately delete an item
            cache.Delete("number_item");

            cache.Put("complex_item", new { greeting = "Hello", target = "world" });

            // Get value from cache by key
            Console.WriteLine(cache.Get("complex_item").Value);

            cache.Delete("complex_item");

            Console.WriteLine("============= Done ==============");
            Console.Read();
        }
Esempio n. 16
0
        private static void Main(string[] args)
        {
            LogManager.Adapter = new ConsoleOutLoggerFactoryAdapter();
            IronMqRestClient ironMq = IronSharp.IronMQ.Client.New(new IronClientConfig {
                ProjectId = "5bf768af967e0f000910fed3", Token = "y7TU7c3D3IUXtwrcJJFH", Host = "mq-aws-eu-west-1-1.iron.io", ApiVersion = 3, Scheme = Uri.UriSchemeHttp
            });

            QueueClient queueHabitacion  = ironMq.Queue("Habitacion");
            var         codigoHabitacion = "HBT0000007";
            string      messageId1       = queueHabitacion.Post(codigoHabitacion);

            Console.WriteLine("Mensaje enviado: {0}", codigoHabitacion);

            QueueClient queueHotel  = ironMq.Queue("Hotel");
            var         codigoHotel = "HT00000002";
            string      messageId2  = queueHotel.Post(codigoHotel);

            Console.WriteLine("Mensaje enviado: {0}", codigoHabitacion);

            //QueueMessage messageHabitacion = queueHabitacion.Reserve();
            //Console.WriteLine("Respuesta: " + messageHabitacion.Body);

            //QueueMessage messageHotel = queueHotel.Reserve();
            //Console.WriteLine("Respuesta: " + messageHotel.Body);
            //Console.WriteLine(message.ReservationId);


            //bool finished = false;
            //var hotelIds = new List<string>();
            //while (!finished)
            //{
            //    messageHotel = queueHotel.Reserve();
            //    if (messageHotel != null)
            //        hotelIds.Add(messageHotel.Body);
            //    else
            //        finished = true;
            //}



            LogManager.Adapter = new ConsoleOutLoggerFactoryAdapter();

            // =========================================================
            // Iron.io MQ
            // =========================================================

            //IronMqRestClient ironMq = IronSharp.IronMQ.Client.New();

            // For beta testing
            //IronMqRestClient ironMq = IronSharp.IronMQ.Client.New(new IronClientConfig { ProjectId = "53a3b3bd5e8edd1245000005", Token = "O7KrMTwmw997iq0KzL7v", Host = "192.168.1.155", ApiVersion = 3, Port = 8080, Scheme = Uri.UriSchemeHttp });

            // Simple actions

            // Post message to a queue
            TestPosting(ironMq);

            // Post message to a queue and reserve it
            TestReservation(ironMq);

            // Post message, reserve it and delete
            TestDeletingReservedMessage(ironMq);

            // Actions on queue

            // Update queue info
            TestUpdatingTheQueue(ironMq);

            // Clear all messages of queue
            TestClearingQueue(ironMq);

            // Delete queue and its messages
            TestDeletingQueue(ironMq);

            // Get list of all queus inside project
            TestGettingListQueue(ironMq);

            // Actions on messages

            //TestPosting(ironMq);
            //TestReservation(ironMq);
            //TestDeletingReservedMessage(ironMq);

            // Get message by id without reservation
            TestGettingMessageById(ironMq);

            // Get message without reserving it
            TestPeekingMessage(ironMq);

            // Delete unreserved message
            TestDeletingMessage(ironMq);

            // Touch message to prolongate reservation
            TestTouching(ironMq);

            // Touch message to prolongate reservation
            TestTouchingTwice(ironMq);

            // Release reserved message
            TestReleasing(ironMq);

            // Delete a bunch of messages
            TestDeletingMessages(ironMq);

            // Get subscriber's URL
            TestGettingSubscribersInfo(ironMq);

            // =========================================================
            // Iron.io Worker
            // =========================================================

            Console.WriteLine("Be sure to create a 'Test' worker before running this sample");
            Console.WriteLine("Press ANY key to continue");
            Console.Read();

            IronWorkerRestClient workerClient = IronSharp.IronWorker.Client.New();

            string taskId = workerClient.Tasks.Create("Test", new { Key = "Value" });

            Console.WriteLine("TaskID: {0}", taskId);

            TaskInfoCollection taskInfoCollection = workerClient.Tasks.List("Test");

            foreach (TaskInfo task in taskInfoCollection.Tasks)
            {
                Console.WriteLine(task.Inspect());
            }

            ScheduleOptions options = ScheduleBuilder.Build().
                                      Delay(TimeSpan.FromMinutes(1)).
                                      WithFrequency(TimeSpan.FromHours(1)).
                                      RunFor(TimeSpan.FromHours(3)).
                                      WithPriority(TaskPriority.Default);

            var payload = new
            {
                a = "b",
                c = new[] { 1, 2, 3 }
            };

            ScheduleIdCollection schedule = workerClient.Schedules.Create("Test", payload, options);

            Console.WriteLine(schedule.Inspect());

            workerClient.Schedules.Cancel(schedule.Schedules.First().Id);

            // =========================================================
            // Iron.io Cache
            // =========================================================

            IronCacheRestClient ironCacheClient = IronSharp.IronCache.Client.New();

            // Get a Cache object
            CacheClient cache = ironCacheClient.Cache("my_cache");

            // Put value to cache by key
            cache.Put("number_item", 42);

            // Get value from cache by key
            Console.WriteLine(cache.Get("number_item").Value);

            // Get value from cache by key
            Console.WriteLine(cache.Get <int>("number_item"));

            // Numbers can be incremented
            cache.Increment("number_item", 10);

            // Immediately delete an item
            cache.Delete("number_item");

            cache.Put("complex_item", new { greeting = "Hello", target = "world" });

            // Get value from cache by key
            Console.WriteLine(cache.Get("complex_item").Value);

            cache.Delete("complex_item");

            Console.WriteLine("============= Done ==============");
            Console.Read();
        }
Esempio n. 17
0
        public static void Run()
        {
            var cacheClient = new CacheClient();

            var stopwatch = new Stopwatch();

            var overallStopwatch = new Stopwatch();
            overallStopwatch.Start();

            // 502 chars = ~1 kb
            const string value = "asdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasasdfasdfasas";

            CustomObject myObject = new CustomObject();

            Console.WriteLine("***** BEGIN ADD 10000 TESTS *****");
            Console.WriteLine();

            #region Regular Add 10000 strings
            stopwatch.Start();
            for (int i = 1; i <= 10000; i++)
            {
                cacheClient.AddOrUpdate("test" + i, value);
            }
            stopwatch.Stop();

            Console.WriteLine("Add time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            #region Bulk Add 10000 strings
            var list = new List<KeyValuePair<string, object>>(10000);
            for (int i = 1; i <= 10000; i++)
            {
                list.Add(new KeyValuePair<string, object>("bulktest" + i, value));
            }

            stopwatch.Restart();
            cacheClient.AddOrUpdate(list);
            stopwatch.Stop();

            Console.WriteLine("Add Many time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            #region Tagged Add 10000 strings
            stopwatch.Restart();
            for (int i = 1; i <= 10000; i++)
            {
                cacheClient.AddOrUpdate("tagtest" + i, value, tagName: "demotag");
            }
            stopwatch.Stop();

            Console.WriteLine("Add Tagged time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            Console.WriteLine();
            Console.WriteLine("***** BEGIN SINGLE KEY GET TEST *****");
            Console.WriteLine();

            #region Regular Get 1 string proof
            string resultString = null;
            stopwatch.Restart();
            var result = cacheClient.TryGet("test5", out resultString) && string.Equals(resultString, value);
            stopwatch.Stop();

            Console.WriteLine("Get cache key \"test5\": time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            Console.WriteLine("Get cache key \"test5\": successful = " + result);
            Console.WriteLine("Get cache key \"test5\": result length: " + (resultString == null ? 0 : resultString.Length) + ", original length: " + value.Length);
            if (resultString != null)
            {
                var origHash = value.GetHashCode();
                var resultHash = resultString.GetHashCode();
                Console.WriteLine("Original String Hash Code: " + origHash + ", Result String Hash Code: " + resultHash);
            }
            #endregion

            Console.WriteLine();
            Console.WriteLine("***** BEGIN GET 10000 TESTS *****");
            Console.WriteLine();

            string otherValue = null;

            #region Regular Get 10000 strings
            stopwatch.Restart();
            for (int i = 1; i <= 10000; i++)
            {
                if (!cacheClient.TryGet("test" + i, out otherValue))
                {
                    Console.WriteLine("Get failed for cache key: " + "test" + i);
                }
            }
            stopwatch.Stop();

            Console.WriteLine("Get time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            #region Bulk Get 10000 strings
            var list2 = new List<string>(10000);
            for (int i = 1; i <= 10000; i++)
            {
                list2.Add("bulktest" + i);
            }

            stopwatch.Restart();
            var getManyResults = cacheClient.Get<string>(list2);
            stopwatch.Stop();

            Console.WriteLine("Get Many time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            Console.WriteLine("Get Many object count: " + getManyResults.Count);
            #endregion

            #region Tagged Get 10000 strings
            stopwatch.Restart();
            var getTaggedResults = cacheClient.GetTagged<string>("demotag");
            stopwatch.Stop();

            Console.WriteLine("Get Tagged time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            Console.WriteLine("Get Tagged object count: " + getManyResults.Count);
            #endregion

            Console.WriteLine();
            Console.WriteLine("***** BEGIN REMOVE 10000 TESTS *****");
            Console.WriteLine();

            #region Regular Remove 10000 strings
            stopwatch.Restart();
            for (int i = 1; i <= 10000; i++)
            {
                cacheClient.Remove("test" + i);
            }
            stopwatch.Stop();

            Console.WriteLine("Remove time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            #region Bulk Remove 10000 strings
            stopwatch.Restart();
            cacheClient.Remove(list2);
            stopwatch.Stop();

            Console.WriteLine("Remove Many time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            #region Tagged Remove 10000 strings
            stopwatch.Restart();
            cacheClient.RemoveTagged("demotag");
            stopwatch.Stop();

            Console.WriteLine("Remove Tagged time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            Console.WriteLine();
            Console.WriteLine("***** BEGIN ABSOLUTE EXPIRATION TEST *****");
            Console.WriteLine();

            #region Regular Add 10000 strings with absolute expiration
            var absoluteExpiration = DateTime.Now.AddMinutes(1);
            stopwatch.Restart();
            for (int i = 1; i <= 10000; i++)
            {
                cacheClient.AddOrUpdate("testabsolute" + i, value, absoluteExpiration: absoluteExpiration);
            }
            stopwatch.Stop();

            Console.WriteLine("Add absolute expiration time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            Console.WriteLine();
            Console.WriteLine("***** BEGIN 10000 COMPLEX OBJECT ADD TEST *****");
            Console.WriteLine();

            #region Regular Add 10000 complex objects with sliding expiration
            var slidingExpiration = new TimeSpan(0, 2, 0);
            stopwatch.Restart();
            for (int i = 1; i <= 10000; i++)
            {
                cacheClient.AddOrUpdate("testabsolutecomplex" + i, myObject, slidingExpiration: slidingExpiration);
            }
            stopwatch.Stop();

            Console.WriteLine("Add complex object time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            Console.WriteLine();
            Console.WriteLine("***** BEGIN 10000 COMPLEX OBJECT GET TEST *****");
            Console.WriteLine();

            #region Regular Get 10000 complex objects with sliding expiration
            stopwatch.Restart();
            for (int i = 1; i <= 10000; i++)
            {
                cacheClient.TryGet("testabsolutecomplex" + i, out myObject);
            }
            stopwatch.Stop();

            Console.WriteLine("Get complex object time taken: " + stopwatch.ElapsedMilliseconds + " ms, " + stopwatch.ElapsedTicks + " ticks");
            #endregion

            overallStopwatch.Stop();

            Console.WriteLine();
            Console.WriteLine("***** END TESTS *****");
            Console.WriteLine();

            Console.WriteLine("Total time taken: " + overallStopwatch.ElapsedMilliseconds + " ms, " + overallStopwatch.ElapsedTicks + " ticks");

            var key = Console.ReadKey();
            // Graceful shutdown option
            if (key.KeyChar == 'q')
            {
                cacheClient.Shutdown();
            }
        }
        public EntityMetaDetailsResponse GetEntityMetaDetails(ServiceStack.ServiceInterface.Service service)
        {
            // The entity meta details don't change per entity type, so cache these for performance
            var cacheKey    = string.Format("{0}-meta-details", EntityType.ToString().ToLower());
            var metaDetails = CacheClient.Get <EntityMetaDetailsResponse>(cacheKey);

            if (metaDetails != null)
            {
                return(metaDetails);
            }

            var request        = service.RequestContext.Get <IHttpRequest>();
            var appUri         = request.GetApplicationUrl().TrimEnd('/');
            var baseServiceUri = appUri + request.PathInfo.Replace("/meta", "");
            var queryString    = request.QueryString["format"] != null ? "&format=" + request.QueryString["format"] : "";
            var pkCount        = FieldMap.Count(pk => pk.Value.IsPrimaryKey);
            var fields         = new List <Link>();

            foreach (var f in FieldMap)
            {
                var isUnique = false;
                var ucs      = UniqueConstraintMap.Where(uc => uc.Value.Any(x => x.Name.Equals(f.Key, StringComparison.InvariantCultureIgnoreCase))).ToArray();
                var link     = Link.Create(
                    f.Key.ToCamelCase(), f.Value.DataType.Name, "field",
                    string.Format("{0}?select={1}{2}", baseServiceUri, f.Key.ToLowerInvariant(), queryString),
                    string.Format("The {0} field for the {1} resource.", f.Value.Name, typeof(TDto).Name),
                    new Dictionary <string, string>()
                    );
                var props = new SortedDictionary <string, string>();
                props.Add("index", f.Value.FieldIndex.ToString(CultureInfo.InvariantCulture));
                if (f.Value.IsPrimaryKey)
                {
                    props.Add("isPrimaryKey", f.Value.IsPrimaryKey.ToString().ToLower());
                    if (pkCount == 1)
                    {
                        isUnique = true;
                    }
                }
                if (f.Value.IsForeignKey)
                {
                    props.Add("isForeignKey", "true");
                }

                var ucNames = new List <string>();
                foreach (var uc in ucs)
                {
                    if (uc.Value.Count() == 1)
                    {
                        isUnique = true;
                    }
                    ucNames.Add(uc.Key.ToLower());
                }
                if (ucNames.Any())
                {
                    props.Add("partOfUniqueConstraints", string.Join(",", ucNames.ToArray()));
                }
                if (isUnique)
                {
                    props.Add("isUnique", "true");
                }
                if (f.Value.IsOfEnumDataType)
                {
                    props.Add("isOfEnumDataType", "true");
                }
                if (f.Value.IsReadOnly)
                {
                    props.Add("isReadOnly", "true");
                }
                if (f.Value.IsNullable)
                {
                    props.Add("isNullable", "true");
                }
                if (f.Value.IsOfEnumDataType)
                {
                    props.Add("isEnumType", "true");
                }
                if (f.Value.MaxLength > 0)
                {
                    props.Add("maxLength", f.Value.MaxLength.ToString(CultureInfo.InvariantCulture));
                }
                if (f.Value.Precision > 0)
                {
                    props.Add("precision", f.Value.Precision.ToString(CultureInfo.InvariantCulture));
                }
                if (f.Value.Scale > 0)
                {
                    props.Add("scale", f.Value.Scale.ToString(CultureInfo.InvariantCulture));
                }
                link.Properties = new Dictionary <string, string>(props);
                fields.Add(link);
            }

            var includes = new List <Link>();

            foreach (var f in IncludeMap)
            {
                var relationType = "";
                switch (f.Value.TypeOfRelation)
                {
                case RelationType.ManyToMany:
                    relationType = "n:n";
                    break;

                case RelationType.ManyToOne:
                    relationType = "n:1";
                    break;

                case RelationType.OneToMany:
                    relationType = "1:n";
                    break;

                case RelationType.OneToOne:
                    relationType = "1:1";
                    break;
                }
                var relatedDtoContainerName =
                    (Enum.GetName(typeof(EntityType), f.Value.ToFetchEntityType) ?? "").Replace("Entity", "");
                var link = Link.Create(
                    f.Key.ToCamelCase(),
                    (relationType.EndsWith("n") ? relatedDtoContainerName + "Collection" : relatedDtoContainerName),
                    "include",
                    string.Format("{0}?include={1}{2}", baseServiceUri, f.Key.ToLowerInvariant(), queryString),
                    string.Format(
                        "The {0} field for the {1} resource to include in the results returned by a query.",
                        f.Value.PropertyName,
                        typeof(TDto).Name),
                    new Dictionary <string, string>
                {
                    { "field", f.Value.PropertyName.ToCamelCase() },
                    {
                        "relatedType",
                        (Enum.GetName(typeof(EntityType), f.Value.ToFetchEntityType) ?? "").Replace("Entity", "")
                    },
                    { "relationType", relationType }
                });
                includes.Add(link);
            }

            var relations = new List <Link>();

            foreach (var f in RelationMap)
            {
                var isPkSide    = f.Value.StartEntityIsPkSide;
                var isFkSide    = !f.Value.StartEntityIsPkSide;
                var pkFieldCore = f.Value.GetAllPKEntityFieldCoreObjects().FirstOrDefault();
                var fkFieldCore = f.Value.GetAllFKEntityFieldCoreObjects().FirstOrDefault();
                var thisField   = isPkSide
                                    ? (pkFieldCore == null ? "" : pkFieldCore.Name)
                                    : (fkFieldCore == null ? "" : fkFieldCore.Name);
                var relatedField = isFkSide
                                    ? (pkFieldCore == null ? "" : pkFieldCore.Name)
                                    : (fkFieldCore == null ? "" : fkFieldCore.Name);
                var thisEntityAlias = isPkSide
                                    ? (pkFieldCore == null ? "": pkFieldCore.ActualContainingObjectName.Replace("Entity", ""))
                                    : (fkFieldCore == null ? "": fkFieldCore.ActualContainingObjectName.Replace("Entity", ""));
                var relatedEntityAlias = isFkSide
                                    ? (pkFieldCore == null ? "": pkFieldCore.ActualContainingObjectName.Replace("Entity", ""))
                                    : (fkFieldCore == null ? "": fkFieldCore.ActualContainingObjectName.Replace("Entity", ""));
                var relationType = "";
                switch (f.Value.TypeOfRelation)
                {
                case RelationType.ManyToMany:
                    relationType = "n:n";
                    break;

                case RelationType.ManyToOne:
                    relationType = "n:1";
                    break;

                case RelationType.OneToMany:
                    relationType = "1:n";
                    break;

                case RelationType.OneToOne:
                    relationType = "1:1";
                    break;
                }
                var link = Link.Create(
                    f.Key.ToCamelCase(),
                    relationType.EndsWith("n") ? relatedEntityAlias + "Collection" : relatedEntityAlias, "relation",
                    string.Format("{0}?relations={1}{2}", baseServiceUri, f.Key.ToLowerInvariant(), queryString),
                    string.Format(
                        "The relation '{0}' for the {1} resource between a {2} (PK) and a {3} (FK) resource.",
                        f.Value.MappedFieldName,
                        typeof(TDto).Name, f.Value.AliasStartEntity.Replace("Entity", ""),
                        f.Value.AliasEndEntity.Replace("Entity", "")),
                    new Dictionary <string, string>
                {
                    { "field", f.Value.MappedFieldName.ToCamelCase() },
                    { "joinHint", f.Value.JoinType.ToString().ToLower() },
                    { "relationType", relationType },
                    { "isPkSide", isPkSide.ToString().ToLower() },
                    { "isFkSide", isFkSide.ToString().ToLower() },
                    { "isWeakRelation", f.Value.IsWeak.ToString().ToLower() },
                    { "pkTypeName", isPkSide ? thisEntityAlias : relatedEntityAlias },
                    {
                        "pkTypeField",
                        isPkSide ? thisField.ToCamelCase() : relatedField.ToCamelCase()
                    },
                    { "fkTypeName", isFkSide ? thisEntityAlias : relatedEntityAlias },
                    {
                        "fkTypeField",
                        isFkSide ? thisField.ToCamelCase() : relatedField.ToCamelCase()
                    },
                });
                relations.Add(link);
                // add relation to fields list as well
                fields.Add(Link.Create(
                               f.Value.MappedFieldName.ToCamelCase(),
                               relationType.EndsWith("n") ? relatedEntityAlias + "Collection": relatedEntityAlias,
                               "field", null,
                               string.Format("The {0} field for the {1} resource.", f.Value.MappedFieldName,
                                             typeof(TDto).Name), new Dictionary <string, string>
                {
                    { "relation", f.Value.MappedFieldName.ToCamelCase() },
                    { "relationType", relationType },
                    { "isPkSide", isPkSide.ToString().ToLower() },
                    { "isFkSide", isFkSide.ToString().ToLower() },
                }));
            }

            metaDetails = new EntityMetaDetailsResponse()
            {
                Fields    = fields.ToArray(),
                Includes  = includes.ToArray(),
                Relations = relations.ToArray()
            };
            CacheClient.Set(cacheKey, metaDetails);
            return(metaDetails);
        }