diff --git a/MarketData/MarketData/Services/MainService.cs b/MarketData/MarketData/Services/MainService.cs
index c31cf5f..2fe78e6 100755
--- a/MarketData/MarketData/Services/MainService.cs
+++ b/MarketData/MarketData/Services/MainService.cs
@@ -35,7 +35,8 @@ namespace MarketData.Services
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEANALYSTRATINGS");
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATESECFILINGSWATCHLIST /WATCHLIST:");
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATECOMPANYPROFILES");
- MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEGDPPERCAPITA");
+ MDTrace.WriteLine(LogLevel.DEBUG, "UPDATEGDPPERCAPITA");
+ MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEUNEMPLOYMENTPERCAPITA");
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEETFHOLDINGS");
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEFINANCIALSTATEMENTS");
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEFUNDAMENTALS");
@@ -78,7 +79,8 @@ namespace MarketData.Services
tasks.Add("UPDATEANALYSTRATINGS",TaskUpdateAnalystRatings);
tasks.Add("UPDATESECFILINGSWATCHLIST",TaskUpdateSECFilingsWatchList);
tasks.Add("UPDATECOMPANYPROFILES",TaskUpdateCompanyProfiles);
- tasks.Add("UPDATEGDPPERCAPITA",TaskUpdateGDPPerCapita);
+ tasks.Add("UPDATEGDPPERCAPITA", TaskUpdateGDPPerCapita);
+ tasks.Add("UPDATEUNEMPLOYMENTPERCAPITA", TaskUpdateUnemploymentPerCapita);
tasks.Add("UPDATEETFHOLDINGS",TaskUpdateETFHoldings);
tasks.Add("UPDATEFINANCIALSTATEMENTS",TaskUpdateFinancialStatements);
tasks.Add("UPDATEFUNDAMENTALS",TaskUpdateFundamentals);
@@ -219,6 +221,12 @@ namespace MarketData.Services
await Task.FromResult(true);
}
+ public async Task TaskUpdateUnemploymentPerCapita(CommandArgs commandArgs)
+ {
+ LoadUnemploymentPerCapita();
+ await Task.FromResult(true);
+ }
+
public async Task TaskUpdateCompanyProfiles(CommandArgs commandArgs)
{
UpdateCompanyProfiles();
@@ -577,6 +585,7 @@ namespace MarketData.Services
{
UpdateYieldCurve(); // www.treasury.gov
LoadGDPPerCapita(); // api.worldbank.org
+ LoadUnemploymentPerCapita(); // api.worldbank.org
LoadConsumerPriceIndex(); // Load consumer price index data from Bureau of Labor Statistics
resetEvents[STAGE_3].Set();
MDTrace.WriteLine(LogLevel.DEBUG,$"STAGE_3 complete.");
@@ -746,65 +755,105 @@ namespace MarketData.Services
{
MDTrace.WriteLine(LogLevel.DEBUG,$"Done, total took {profiler.End()}(ms).");
}
- }
+ }
+ ///
+ /// Loads the GDP Data from WorldBank
+ ///
public static void LoadGDPPerCapita()
{
Profiler profiler = new Profiler();
try
{
- MDTrace.WriteLine(LogLevel.DEBUG,"Started.");
- EconomicIndicators economicIndicators=MarketDataHelper.GetGDPPerCapita();
- if(null==economicIndicators||0==economicIndicators.Count)
+ MDTrace.WriteLine(LogLevel.DEBUG, "Started.");
+ EconomicIndicators economicIndicators = MarketDataHelper.GetGDPPerCapita();
+ if (null == economicIndicators || 0 == economicIndicators.Count)
{
- MDTrace.WriteLine(LogLevel.DEBUG,"No data, see log file for potential issues.");
+ MDTrace.WriteLine(LogLevel.DEBUG, "No data, see log file for potential issues.");
return;
}
- List distinctCountry=(from EconomicIndicator economicIndicator in economicIndicators select economicIndicator.CountryCode).Distinct().ToList();
- MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Downloaded {0} countries.",distinctCountry.Count));
- MDTrace.WriteLine(LogLevel.DEBUG,"Saving...");
- if(EconomicIndicatorDA.InsertUpdateEconomicIndicators(economicIndicators))
+ List distinctCountry = (from EconomicIndicator economicIndicator in economicIndicators select economicIndicator.CountryCode).Distinct().ToList();
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Downloaded {0} countries.", distinctCountry.Count));
+ MDTrace.WriteLine(LogLevel.DEBUG, "Saving...");
+ if (EconomicIndicatorDA.InsertUpdateEconomicIndicators(economicIndicators))
{
- MDTrace.WriteLine(LogLevel.DEBUG,$"Save complete.");
+ MDTrace.WriteLine(LogLevel.DEBUG, $"Save complete.");
}
else
{
- MDTrace.WriteLine(LogLevel.DEBUG,"Failed to save economic indicators.");
+ MDTrace.WriteLine(LogLevel.DEBUG, "Failed to save economic indicators.");
}
}
- catch(Exception exception)
+ catch (Exception exception)
{
- MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Exception:{0}",exception.ToString()));
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString()));
}
finally
{
- MDTrace.WriteLine(LogLevel.DEBUG,$"Done, total took {profiler.End()}(ms)");
+ MDTrace.WriteLine(LogLevel.DEBUG, $"Done, total took {profiler.End()}(ms)");
+ }
+ }
+
+ ///
+ /// Loads the Unemployment Data from WorldBank
+ ///
+ public static void LoadUnemploymentPerCapita()
+ {
+ Profiler profiler = new Profiler();
+ try
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, "Started.");
+ EconomicIndicators economicIndicators = MarketDataHelper.GetUnemploymentPerCapita();
+ if (null == economicIndicators || 0 == economicIndicators.Count)
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, "No data, see log file for potential issues.");
+ return;
+ }
+ List distinctCountry = (from EconomicIndicator economicIndicator in economicIndicators select economicIndicator.CountryCode).Distinct().ToList();
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Downloaded {0} countries.", distinctCountry.Count));
+ MDTrace.WriteLine(LogLevel.DEBUG, "Saving...");
+ if (EconomicIndicatorDA.InsertUpdateEconomicIndicators(economicIndicators))
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, $"Save complete.");
+ }
+ else
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, "Failed to save economic indicators.");
+ }
+ }
+ catch (Exception exception)
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString()));
+ }
+ finally
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, $"Done, total took {profiler.End()}(ms)");
}
}
-
+
public static void UpdateYieldCurve() // maintains current year of yield curve data
{
Profiler profiler = new Profiler();
try
{
int year = DateTime.Now.Year;
- MDTrace.WriteLine(LogLevel.DEBUG,"Retrieving yield curve for year "+year);
- YieldCurve yieldCurve=MarketDataHelper.GetYieldCurve(year);
+ MDTrace.WriteLine(LogLevel.DEBUG, "Retrieving yield curve for year " + year);
+ YieldCurve yieldCurve = MarketDataHelper.GetYieldCurve(year);
if (null == yieldCurve)
{
- MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Failed to get YieldCurve for {0}", year));
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Failed to get YieldCurve for {0}", year));
return;
}
- MDTrace.WriteLine(LogLevel.DEBUG,"Got "+yieldCurve.Count+" points for "+year);
+ MDTrace.WriteLine(LogLevel.DEBUG, "Got " + yieldCurve.Count + " points for " + year);
YieldCurveDA.InsertOrUpdate(yieldCurve);
}
- catch(Exception exception)
+ catch (Exception exception)
{
- MDTrace.WriteLine(LogLevel.DEBUG,$"Exception: {exception.ToString()}");
+ MDTrace.WriteLine(LogLevel.DEBUG, $"Exception: {exception.ToString()}");
}
finally
{
- MDTrace.WriteLine(LogLevel.DEBUG,$"Done, total took {profiler.End()}(ms)");
+ MDTrace.WriteLine(LogLevel.DEBUG, $"Done, total took {profiler.End()}(ms)");
}
}
diff --git a/MarketData/MarketData/appsettings.json b/MarketData/MarketData/appsettings.json
index 2b6a7c1..5857877 100755
--- a/MarketData/MarketData/appsettings.json
+++ b/MarketData/MarketData/appsettings.json
@@ -1,7 +1,7 @@
{
-"market_data" : "Database=market_data;Datasource=adrastea;Username=guest;Password=guest",
-"portfolio_data" : "Database=portfolio_data;Datasource=adrastea;Username=guest;Password=guest",
-"user_data" : "Database=user_data;Datasource=adrastea;Username=guest;Password=guest",
+"market_data" : "Database=market_data;Datasource=isonoe;Username=guest;Password=guest",
+"portfolio_data" : "Database=portfolio_data;Datasource=isonoe;Username=guest;Password=guest",
+"user_data" : "Database=user_data;Datasource=isonoe;Username=guest;Password=guest",
"sms_smtpaddress" : "smtp.gmail.com",
"sms_smsusername" : "skessler1964@gmail.com",
"sms_smspassword" : "xjfo isnf gmyi zovr",
diff --git a/MarketData/MarketDataLib/DataAccess/EconomicIndicatorDA.cs b/MarketData/MarketDataLib/DataAccess/EconomicIndicatorDA.cs
index 86dde46..c0cf81b 100755
--- a/MarketData/MarketDataLib/DataAccess/EconomicIndicatorDA.cs
+++ b/MarketData/MarketDataLib/DataAccess/EconomicIndicatorDA.cs
@@ -7,33 +7,96 @@ namespace MarketData.DataAccess
{
public class EconomicIndicatorDA
{
- private EconomicIndicatorDA()
- {
- }
- public static EconomicIndicators GetEconomicIndicators()
+ private EconomicIndicatorDA()
{
- MySqlConnection sqlConnection=null;
- MySqlCommand sqlCommand=null;
- MySqlDataReader sqlDataReader=null;
- EconomicIndicators economicIndicators=new EconomicIndicators();
- try
- {
+ }
+
+ ///
+ /// Retrieves a distinct list of indicator_code
+ ///
+ ///
+ public static List GetDistinctIndicators()
+ {
+ MySqlConnection sqlConnection = null;
+ MySqlCommand sqlCommand = null;
+ MySqlDataReader sqlDataReader = null;
+ List indicators = new List();
+ try
+
+ {
sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("market_data"));
- sqlCommand=sqlConnection.CreateCommand();
- StringBuilder sb=new StringBuilder();
- sb.Append("select country_code,country_name,indicator_code,indicator_name,indicator_value,year,source from EconomicIndicators");
- sqlCommand.CommandText=sb.ToString();
- sqlDataReader=sqlCommand.ExecuteReader();
- while(sqlDataReader.Read())
+ sqlCommand = sqlConnection.CreateCommand();
+ StringBuilder sb = new StringBuilder();
+ sb.Append("select distinct(indicator_code) from EconomicIndicators ");
+ sb.Append("ORDER BY 1 asc");
+ sqlCommand.CommandText = sb.ToString();
+ sqlDataReader = sqlCommand.ExecuteReader();
+ while (sqlDataReader.Read())
{
- EconomicIndicator economicIndicator=new EconomicIndicator();
- if(!sqlDataReader.IsDBNull(0))economicIndicator.CountryCode=sqlDataReader.GetString(0);
- if(!sqlDataReader.IsDBNull(1))economicIndicator.CountryName=sqlDataReader.GetString(1);
- if(!sqlDataReader.IsDBNull(2))economicIndicator.IndicatorCode=sqlDataReader.GetString(2);
- if(!sqlDataReader.IsDBNull(3))economicIndicator.IndicatorName=sqlDataReader.GetString(3);
- if(!sqlDataReader.IsDBNull(4))economicIndicator.IndicatorValue=sqlDataReader.GetDouble(4);
- if(!sqlDataReader.IsDBNull(5))economicIndicator.Year=sqlDataReader.GetInt32(5);
- if(!sqlDataReader.IsDBNull(6))economicIndicator.Source=sqlDataReader.GetString(6);
+ indicators.Add(sqlDataReader.GetString(0).ToUpper());
+ }
+ sqlDataReader.Close();
+ sqlDataReader.Dispose();
+ sqlCommand.Dispose();
+ sqlConnection.Close();
+ sqlConnection.Dispose();
+ return indicators;
+ }
+ catch (Exception exception)
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString()));
+ return null;
+ }
+ finally
+ {
+ if (null != sqlDataReader)
+ {
+ sqlDataReader.Close();
+ sqlDataReader.Dispose();
+ }
+ if (null != sqlCommand)
+ {
+ sqlCommand.Dispose();
+ }
+ if (null != sqlConnection)
+ {
+ sqlConnection.Close();
+ sqlConnection.Dispose();
+ }
+ }
+ }
+
+ ///
+ /// Retrieve all records
+ ///
+ ///
+ public static EconomicIndicators GetEconomicIndicators(String indicatorCode, String countryCode="USA")
+ {
+ MySqlConnection sqlConnection = null;
+ MySqlCommand sqlCommand = null;
+ MySqlDataReader sqlDataReader = null;
+ EconomicIndicators economicIndicators = new EconomicIndicators();
+ try
+ {
+ sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("market_data"));
+ sqlCommand = sqlConnection.CreateCommand();
+ StringBuilder sb = new StringBuilder();
+ sb.Append("select country_code,country_name,indicator_code,indicator_name,indicator_value,year,source from EconomicIndicators").Append(" ");
+ sb.Append("where indicator_code=").Append(SqlUtils.AddQuotes(indicatorCode)).Append(" ");
+ sb.Append("AND country_code = ").Append(SqlUtils.AddQuotes(countryCode)).Append(" ");
+ sb.Append("ORDER BY YEAR ASC");
+ sqlCommand.CommandText = sb.ToString();
+ sqlDataReader = sqlCommand.ExecuteReader();
+ while (sqlDataReader.Read())
+ {
+ EconomicIndicator economicIndicator = new EconomicIndicator();
+ if (!sqlDataReader.IsDBNull(0)) economicIndicator.CountryCode = sqlDataReader.GetString(0);
+ if (!sqlDataReader.IsDBNull(1)) economicIndicator.CountryName = sqlDataReader.GetString(1);
+ if (!sqlDataReader.IsDBNull(2)) economicIndicator.IndicatorCode = sqlDataReader.GetString(2);
+ if (!sqlDataReader.IsDBNull(3)) economicIndicator.IndicatorName = sqlDataReader.GetString(3);
+ if (!sqlDataReader.IsDBNull(4)) economicIndicator.IndicatorValue = sqlDataReader.GetDouble(4);
+ if (!sqlDataReader.IsDBNull(5)) economicIndicator.Year = sqlDataReader.GetInt32(5);
+ if (!sqlDataReader.IsDBNull(6)) economicIndicator.Source = sqlDataReader.GetString(6);
economicIndicators.Add(economicIndicator);
}
sqlDataReader.Close();
@@ -41,103 +104,179 @@ namespace MarketData.DataAccess
sqlCommand.Dispose();
sqlConnection.Close();
sqlConnection.Dispose();
- return economicIndicators;
- }
- catch(Exception exception)
- {
- MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Exception:{0}",exception.ToString()));
- return null;
- }
+ return economicIndicators;
+ }
+ catch (Exception exception)
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString()));
+ return null;
+ }
finally
{
- if(null!=sqlDataReader)
+ if (null != sqlDataReader)
{
sqlDataReader.Close();
sqlDataReader.Dispose();
}
- if(null!=sqlCommand)
+ if (null != sqlCommand)
{
sqlCommand.Dispose();
}
- if(null!=sqlConnection)
+ if (null != sqlConnection)
{
sqlConnection.Close();
sqlConnection.Dispose();
}
}
}
- public static bool InsertUpdateEconomicIndicators(EconomicIndicators economicIndicators)
- {
- MySqlConnection sqlConnection=null;
- MySqlCommand sqlCommand=null;
- MySqlTransaction sqlTransaction=null;
- try
- {
+
+ ///
+ /// Retrieve all records
+ ///
+ ///
+ public static EconomicIndicators GetEconomicIndicators()
+ {
+ MySqlConnection sqlConnection = null;
+ MySqlCommand sqlCommand = null;
+ MySqlDataReader sqlDataReader = null;
+ EconomicIndicators economicIndicators = new EconomicIndicators();
+ try
+ {
+ sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("market_data"));
+ sqlCommand = sqlConnection.CreateCommand();
+ StringBuilder sb = new StringBuilder();
+ sb.Append("select country_code,country_name,indicator_code,indicator_name,indicator_value,year,source from EconomicIndicators");
+ sqlCommand.CommandText = sb.ToString();
+ sqlDataReader = sqlCommand.ExecuteReader();
+ while (sqlDataReader.Read())
+ {
+ EconomicIndicator economicIndicator = new EconomicIndicator();
+ if (!sqlDataReader.IsDBNull(0)) economicIndicator.CountryCode = sqlDataReader.GetString(0);
+ if (!sqlDataReader.IsDBNull(1)) economicIndicator.CountryName = sqlDataReader.GetString(1);
+ if (!sqlDataReader.IsDBNull(2)) economicIndicator.IndicatorCode = sqlDataReader.GetString(2);
+ if (!sqlDataReader.IsDBNull(3)) economicIndicator.IndicatorName = sqlDataReader.GetString(3);
+ if (!sqlDataReader.IsDBNull(4)) economicIndicator.IndicatorValue = sqlDataReader.GetDouble(4);
+ if (!sqlDataReader.IsDBNull(5)) economicIndicator.Year = sqlDataReader.GetInt32(5);
+ if (!sqlDataReader.IsDBNull(6)) economicIndicator.Source = sqlDataReader.GetString(6);
+ economicIndicators.Add(economicIndicator);
+ }
+ sqlDataReader.Close();
+ sqlDataReader.Dispose();
+ sqlCommand.Dispose();
+ sqlConnection.Close();
+ sqlConnection.Dispose();
+ return economicIndicators;
+ }
+ catch (Exception exception)
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString()));
+ return null;
+ }
+ finally
+ {
+ if (null != sqlDataReader)
+ {
+ sqlDataReader.Close();
+ sqlDataReader.Dispose();
+ }
+ if (null != sqlCommand)
+ {
+ sqlCommand.Dispose();
+ }
+ if (null != sqlConnection)
+ {
+ sqlConnection.Close();
+ sqlConnection.Dispose();
+ }
+ }
+ }
+
+ ///
+ /// Upsert items
+ ///
+ ///
+ public static bool InsertUpdateEconomicIndicators(EconomicIndicators economicIndicators)
+ {
+ MySqlConnection sqlConnection = null;
+ MySqlCommand sqlCommand = null;
+ MySqlTransaction sqlTransaction = null;
+ try
+ {
sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("market_data"));
sqlTransaction = sqlConnection.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted);
- sqlCommand=sqlConnection.CreateCommand();
- sqlCommand.Transaction=sqlTransaction;
- List distinctCountryCodes=(from EconomicIndicator economicIndicator in economicIndicators select economicIndicator.CountryCode).Distinct().ToList();
- for(int index=0;index distinctCountryCodes = (from EconomicIndicator economicIndicator in economicIndicators select economicIndicator.CountryCode).Distinct().ToList();
+ for (int index = 0; index < distinctCountryCodes.Count; index++)
{
- String countryCode=distinctCountryCodes[index];
- List years=(from EconomicIndicator economicIndicator in economicIndicators select economicIndicator.Year).Distinct().ToList();
- DeleteEconomicIndicator(countryCode,years,sqlCommand,sqlTransaction);
+ String countryCode = distinctCountryCodes[index];
+ List years = (from EconomicIndicator economicIndicator in economicIndicators select economicIndicator.Year).Distinct().ToList();
+ DeleteEconomicIndicator(countryCode, years, sqlCommand, sqlTransaction);
}
- InsertEconomicIndicators(economicIndicators,sqlCommand,sqlTransaction);
+ InsertEconomicIndicators(economicIndicators, sqlCommand, sqlTransaction);
sqlTransaction.Commit();
sqlTransaction.Dispose();
sqlCommand.Dispose();
sqlConnection.Close();
sqlConnection.Dispose();
- sqlConnection=null;
- sqlCommand=null;
- sqlTransaction=null;
- return true;
- }
- catch(Exception exception)
- {
- MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Exception:{0}",exception.ToString()));
- return false;
- }
+ sqlConnection = null;
+ sqlCommand = null;
+ sqlTransaction = null;
+ return true;
+ }
+ catch (Exception exception)
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString()));
+ return false;
+ }
finally
{
- if(null!=sqlConnection)
+ if (null != sqlConnection)
{
sqlConnection.Close();
sqlConnection.Dispose();
}
- if(null!=sqlCommand)
+ if (null != sqlCommand)
{
sqlCommand.Dispose();
}
- if(null!=sqlTransaction)
+ if (null != sqlTransaction)
{
sqlTransaction.Dispose();
}
}
- }
- public static bool DeleteEconomicIndicator(String countryCode,List years,MySqlCommand sqlCommand,MySqlTransaction sqlTransaction)
- {
- String strQuery=null;
- try
- {
- StringBuilder sb=new StringBuilder();
+ }
+
+ ///
+ /// Remove items
+ ///
+ ///
+ private static bool DeleteEconomicIndicator(String countryCode, List years, MySqlCommand sqlCommand, MySqlTransaction sqlTransaction)
+ {
+ String strQuery = null;
+ try
+ {
+ StringBuilder sb = new StringBuilder();
sb.Append("delete from EconomicIndicators ").Append(" where ");
sb.Append("country_code=").Append("'").Append(countryCode).Append("'").Append(" and ");
sb.Append("year in ").Append(SqlUtils.CreateInClause(years));
- strQuery=sb.ToString();
- sqlCommand.CommandText=strQuery;
+ strQuery = sb.ToString();
+ sqlCommand.CommandText = strQuery;
sqlCommand.ExecuteNonQuery();
return true;
- }
- catch(Exception exception)
- {
- MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Exception:{0}, query was {1}",exception.ToString(),strQuery));
- return false;
- }
- }
- public static bool InsertEconomicIndicators(EconomicIndicators economicIndicators,MySqlCommand sqlCommand,MySqlTransaction sqlTransaction)
+ }
+ catch (Exception exception)
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}, query was {1}", exception.ToString(), strQuery));
+ return false;
+ }
+ }
+
+ ///
+ /// Insert items
+ ///
+ ///
+ private static bool InsertEconomicIndicators(EconomicIndicators economicIndicators,MySqlCommand sqlCommand,MySqlTransaction sqlTransaction)
{
String strQuery=null;
try
diff --git a/MarketData/MarketDataLib/Helper/MarketDataHelper.cs b/MarketData/MarketDataLib/Helper/MarketDataHelper.cs
index 00f910e..8762b3b 100755
--- a/MarketData/MarketDataLib/Helper/MarketDataHelper.cs
+++ b/MarketData/MarketDataLib/Helper/MarketDataHelper.cs
@@ -20,31 +20,32 @@ using MarketDataLib.Utility;
using MarketData.Configuration;
using System.Text.Json;
-//Zacks Rank - Zacks
-//Splits - EODDATA
-//GDP Data - WorldBank
-//Dividend History - NASDAQ
-//Options - NASDAQ
-//Analyst Ratings - Briefing.com
-//SEC Filings - SEC.GOV (EDGAR)
-//Yield Curve - Treasury.Gov
-//ETF Holdings - Yahoo Finance
-//Insider Transactions - Insider Tracking.com
-//Company Profile - MorningStar + Reuters
-//Headlines - Seeking Alpha + NASDAQ
-//CIK Codes - SEC.GOV
-//Analyst Price Target - Yahoo Finance , Market Beat as backup
-//Historical - MorningStar
-//Income Statement - NASDAQ
-//Balance Sheet - NASDAQ
-//Statement of Cashflows - MorningStar
-//Fundamentals - 2 Sources....Yahoo Finance & FINVIZ
+// Zacks Rank - Zacks
+// Splits - EODDATA
+// GDP Data - WorldBank
+// Employment Data - WorldBank
+// Dividend History - NASDAQ
+// Options - NASDAQ
+// Analyst Ratings - Briefing.com
+// SEC Filings - SEC.GOV (EDGAR)
+// Yield Curve - Treasury.Gov
+// ETF Holdings - Yahoo Finance
+// Insider Transactions - Insider Tracking.com
+// Company Profile - MorningStar + Reuters
+// Headlines - Seeking Alpha + NASDAQ
+// CIK Codes - SEC.GOV
+// Analyst Price Target - Yahoo Finance , Market Beat as backup
+// Historical - MorningStar
+// Income Statement - NASDAQ
+// Balance Sheet - NASDAQ
+// Statement of Cashflows - MorningStar
+// Fundamentals - 2 Sources....Yahoo Finance & FINVIZ
// a) Key Statistics
// b) Financials
-//Intraday Pricing - Yahoo Finance + BigCharts
-//Historical Pricing - BigCharts + Yahoo Finance
-//CompanyDescription - Reuters
-//Premarket - CNN
+// Intraday Pricing - Yahoo Finance + RobinHood
+// Historical Pricing - Yahoo Finance
+// CompanyDescription - Reuters
+// Premarket - CNN
namespace MarketData.Helper
{
@@ -395,50 +396,94 @@ namespace MarketData.Helper
if (null != httpNetResponse) httpNetResponse.Dispose();
}
}
-
-// ***************************************************************************************************************************************************************************************
-// ************************************************************************** G D P P E R C A P I T A D A T A W O R L D B A N K *************************************************
-// ***************************************************************************************************************************************************************************************
- public static EconomicIndicators GetGDPPerCapita(bool debug=false)
- {
- HttpNetResponse httpNetResponse=null;
- try
- {
-// Retrieve compressed CSV from World Bank web site and write to disk
- StringBuilder sb=new StringBuilder();
- String strRequest;
- String currentWorkingDirectory=Directory.GetCurrentDirectory();
- String strExtractFolder=currentWorkingDirectory+"/"+"extracts";
- String strFileName="API_NY.GDP.MKTP.CD_DS2_V2_USD.zip";
- String strPathFileName=currentWorkingDirectory+"/"+strFileName;
- sb.Append("http://api.worldbank.org/v2/en/indicator/NY.GDP.MKTP.CD?downloadformat=csv");
- strRequest=sb.ToString();
- MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Downloading {0} from {1}",strFileName,strRequest));
- httpNetResponse=HttpNetRequest.GetRequestStreamZIP(strRequest);
- if(!httpNetResponse.Success)
+
+ // ***************************************************************************************************************************************************************************************
+ // ************************************************************************** W O R L D B A N K F E E D *************************************************
+ // ***************************************************************************************************************************************************************************************
+ public static EconomicIndicators GetUnemploymentPerCapita(bool debug = false)
+ {
+ HttpNetResponse httpNetResponse = null;
+ try
+ {
+ StringBuilder sb = new StringBuilder();
+ String strRequest;
+ String currentWorkingDirectory = Directory.GetCurrentDirectory();
+ String strExtractFolder = currentWorkingDirectory + "/" + "extracts";
+ String strFileName = "API_SL.UEM.TOTL.ZS_DS2_en_csv_v2_254884.zip";
+ String strPathFileName = currentWorkingDirectory + "/" + strFileName;
+ sb.Append("http://api.worldbank.org/v2/en/indicator/SL.UEM.TOTL.ZS?downloadformat=csv");
+ strRequest = sb.ToString();
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Downloading {0} from {1}", strFileName, strRequest));
+ httpNetResponse = HttpNetRequest.GetRequestStreamZIP(strRequest);
+ if (!httpNetResponse.Success)
{
- MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Request:{0} failed with status {1}",httpNetResponse.Request,httpNetResponse.StatusCode));
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Request:{0} failed with status {1}", httpNetResponse.Request, httpNetResponse.StatusCode));
return null;
}
- if(File.Exists(strPathFileName))File.Delete(strPathFileName);
- FileStream outStream=new FileStream(strPathFileName,FileMode.Create);
- byte[] streamBytes=httpNetResponse.ResponseStream.GetBuffer();
- outStream.Write(streamBytes,0,streamBytes.Length);
- outStream.Flush();
- outStream.Close();
+ if (File.Exists(strPathFileName)) File.Delete(strPathFileName);
+ FileStream outStream = new FileStream(strPathFileName, FileMode.Create);
+ byte[] streamBytes = httpNetResponse.ResponseStream.GetBuffer();
+ outStream.Write(streamBytes, 0, streamBytes.Length);
+ outStream.Flush();
+ outStream.Close();
outStream.Dispose();
- return EconomicIndicators.FromZipFile(strPathFileName,strExtractFolder,debug);
- }
- catch(Exception exception)
- {
- MDTrace.WriteLine(LogLevel.DEBUG,exception);
+ return EconomicIndicators.FromZipFile(strPathFileName, strExtractFolder, debug);
+ }
+ catch (Exception exception)
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, exception);
return null;
- }
- finally
- {
- if(null!=httpNetResponse)httpNetResponse.Dispose();
- }
- }
+ }
+ finally
+ {
+ if (null != httpNetResponse) httpNetResponse.Dispose();
+ }
+ }
+
+ ///
+ /// Retrieves GDP Data from WorlBank as zip file, decompresses the zip file, reads and imports the CSV contents and returns EconomicIndicators
+ ///
+ ///
+ ///
+ public static EconomicIndicators GetGDPPerCapita(bool debug = false)
+ {
+ HttpNetResponse httpNetResponse = null;
+ try
+ {
+ StringBuilder sb = new StringBuilder();
+ String strRequest;
+ String currentWorkingDirectory = Directory.GetCurrentDirectory();
+ String strExtractFolder = currentWorkingDirectory + "/" + "extracts";
+ String strFileName = "API_NY.GDP.MKTP.CD_DS2_V2_USD.zip";
+ String strPathFileName = currentWorkingDirectory + "/" + strFileName;
+ sb.Append("http://api.worldbank.org/v2/en/indicator/NY.GDP.MKTP.CD?downloadformat=csv");
+ strRequest = sb.ToString();
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Downloading {0} from {1}", strFileName, strRequest));
+ httpNetResponse = HttpNetRequest.GetRequestStreamZIP(strRequest);
+ if (!httpNetResponse.Success)
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Request:{0} failed with status {1}", httpNetResponse.Request, httpNetResponse.StatusCode));
+ return null;
+ }
+ if (File.Exists(strPathFileName)) File.Delete(strPathFileName);
+ FileStream outStream = new FileStream(strPathFileName, FileMode.Create);
+ byte[] streamBytes = httpNetResponse.ResponseStream.GetBuffer();
+ outStream.Write(streamBytes, 0, streamBytes.Length);
+ outStream.Flush();
+ outStream.Close();
+ outStream.Dispose();
+ return EconomicIndicators.FromZipFile(strPathFileName, strExtractFolder, debug);
+ }
+ catch (Exception exception)
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG, exception);
+ return null;
+ }
+ finally
+ {
+ if (null != httpNetResponse) httpNetResponse.Dispose();
+ }
+ }
// ***************************************************************************************************************************************************************************************
// ************************************************************************** D I V I D E N D H I S T O R Y N A S D A Q ***********************************************************
// ***************************************************************************************************************************************************************************************
diff --git a/MarketDataServer/Controllers/EconomicindicatorsController.cs b/MarketDataServer/Controllers/EconomicindicatorsController.cs
new file mode 100644
index 0000000..659b0d1
--- /dev/null
+++ b/MarketDataServer/Controllers/EconomicindicatorsController.cs
@@ -0,0 +1,59 @@
+using MarketData.MarketDataModel;
+using MarketData.DataAccess;
+using MarketDataServer.Authorization;
+using MarketData;
+using Microsoft.AspNetCore.Mvc;
+using LogLevel = MarketData.LogLevel;
+using MarketData.Utils;
+
+namespace MarketDataServer.Controllers
+{
+ [ApiController]
+ [Route("api/[controller]/[action]")]
+ public class EconomicIndicastorsController : ControllerBase
+ {
+//http://localhost:8000/api/EconomicIndicators/GetDistnctIndicators
+ [HttpGet(Name = "GetDistinctEconomicIndicators")]
+ public IEnumerable GetDistinctEconomicIndicators(String token)
+ {
+ Profiler profiler = new Profiler();
+ try
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG,$"Start");
+ if (!Authorizations.GetInstance().IsAuthorized(token)) return null;
+ return EconomicIndicatorDA.GetDistinctIndicators();
+ }
+ catch(Exception exception)
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG,$"Exception:{exception.ToString()}");
+ return null;
+ }
+ finally
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG,$"Done, total took {profiler.End()} (ms)");
+ }
+ }
+
+ [HttpGet(Name = "GetEconomicIndicators")]
+ public IEnumerable GetEconomicIndicators(String token,String indicatorCode)
+ {
+ Profiler profiler = new Profiler();
+ try
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG,$"Start");
+ if (!Authorizations.GetInstance().IsAuthorized(token)) return null;
+ EconomicIndicators economicIndicators=EconomicIndicatorDA.GetEconomicIndicators(indicatorCode);
+ return economicIndicators;
+ }
+ catch(Exception exception)
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG,$"Exception:{exception.ToString()}");
+ return null;
+ }
+ finally
+ {
+ MDTrace.WriteLine(LogLevel.DEBUG,$"Done, total took {profiler.End()} (ms)");
+ }
+ }
+ }
+}
diff --git a/MarketDataUnitTests/MarketDataUnitTestClass.cs b/MarketDataUnitTests/MarketDataUnitTestClass.cs
index c4215a6..6f8cfb9 100644
--- a/MarketDataUnitTests/MarketDataUnitTestClass.cs
+++ b/MarketDataUnitTests/MarketDataUnitTestClass.cs
@@ -272,6 +272,13 @@ public class MarketDataUnitTestClass
Assert.IsTrue(null != economicIndicators && economicIndicators.Count > 0);
}
+ [TestMethod]
+ public void UnemploymentPerCapitaRetrieval()
+ {
+ EconomicIndicators economicIndicators = MarketDataHelper.GetUnemploymentPerCapita();
+ Assert.IsTrue(null != economicIndicators && economicIndicators.Count > 0);
+ }
+
[TestMethod]
public void LatestAnalystRatingsRetrieval()
{