コード例 #1
0
        public static void InitStatusDatabase(string connectString)
        {
            using (var conn = new MySqlConnection(connectString))
            {
                try
                {
                    conn.Execute("CREATE DATABASE IF NOT EXISTS `dotnetspider` DEFAULT CHARACTER SET utf8;");

                    var dbEngine = MySqlEngine.IsSupportToku(conn) ? "TokuDB" : "InnoDB";
                    var sql      = $"CREATE TABLE IF NOT EXISTS `dotnetspider`.`status` (`identity` varchar(120) NOT NULL,`node` varchar(120) NOT NULL,`logged` timestamp NULL DEFAULT NULL,`status` varchar(20) DEFAULT NULL,`thread` int(13),`left` bigint(20),`success` bigint(20),`error` bigint(20),`total` bigint(20),`avgdownloadspeed` float,`avgprocessorspeed` bigint(20),`avgpipelinespeed` bigint(20), PRIMARY KEY (`identity`,`node`)) ENGINE={dbEngine} DEFAULT CHARSET=utf8;";
                    conn.Execute(sql);

                    var trigger = conn.QueryFirstOrDefault($"SELECT TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_NAME =  'status_AFTER_UPDATE' and EVENT_OBJECT_SCHEMA='dotnetspider' and EVENT_OBJECT_TABLE='status'");
                    if (trigger == null)
                    {
                        var timeTrigger = $"CREATE TRIGGER `dotnetspider`.`status_AFTER_UPDATE` BEFORE UPDATE ON `status` FOR EACH ROW BEGIN set NEW.logged = NOW(); END";
                        conn.Execute(timeTrigger);
                    }
                }
                catch (Exception e)
                {
                    Logger.MyLog("Prepare dotnetspider.status failed.", LogLevel.Error, e);
                    throw e;
                }
            }
        }
コード例 #2
0
        public DbMonitor(string identity)
        {
            Identity = identity;

            NetworkCenter.Current.Execute("dm", () =>
            {
                using (var conn = new MySqlConnection(Config.ConnectString))
                {
                    try
                    {
                        conn.Execute("CREATE DATABASE IF NOT EXISTS `dotnetspider` DEFAULT CHARACTER SET utf8;");

                        var dbEngine = MySqlEngine.IsSupportToku(conn) ? "TokuDB" : "InnoDB";
                        var sql      = $"CREATE TABLE IF NOT EXISTS `dotnetspider`.`status` (`identity` varchar(120) NOT NULL,`node` varchar(120) NOT NULL,`logged` timestamp NULL DEFAULT NULL,`status` varchar(20) DEFAULT NULL,`thread` int(13),`left` bigint(20),`success` bigint(20),`error` bigint(20),`total` bigint(20),`avgdownloadspeed` float,`avgprocessorspeed` bigint(20),`avgpipelinespeed` bigint(20), PRIMARY KEY (`identity`,`node`)) ENGINE={dbEngine} DEFAULT CHARSET=utf8;";
                        conn.Execute(sql);


                        var trigger = conn.QueryFirstOrDefault($"SELECT TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_NAME =  'status_AFTER_UPDATE' and EVENT_OBJECT_SCHEMA='dotnetspider' and EVENT_OBJECT_TABLE='status'");
                        if (trigger == null)
                        {
                            var timeTrigger = $"CREATE TRIGGER `dotnetspider`.`status_AFTER_UPDATE` BEFORE UPDATE ON `status` FOR EACH ROW BEGIN set NEW.logged = NOW(); END";
                            conn.Execute(timeTrigger);
                        }
                    }
                    catch (Exception e)
                    {
                        Logger.MyLog("Prepare dotnetspider.status failed.", LogLevel.Error, e);
                        throw e;
                    }

                    var insertSql = $"insert ignore into dotnetspider.status (`identity`, `node`, `logged`, `status`, `thread`, `left`, `success`, `error`, `total`, `avgdownloadspeed`, `avgprocessorspeed`, `avgpipelinespeed`) values (@identity, @node, current_timestamp, @status, @thread, @left, @success, @error, @total, @avgdownloadspeed, @avgprocessorspeed, @avgpipelinespeed);";
                    conn.Execute(insertSql,
                                 new
                    {
                        identity          = identity,
                        node              = NodeId.Id,
                        status            = "INIT",
                        left              = 0,
                        total             = 0,
                        success           = 0,
                        error             = 0,
                        avgDownloadSpeed  = 0,
                        avgProcessorSpeed = 0,
                        avgPipelineSpeed  = 0,
                        thread            = 0
                    });
                }
            });
        }
コード例 #3
0
        protected override string GetCreateTableSql(EntityDbMetadata metadata)
        {
            StringBuilder builder    = new StringBuilder($"CREATE TABLE IF NOT EXISTS `{metadata.Table.Database }`.`{metadata.Table.Name}` (");
            string        columNames = string.Join(", ", metadata.Columns.Select(p => $"`{p.Name}` {GetDataTypeSql(p)} "));

            builder.Append(columNames);
            builder.Append(",`cdate` timestamp NULL DEFAULT CURRENT_TIMESTAMP");
            if (metadata.Table.Primary.ToLower() == Core.Infrastructure.Environment.IdColumn)
            {
                builder.Append($", `{Core.Infrastructure.Environment.IdColumn}` bigint AUTO_INCREMENT");
            }

            if (metadata.Table.Indexs != null)
            {
                foreach (var index in metadata.Table.Indexs)
                {
                    var    columns         = index.Split(',');
                    string name            = string.Join("_", columns.Select(c => c));
                    string indexColumNames = string.Join(", ", columns.Select(c => $"`{c}`"));
                    builder.Append($", KEY `index_{name}` ({indexColumNames.Substring(0, indexColumNames.Length)})");
                }
            }
            if (metadata.Table.Uniques != null)
            {
                foreach (var unique in metadata.Table.Uniques)
                {
                    var    columns          = unique.Split(',');
                    string name             = string.Join("_", columns.Select(c => c));
                    string uniqueColumNames = string.Join(", ", columns.Select(c => $"`{c}`"));
                    builder.Append($", UNIQUE KEY `unique_{name}` ({uniqueColumNames.Substring(0, uniqueColumNames.Length)})");
                }
            }
            builder.Append($", PRIMARY KEY ({ metadata.Table.Primary})");
            using (var conn = new MySqlConnection(ConnectString))
            {
                var dbEngine = MySqlEngine.IsSupportToku(conn) ? "TokuDB" : "InnoDB";
                builder.Append($") ENGINE={dbEngine} AUTO_INCREMENT=1  DEFAULT CHARSET=utf8");
                string sql = builder.ToString();
                return(sql);
            }
        }