Ejemplo n.º 1
0
        public SetDataSourceRes SetDataSource(Stream stream)
        {
            if (WebOperationContext.Current.IncomingRequest.Headers == null)
            {
                throw new Exception("Can not get current WebOpreationContext.");
            }

            SetDataSourceReq param = null;

            using (var streamReader = new StreamReader(stream))
            {
                param = DataConverter.Deserializer <SetDataSourceReq>(streamReader.ReadToEnd());
            }

            var res = new SetDataSourceRes();

            if (param != null && param.rawdata != null && param.rawdata.Count > 0 && !string.IsNullOrWhiteSpace(param.source) && !string.IsNullOrWhiteSpace(param.category))
            {
                var query = MariaQueryBuilder.SetDataSource(param);
                MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", query);

                res.code    = "200";
                res.message = "요청 접수 완료";
            }
            else
            {
                res.code    = "400";
                res.message = "잘못된 요청";
            }

            return(res);
        }
Ejemplo n.º 2
0
        public void SetCollectionModule(Dictionary <string, object> data)
        {
            var tableName   = "data_collection";
            var upsertQuery = MariaQueryBuilder.UpsertQuery(tableName, data);

            MariaDBConnector.Instance.SetQuery(upsertQuery);
        }
Ejemplo n.º 3
0
        public string Modify(JsonValue jsonObj)
        {
            var upsertQuery = MariaQueryBuilder.UpsertQuery(TableName, jsonObj, true);

            var res = MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", upsertQuery);

            return(res.ToString());
        }
Ejemplo n.º 4
0
        public string Delete(JsonValue jsonObj)
        {
            var deleteQuery = MariaQueryBuilder.DeleteQuery(TableName, jsonObj);

            var res = MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", deleteQuery);

            return(res.ToString());
        }
Ejemplo n.º 5
0
        public string GetList()
        {
            var selectedItems = new List <string>()
            {
                "member_id", "password", "member_name", "privilege", "email", "phone_number"
            };
            var selectQuery = MariaQueryBuilder.SelectQuery(TableName, selectedItems);
            var member      = MariaDBConnector.Instance.GetJsonArray("DynamicQueryExecuter", selectQuery);

            return(member.ToString());
        }
Ejemplo n.º 6
0
        public string GetList(JsonValue jsonObj)
        {
            var selectedItems = new List <string>()
            {
                "name", "view_type", "view_query", "column_json(view_options) as view_options", "DATE_FORMAT(unixtime, '%Y-%m-%d %H:%i:%s') as `unixtime`"
            };
            var query = MariaQueryBuilder.SelectQuery("data_view", selectedItems, jsonObj);
            var res   = MariaDBConnector.Instance.GetJsonArray("DynamicQueryExecuter", query);

            return(res.ToString());
        }
Ejemplo n.º 7
0
        public string GetList(JsonValue jsonObj)
        {
            var userId        = jsonObj["member_id"].ReadAs <string>();
            var selectedItems = new List <string>()
            {
                "category", "column_json(rawdata) as rawdata", "DATE_FORMAT(unixtime, '%Y-%m-%d %H:%i:%s') as `unixtime`"
            };
            var query = MariaQueryBuilder.SelectQuery(TableName.Replace("{user}", userId), selectedItems);
            var res   = MariaDBConnector.Instance.GetJsonArray("DynamicQueryExecuter", query);

            return(res.ToString());
        }
Ejemplo n.º 8
0
        public JsonValue GetTab(JsonValue jsonValue)
        {
            var selectedItems = new List <string>()
            {
                "name", "view_type", "view_query", "DATE_FORMAT(unixtime, '%Y-%m-%d %H:%i:%s') as `unixtime`"
            };
            var query    = MariaQueryBuilder.SelectQuery("data_view", selectedItems, jsonValue);
            var viewInfo = MariaDBConnector.Instance.GetJsonObject(query);
            var res      = MariaDBConnector.Instance.GetJsonArrayWithSchema("DynamicQueryExecuter", viewInfo["view_query"].ReadAs <string>());

            return(res.ToString());
        }
