public async Task Process(byte[] processMessage, IPlatformExit platformExit)
        {
            KernelMessage kernelMessage = JsonConvert.DeserializeObject <KernelMessage>(Encoding.UTF8.GetString(processMessage));
            ScrapySource  scrapySource  = await coreCache.RestoreAsync <ScrapySource>(PrefixConst.SOURCE_META + kernelMessage.JobId);

            var        sourceType = scrapySource.Source.Type;
            IExtractor extractor  = extractorManager.GetExtrator(sourceType);
            await extractor.ExtractTarget(scrapySource.Source.Parameters.ToString(), scrapySource.SaveTo);

            string         transformJobIdsKey = PrefixConst.SOURCE_TRANSFOR_MAP + kernelMessage.JobId;
            TaskingManager taskingManager     = new TaskingManager();
            List <string>  jobIds             = await coreCache.RestoreAsync <List <string> >(transformJobIdsKey);

            if (jobIds != null)
            {
                foreach (var x in jobIds)
                {
                    KernelMessage transforMsg = new KernelMessage()
                    {
                        JobId       = x,
                        MessageId   = kernelMessage.MessageId,
                        MessageName = kernelMessage.MessageName
                    };
                    taskingManager.AddTask(platformExit.OutRandom(transforMsg));
                    logger.Debug(JsonConvert.SerializeObject(transforMsg));
                }
            }
            await taskingManager.WhenAll();
        }
示例#2
0
        public async Task ScheduleNew(ScheduleMessage scheduleMessage, PlatformModel platformModel)
        {
            Dictionary <string, ScrapySource> sourceDict =
                SourceGenManager.Instance.GenerateSource(scheduleMessage.Sources, scheduleMessage.MessageId);

            TransformEventData transformEventData =
                TransformGenManager.Instance.GenerateTransform(sourceDict, scheduleMessage.Transforms);

            LoadEventData loadEventData = LoadGenManager.Instance
                                          .GenerateLoadEvent(transformEventData, scheduleMessage.LandingTargets);

            MessageIndexer messageIndexer = new MessageIndexer()
            {
                MessageId    = scheduleMessage.MessageId,
                MessageName  = scheduleMessage.MessageName,
                StartTime    = DateTime.Now,
                SourceJobIds = sourceDict.Values
                               .Select(x => x.JobId).ToDictionary(x => x, x => 0),
                TransformJobIds = transformEventData.TransformEvents
                                  .SelectMany(x => x.Value)
                                  .Select(x => x.JobId)
                                  .ToDictionary(x => x, x => 0),
                LoadJobIds = loadEventData.LoadEvents
                             .Select(x => x.JobId)
                             .ToDictionary(x => x, x => 0)
            };
            TaskingManager manager = new TaskingManager();

            manager.AddTask(platformModel.CoreCache.StoreAsync(PrefixConst.MESSAGE_JOBs + messageIndexer.MessageId, messageIndexer));

            foreach (var srcKey in transformEventData.SourceMapToTransform.Keys)
            {
                manager.AddTask(platformModel.CoreCache.StoreAsync(
                                    PrefixConst.SOURCE_TRANSFOR_MAP + srcKey,
                                    transformEventData.SourceMapToTransform[srcKey]));
            }
            foreach (var transkv in loadEventData.TransformToLoadMap)
            {
                manager.AddTask(platformModel.CoreCache.StoreStringAsync(
                                    PrefixConst.TRANSFORM_LOAD_MAP + transkv.Key, transkv.Value));
            }

            foreach (var source in sourceDict.Values)
            {
                manager.AddTask(platformModel.CoreCache.StoreAsync(
                                    PrefixConst.SOURCE_META + source.JobId,
                                    source));
            }
            foreach (var transform in transformEventData.TransformEvents.SelectMany(x => x.Value))
            {
                manager.AddTask(platformModel.CoreCache.StoreAsync(
                                    PrefixConst.TRANSFORM_META + transform.JobId, transform));
            }

            foreach (var load in loadEventData.LoadEvents)
            {
                manager.AddTask(platformModel.CoreCache.StoreAsync(
                                    PrefixConst.LOAD_META + load.JobId, load));
            }



            await manager.WhenAll();

            await PublishSourceJobs(
                scheduleMessage.MessageName,
                scheduleMessage.MessageId,
                platformModel.PlatformExit,
                messageIndexer.SourceJobIds.Keys.ToArray());
        }