Ejemplo n.º 9
0
        public string GetList()
        {
            var selectedItems = new List <string>()
            {
                "name", "target_source", "analysis_query", "action_type", "COLUMN_JSON(options) as options",
                "COLUMN_JSON(schedule) as schedule", "status", "DATE_FORMAT(unixtime, '%Y-%m-%d %H:%i:%s') as `unixtime`"
            };
            var query  = MariaQueryBuilder.SelectQuery(TableName, selectedItems);
            var result = MariaDBConnector.Instance.GetJsonArray(query);

            var state = scheduleThread.Count > 0 ? "running" : "stop";
            var res   = new JsonObject(new KeyValuePair <string, JsonValue>("state", state), new KeyValuePair <string, JsonValue>("result", result));

            return(res.ToString());
        }
Ejemplo n.º 10
0
        public static void ExecuteScheduler(string tableName, string action_type, JsonValue whereKV, JsonValue schedule, JsonValue setDict, Func <string, bool> action, Action notify)
        {
            string statusUpdate = string.Empty;
            var    switchMode   = "stop";

            if (action_type == "schedule")
            {
                var start = DateTime.Parse(schedule["start"].ReadAs <string>()).TimeOfDay;
                var end   = DateTime.Parse(schedule["end"].ReadAs <string>()).TimeOfDay;
                //MON,TUE,WED,THU,FRI,SAT,SUN
                var weekDays = new List <string>();
                schedule["weekdays"].ToList().ForEach(a => weekDays.Add(a.Value.ReadAs <string>()));
                var interval = int.Parse(schedule["interval"].ReadAs <string>());

                while (true)
                {
                    var nowWeekDay = DateTime.Now.DayOfWeek.ToString().Substring(0, 3).ToUpper();
                    var nowTime    = DateTime.Now.TimeOfDay;

                    if (weekDays.Contains(nowWeekDay) && nowTime > start && nowTime < end)
                    {
                        action.DynamicInvoke(switchMode);
                        switchMode = "play";
                    }
                    else
                    {
                        if (switchMode != "wait")
                        {
                            setDict["status"] = "wait";
                            statusUpdate      = MariaQueryBuilder.UpdateQuery(tableName, whereKV, setDict);
                            MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", statusUpdate);
                            notify.DynamicInvoke();
                        }
                        switchMode = "wait";
                    }
                    Thread.Sleep(interval);
                }
            }
            else
            {
                action.DynamicInvoke(switchMode);
                setDict["status"] = "stop";
                statusUpdate      = MariaQueryBuilder.UpdateQuery(tableName, whereKV, setDict);
                MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", statusUpdate);
                notify.DynamicInvoke();
            }
        }
Ejemplo n.º 11
0
        public string Modify(JsonValue jsonObj)
        {
            var source       = jsonObj["member_id"].ReadAs <string>();
            var category     = jsonObj["category"].ReadAs <string>();
            var rawdata      = jsonObj["rawdata"];
            var insertSource = new List <JsonDictionary>();
            var jsonDict     = new JsonDictionary();

            foreach (var item in rawdata)
            {
                jsonDict.Add(item.Key, item.Value.ReadAs <string>());
            }
            insertSource.Add(jsonDict);
            var query = MariaQueryBuilder.InsertSource(source, category, insertSource, "", "");
            var res   = MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", query);

            return(res.ToString());
        }
Ejemplo n.º 12
0
        private bool EmptyInformation(string collectionName, Func <string, bool> callback)
        {
            var file      = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "stocklist.json");
            var stockText = File.ReadAllText(file);
            var stockJson = JsonValue.Parse(stockText);

            foreach (var stock in stockJson)
            {
                var result = new SetDataSourceReq();
                result.rawdata      = new List <JsonDictionary>();
                result.source       = collectionName;
                result.category     = "종목코드";
                result.collected_at = "날짜";

                var finance = new JsonDictionary();
                var code    = stock.Value["code"].ReadAs <string>();
                var name    = stock.Value["name"].ReadAs <string>();
                var type    = stock.Value["type"].ReadAs <string>();
                var cnt     = stock.Value["cnt"].ReadAs <string>();

                finance.Add("종목코드", code);
                finance.Add("종목유형", type);
                finance.Add("종목명", name);
                finance.Add("상장주식수", cnt);

                result.rawdata.Add(finance);

                ThreadPool.QueueUserWorkItem((a) =>
                {
                    var setSourceQuery = MariaQueryBuilder.SetDataSource(result);
                    MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", setSourceQuery);
                });
            }
            callback.DynamicInvoke("test");
            return(true);
        }
Ejemplo n.º 13
0
        private bool KOSPI_KOSDAQ(string collectionName, Func <string, bool> callback)
        {
            Console.WriteLine("{0} Collector Start : {1}", collectionName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

            var codeArr = new List <string>()
            {
                "KOSPI", "KOSDAQ"
            };

            foreach (var code in codeArr)
            {
                try
                {
                    var googleUrl = "http://www.google.com/finance/getprices?q={code}&i=86400&p=40Y&f=d,c,v,k,o,h,l&df=cpct&auto=0".Replace("{code}", code);

                    var reqParam = new RequestParameter()
                    {
                        Url            = googleUrl,
                        ContentType    = "application/json",
                        EncodingOption = "UTF8",
                        Method         = "GET"
                    };

                    var stockData  = this.DecodeHex(HttpsRequest.Instance.GetResponseByHttps(reqParam));
                    var histroyCsv = Regex.Split(stockData, @"\n");
                    var columnInfo = new string[] { "날짜", "종가", "고가", "저가", "시가", "거래량", "전일비", "전일비율" };

                    var result = new SetDataSourceReq();
                    result.rawdata      = new List <JsonDictionary>();
                    result.source       = collectionName;
                    result.category     = "종목코드";
                    result.collected_at = "날짜";

                    var standardTime = string.Empty;
                    for (int i = 7; i < histroyCsv.Length - 1; i++)
                    {
                        var sise = new JsonDictionary();
                        var row  = histroyCsv[i].Split(',');

                        sise.Add("종목코드", code);
                        sise.Add("종목명", code);
                        sise.Add("종목유형", "SOSOK");
                        if (row[0].Trim().Contains("a"))
                        {
                            standardTime = row[0].Trim().Replace("a", "");
                            sise.Add(columnInfo[0], standardTime);
                        }
                        else
                        {
                            sise.Add(columnInfo[0], (int.Parse(standardTime) + (86400 * int.Parse(row[0]))).ToString());
                        }
                        sise.Add(columnInfo[1], row[1].Trim());
                        sise.Add(columnInfo[2], row[2].Trim());
                        sise.Add(columnInfo[3], row[3].Trim());
                        sise.Add(columnInfo[4], row[4].Trim());
                        sise.Add(columnInfo[5], row[5].Trim());
                        if (result.rawdata.Count > 0)
                        {
                            var prevPrice = double.Parse(result.rawdata[result.rawdata.Count - 1]["종가"].ToString());
                            if (prevPrice > 0)
                            {
                                var diff = double.Parse(row[1].Trim()) - prevPrice;
                                sise.Add(columnInfo[6], diff);
                                sise.Add(columnInfo[7], (double)diff / prevPrice * 100);
                            }
                        }

                        result.rawdata.Add(sise);
                    }
                    if (result.rawdata.Count > 0)
                    {
                        ThreadPool.QueueUserWorkItem((a) =>
                        {
                            var setSourceQuery = MariaQueryBuilder.SetDataSource(result);
                            MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", setSourceQuery);
                        });
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("All Stock Collector Error");
                }
            }
            callback.DynamicInvoke("test");
            Console.WriteLine("{0} Collector End : {1}", collectionName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            return(true);
        }
Ejemplo n.º 14
0
        private bool FinanceInformation(string collectionName, Func <string, bool> callback)
        {
            Console.WriteLine("{0} Collector Start : {1}", collectionName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            var file      = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "stocklist.json");
            var stockText = File.ReadAllText(file);
            var stockJson = JsonValue.Parse(stockText);

            foreach (var stock in stockJson)
            {
                try
                {
                    var result = new SetDataSourceReq();
                    result.rawdata      = new List <JsonDictionary>();
                    result.source       = collectionName;
                    result.category     = "종목코드";
                    result.collected_at = "날짜";

                    var code = stock.Value["code"].ReadAs <string>();
                    var name = stock.Value["name"].ReadAs <string>();
                    var type = stock.Value["type"].ReadAs <string>();
                    var cnt  = stock.Value["cnt"].ReadAs <string>();
                    var url  = "http://companyinfo.stock.naver.com/v1/company/ajax/cF1001.aspx?cmp_cd={code}&fin_typ=0&freq_typ=Y";

                    var reqParam = new RequestParameter()
                    {
                        Url            = url.Replace("{code}", code),
                        ContentType    = "text/html",
                        EncodingOption = "UTF8",
                        Method         = "GET"
                    };

                    var          htmlCode = HttpsRequest.Instance.GetResponseByHttps(reqParam);
                    HtmlDocument doc      = new HtmlDocument();
                    doc.LoadHtml(htmlCode);
                    var titleNodes = doc.DocumentNode.SelectNodes("//th[contains(@class,'bg txt title')]");
                    var dateNodes  = doc.DocumentNode.SelectNodes("//th[contains(@class,' bg')]");
                    var dataNodes  = doc.DocumentNode.SelectNodes("//td[contains(@class,'num')]");


                    for (int i = 1; i < dateNodes.Count; i++)
                    {
                        var finance = new JsonDictionary();

                        var dateNode = dateNodes[i];
                        var dateText = dateNode.InnerText.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("&nbsp;", "");
                        if (string.IsNullOrWhiteSpace(dateText))
                        {
                            continue;
                        }
                        var dateValue = dateText.Substring(0, 7);
                        var date      = DateTime.Parse(dateValue);
                        var unixtime  = EnvironmentHelper.GetUnixTime(date) / 1000;

                        finance.Add("종목코드", code);
                        finance.Add("종목유형", type);
                        finance.Add("종목명", name);
                        finance.Add("상장주식수", cnt);
                        finance.Add("날짜", unixtime);

                        for (int j = 0; j < titleNodes.Count; j++)
                        {
                            var titleNode = titleNodes[j];
                            var dataNode  = dataNodes[j * (dateNodes.Count - 1) + (i - 1)];

                            var key   = titleNode.InnerText.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("&nbsp;", "");
                            var value = dataNode.InnerText.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("&nbsp;", "").Replace(",", "");

                            if (string.IsNullOrWhiteSpace(value))
                            {
                                continue;
                            }
                            finance.Add(key, value);
                        }

                        if (finance.GetDictionary().Keys.Count < 5)
                        {
                            continue;
                        }
                        result.rawdata.Add(finance);
                    }
                    if (result.rawdata.Count > 0)
                    {
                        ThreadPool.QueueUserWorkItem((a) =>
                        {
                            var setSourceQuery = MariaQueryBuilder.SetDataSource(result);
                            MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", setSourceQuery);
                        });
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Finance Collector Error");
                }
            }
            callback.DynamicInvoke("test");
            Console.WriteLine("{0} Collector End : {1}", collectionName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            return(true);
        }
Ejemplo n.º 15
0
        private bool CurrentStockInformation(string collectionName, Func <string, bool> callback)
        {
            Console.WriteLine("{0} Collector Start : {1}", collectionName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            var file      = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "stocklist.json");
            var stockText = File.ReadAllText(file);
            var stockJson = JsonValue.Parse(stockText);
            var progress  = 1;

            foreach (var stock in stockJson)
            {
                try
                {
                    var result = new SetDataSourceReq();
                    result.rawdata      = new List <JsonDictionary>();
                    result.source       = collectionName;
                    result.category     = "종목코드";
                    result.collected_at = "날짜";

                    var code  = stock.Value["code"].ReadAs <string>();
                    var name  = stock.Value["name"].ReadAs <string>();
                    var type  = stock.Value["type"].ReadAs <string>();
                    var cnt   = stock.Value["cnt"].ReadAs <string>();
                    var state = stock.Value.ContainsKey("state") ? stock.Value["state"].ReadAs <bool>() : false;

                    var      nvParser = new nvParser(code);
                    string[] siseInfo;
                    var      date = this.config["CurrentStockInformation"]["date"].ReadAs <string>();
                    if (string.IsNullOrWhiteSpace(date))
                    {
                        siseInfo = nvParser.getSise(2);
                    }
                    else
                    {
                        siseInfo = nvParser.getSise(date, 2);
                    }

                    if (siseInfo.Length < 7)
                    {
                        continue;
                    }
                    var columnInfo = new string[] { "날짜", "종가", "전일비", "시가", "고가", "저가", "거래량", "전일비율" };

                    var sise     = new JsonDictionary();
                    var siseDate = DateTime.Parse(siseInfo[0]).AddHours(16);
                    var siseUnix = EnvironmentHelper.GetUnixTime(siseDate) / 1000;
                    sise.Add("종목코드", code);
                    sise.Add("종목명", name);
                    sise.Add("종목유형", type);
                    sise.Add("상장주식수", cnt);
                    sise.Add(columnInfo[0], siseUnix);
                    sise.Add(columnInfo[1], siseInfo[1]);
                    var sign = string.Empty;
                    if (1 + 7 < siseInfo.Length)
                    {
                        if (int.Parse(siseInfo[1]) < int.Parse(siseInfo[1 + 7]))
                        {
                            sign = "-";
                        }
                    }
                    sise.Add(columnInfo[2], sign + siseInfo[2]);
                    sise.Add(columnInfo[3], siseInfo[3]);
                    sise.Add(columnInfo[4], siseInfo[4]);
                    sise.Add(columnInfo[5], siseInfo[5]);
                    sise.Add(columnInfo[6], siseInfo[6]);

                    var diff      = double.Parse(sign + siseInfo[2]);
                    var prevPrice = siseInfo.Length > 8 ? int.Parse(siseInfo[1 + 7]) : int.Parse(siseInfo[1]);
                    if (prevPrice > 0)
                    {
                        sise.Add(columnInfo[7], diff / prevPrice * 100);
                    }
                    else
                    {
                        sise.Add(columnInfo[7], 0);
                    }

                    if (sise.ContainsKey("종가"))
                    {
                        Task.Factory.StartNew(() =>
                        {
                            var analysis_sise = StockAnalysis.Instance.AutoAnalysis("day", code, siseUnix, sise);
                            result.rawdata.Add(analysis_sise);
                            var setSourceQuery = MariaQueryBuilder.SetDataSource(result);
                            MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", setSourceQuery);
                        });
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Current Stock Collector Error");
                }
                EnvironmentHelper.ProgressBar(progress, stockJson.Count);
                progress++;
            }
            callback.DynamicInvoke("test");
            Console.WriteLine("{0} Collector End : {1}", collectionName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

            return(true);
        }
Ejemplo n.º 16
0
        private bool AllStockInformation(string collectionName, Func <string, bool> callback)
        {
            Console.WriteLine("{0} Collector Start : {1}", collectionName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            var file      = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "stocklist.json");
            var stockText = File.ReadAllText(file);
            var stockJson = JsonValue.Parse(stockText);
            var progress  = 1;

            foreach (var stock in stockJson)
            {
                try
                {
                    var result = new SetDataSourceReq();
                    result.rawdata      = new List <JsonDictionary>();
                    result.source       = collectionName;
                    result.category     = "종목코드";
                    result.collected_at = "날짜";

                    var code = stock.Value["code"].ReadAs <string>();
                    var name = stock.Value["name"].ReadAs <string>();
                    var type = stock.Value["type"].ReadAs <string>();
                    var cnt  = stock.Value["cnt"].ReadAs <string>();
                    var url  = "http://finance.naver.com/item/sise_day.nhn?code={code}&page={page}";

                    var reqParam = new RequestParameter()
                    {
                        Url            = url.Replace("{code}", code).Replace("{page}", "1"),
                        ContentType    = "text/html",
                        EncodingOption = "Default",
                        Method         = "GET"
                    };

                    var htmlCode = HttpsRequest.Instance.GetResponseByHttps(reqParam);

                    var lastPattern = "<td class=\"pgRR\"[^>]*>(.*?)</td>";
                    var lastMatches = Regex.Match(htmlCode, lastPattern, RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase);

                    var pagePattern = "page=(.*?)\"";
                    var page        = Regex.Match(lastMatches.Value, pagePattern);
                    var lastNumber  = 1;
                    if (!string.IsNullOrWhiteSpace(page.Value))
                    {
                        lastNumber = int.Parse(page.Value.Replace("page=", "").Replace("\"", ""));
                        lastNumber = lastNumber > 50 ? 50 : lastNumber;
                    }
                    var columnInfo = new string[] { "날짜", "종가", "전일비", "시가", "고가", "저가", "거래량", "전일비율" };
                    for (int i = lastNumber; i >= 1; i--)
                    {
                        reqParam.Url = url.Replace("{code}", code).Replace("{page}", i.ToString());
                        htmlCode     = HttpsRequest.Instance.GetResponseByHttps(reqParam);

                        MatchCollection tableMatches             = Regex.Matches(WithoutComments(htmlCode), TablePattern, ExpressionOptions);
                        string          tableHtmlWithoutComments = WithoutComments(tableMatches[0].Value);
                        MatchCollection rowMatches = Regex.Matches(tableHtmlWithoutComments, RowPattern, ExpressionOptions);

                        for (int j = rowMatches.Count - 1; j >= 0; j--)
                        {
                            Match rowMatch = rowMatches[j];
                            if (!rowMatch.Value.Contains("<th"))
                            {
                                MatchCollection cellMatches = Regex.Matches(rowMatch.Value, CellPattern, ExpressionOptions);
                                if (cellMatches.Count == 7)
                                {
                                    var sise = new JsonDictionary();
                                    sise.Add("종목코드", code);
                                    sise.Add("종목명", name);
                                    sise.Add("종목유형", type);
                                    sise.Add("상장주식수", cnt);
                                    var index = 0;
                                    foreach (Match cellMatch in cellMatches)
                                    {
                                        var key          = columnInfo[index];
                                        var valuePattern = "<span [^>]*>(.*?)</span>";
                                        var valueMatch   = Regex.Match(cellMatch.Groups[1].Value.Replace("\n", "").Replace("\t", ""), valuePattern);
                                        var value        = valueMatch.Groups[1].Value;
                                        if (index == 0)
                                        {
                                            if (string.IsNullOrWhiteSpace(value))
                                            {
                                                break;
                                            }
                                            var siseDate = DateTime.Parse(value).AddHours(16);
                                            value = (EnvironmentHelper.GetUnixTime(siseDate) / 1000).ToString();
                                        }
                                        if (index == 2)
                                        {
                                            value = cellMatch.Value.Contains("하락") ? "-" + value : value;
                                        }
                                        sise.Add(key, value.Replace(",", string.Empty));

                                        index++;
                                    }
                                    if (index == 7)
                                    {
                                        if (result.rawdata.Count > 0)
                                        {
                                            var diff      = double.Parse(sise["전일비"].ToString());
                                            var prevPrice = double.Parse(result.rawdata[result.rawdata.Count - 1]["종가"].ToString());
                                            sise.Add(columnInfo[index], prevPrice > 0 ? diff / prevPrice * 100 : 0);
                                        }
                                        result.rawdata.Add(sise);
                                    }
                                }
                            }
                        }
                    }
                    if (result.rawdata.Count > 0)
                    {
                        result.rawdata = StockAnalysis.Instance.AllAnalysis(result);
                        ThreadPool.QueueUserWorkItem((a) =>
                        {
                            var setSourceQuery = MariaQueryBuilder.SetDataSource(result);
                            MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", setSourceQuery);
                        });
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
                EnvironmentHelper.ProgressBar(progress, stockJson.Count);
                progress++;
            }
            callback.DynamicInvoke("test");
            Console.WriteLine("{0} Collector End : {1}", collectionName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

            return(true);
        }
Ejemplo n.º 17
0
        public string Execute(JsonValue jsonValue)
        {
            var res = new JsonObject();

            res.Add("code", "200");
            res.Add("message", "success");

            var name    = jsonValue["name"].ReadAs <string>();
            var command = jsonValue["command"].ReadAs <string>();

            var selectedItems = new List <string>()
            {
                "name", "module_name", "method_name", "action_type",
                "column_json(options) as options", "column_json(schedule) as schedule", "status", "unixtime"
            };
            var whereKV = new JsonObject(); whereKV.Add("name", name);

            var query      = MariaQueryBuilder.SelectQuery(TableName, selectedItems, whereKV);
            var moduleInfo = MariaDBConnector.Instance.GetJsonObject("DynamicQueryExecuter", query);

            var status = moduleInfo["status"].ReadAs <string>().ToLower();

            if (command != "stop" && (status == "play" || status == "wait"))
            {
                res["code"] = 400; res["message"] = "fail";
                return(res.ToString());
            }

            var setDict = new JsonObject();

            setDict.Add("status", status);

            var action = new Func <string, bool>((switchMode) =>
            {
                try
                {
                    if (switchMode == "wait" || switchMode == "stop")
                    {
                        setDict["status"] = "play";
                        var statusUpdate  = MariaQueryBuilder.UpdateQuery(TableName, whereKV, setDict);
                        MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", statusUpdate);
                        this.Notify();
                    }

                    var event_callback = new Func <string, bool>((code) =>
                    {
                        this.Notify_Completed();
                        return(true);
                    });

                    ModuleManager.Instance.ExecuteModule(moduleInfo, event_callback);
                }
                catch (Exception ex)
                {
                    LogWriter.Error(ex.ToString());
                }

                return(true);
            });

            switch (command.ToLower())
            {
            case "start":
            {
                var statusUpdate = string.Empty;
                var thread       = new Thread(new ThreadStart(() =>
                    {
                        Scheduler.ExecuteScheduler(TableName, moduleInfo["action_type"].ReadAs <string>(), whereKV, moduleInfo["schedule"], setDict, action, this.Notify);
                    }));

                if (scheduleThread.ContainsKey(name))
                {
                    scheduleThread.Remove(name);
                }
                scheduleThread.Add(name, thread);
                thread.Start();
                Thread.Sleep(100);
                break;
            }

            case "stop":
            {
                scheduleThread[name].Abort();
                scheduleThread.Remove(name);
                setDict["status"] = "stop";
                var statusUpdate = MariaQueryBuilder.UpdateQuery(TableName, whereKV, setDict);
                MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", statusUpdate);
                this.Notify();
                break;
            }
            }

            return(res.ToString());
        }
Ejemplo n.º 18
0
        private void ExecuteAnalysis(JsonValue analysis)
        {
            var analysis_name    = analysis["name"].ReadAs <string>();
            var target_source    = analysis["target_source"].ReadAs <string>();
            var analysis_query   = analysis["analysis_query"].ReadAs <string>();
            var analysis_options = analysis["options"];

            Console.WriteLine("{0} Analysis Start : {1}", analysis_name, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            if (analysis_query.Contains("{category}"))
            {
                var categories_query = "SELECT category FROM current_" + target_source;
                var categories       = MariaDBConnector.Instance.GetJsonArray(categories_query);
                foreach (var row in categories)
                {
                    var category = row["category"].ReadAs <string>();
                    var query    = analysis_query.Replace("{category}", category).Replace("{analysis_name}", analysis_name);
                    foreach (var kv in analysis_options)
                    {
                        var key = "{" + kv.Key.ToLower() + "}";
                        query = query.Replace(key, kv.Value.ReadAs <string>());
                    }

                    var data = MariaDBConnector.Instance.GetQuery("DynamicQueryExecuter", query);
                    if (data != null)
                    {
                        var setSource = new SetDataSourceReq()
                        {
                            rawdata      = data,
                            category     = category,
                            source       = target_source,
                            collected_at = "날짜"
                        };
                        if (setSource.rawdata.Count > 0)
                        {
                            ThreadPool.QueueUserWorkItem((a) =>
                            {
                                var setSourceQuery = MariaQueryBuilder.SetDataSource(setSource);
                                MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", setSourceQuery);
                            });
                        }
                    }
                }
            }
            else
            {
                var query = analysis_query.Replace("{analysis_name}", analysis_name);
                foreach (var kv in analysis_options)
                {
                    var key = "{" + kv.Key.ToLower() + "}";
                    query = query.Replace(key, kv.Value.ReadAs <string>());
                }

                var data = MariaDBConnector.Instance.GetQuery("DynamicQueryExecuter", query);
                if (data != null)
                {
                    var setSource = new SetDataSourceReq()
                    {
                        rawdata      = data,
                        category     = "카테고리",
                        source       = target_source,
                        collected_at = "날짜"
                    };
                    if (setSource.rawdata.Count > 0)
                    {
                        var setSourceQuery = MariaQueryBuilder.SetDataSource(setSource);
                        MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", setSourceQuery);
                    }
                }
            }
            Console.WriteLine("{0} Analysis End : {1}", analysis_name, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
        }
Ejemplo n.º 19
0
        public string Execute(JsonValue jsonValue)
        {
            var res = new JsonObject();

            res.Add("code", "200");
            res.Add("message", "success");

            var name    = jsonValue["name"].ReadAs <string>();
            var command = jsonValue["command"].ReadAs <string>();

            var selectedItems = new List <string>()
            {
                "name", "target_source", "analysis_query", "action_type", "COLUMN_JSON(options) as options",
                "COLUMN_JSON(schedule) as schedule", "status", "DATE_FORMAT(unixtime, '%Y-%m-%d %H:%i:%s') as `unixtime`"
            };
            var whereKV = new JsonObject(); whereKV.Add("name", name);

            var query        = MariaQueryBuilder.SelectQuery(TableName, selectedItems, whereKV);
            var analysisInfo = MariaDBConnector.Instance.GetJsonObject(query);

            var status = analysisInfo["status"].ReadAs <string>().ToLower();

            if (command != "stop" && (status == "play" || status == "wait" || status == "spinner"))
            {
                res["code"] = 400; res["message"] = "fail";
                return(res.ToString());
            }

            var setDict = new JsonObject();

            setDict.Add("status", status);

            var action = new Func <string, bool>((switchMode) =>
            {
                try
                {
                    if (switchMode == "wait" || switchMode == "stop")
                    {
                        setDict["status"] = "play";
                        var statusUpdate  = MariaQueryBuilder.UpdateQuery(TableName, whereKV, setDict);
                        MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", statusUpdate);

                        this.Notify();
                    }
                    this.ExecuteAnalysis(analysisInfo);
                }
                catch (Exception ex)
                {
                    LogWriter.Error(ex.ToString());
                }

                return(true);
            });

            switch (command.ToLower())
            {
            case "start":
            {
                var statusUpdate = string.Empty;
                var thread       = new Thread(new ThreadStart(() =>
                    {
                        Scheduler.ExecuteScheduler(TableName, analysisInfo["action_type"].ReadAs <string>(), whereKV, analysisInfo["schedule"], setDict, action, this.Notify);
                    }));

                if (scheduleThread.ContainsKey(name))
                {
                    scheduleThread.Remove(name);
                }
                scheduleThread.Add(name, thread);
                thread.Start();
                Thread.Sleep(100);
                break;
            }

            case "stop":
            {
                scheduleThread[name].Abort();
                scheduleThread.Remove(name);
                setDict["status"] = "stop";
                var statusUpdate = MariaQueryBuilder.UpdateQuery(TableName, whereKV, setDict);
                MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", statusUpdate);
                this.Notify();
                break;
            }
            }

            return(res.ToString());
        }