亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#實現服務器性能監控并發送郵件保存日志

2020-01-24 02:55:45
字體:
來源:轉載
供稿:網友

客戶端代碼

復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using System.Management;
using System.Configuration;
using System.Net;
using System.IO;

namespace MON.WS
{
    public partial class Service : ServiceBase
    {
        //post 11.9
        //卸載服務
        //installutil /u F:/XLFX-2/XLFX/MON.WS/bin/debug/MON.WS.EXE
        //安裝服務
        //installutil F:/XLFX-2/XLFX/MON.WS/bin/debug/MON.WS.EXE
        object threadObj;
        Thread jobThread;
        Dictionary<string, PerformanceCounter> dicCounter;
        Dictionary<string, ManagementObject> dicDisk;

        public Service()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 服務啟動
        /// </summary>
        /// <param name="args"></param>
        protected override void OnStart(string[] args)
        {
            threadObj = new object();
            dicCounter = new Dictionary<string, PerformanceCounter>();
            dicDisk = new Dictionary<string, ManagementObject>();
            jobThread = new Thread(new ThreadStart(Job));
            jobThread.IsBackground = true;
            jobThread.Start();
        }
        /// <summary>
        /// 服務停止
        /// </summary>
        protected override void OnStop()
        {
            if (jobThread.IsAlive)
            {
                jobThread.Abort();
                jobThread.Join();
            }
            foreach (var obj in dicCounter.Values)
            {
                obj.Dispose();
            }
            foreach (var obj in dicDisk.Values)
            {
                obj.Dispose();
            }
            dicDisk.Clear();
            dicCounter.Clear();
        }

        /// <summary>
        /// 監控線程
        /// </summary>
        void Job()
        {
            while (true)
            {
                lock (threadObj)
                {
                    //監控開始
                    try
                    {
                        var obj = new MONServiceClient.MONService();
                        var hn = Dns.GetHostName();
                        var ips = GetIpv4Address(hn);                       
                        if (ips.Count < 1)
                        {
                            obj.Dispose();
                            Thread.Sleep(60000);//如果服務器出錯,那么就每分鐘去檢查一次
                            WriteLog("一個IPV4的地址也沒有得到");
                            continue;
                        }
                        DataSet ds = GetConfigDS(hn,ips,obj);
                        if (ds == null)
                        {
                            obj.Dispose();
                            Thread.Sleep(60000);
                            WriteLog("請檢查WEBService和全局變量設置");
                            continue;
                        }
                        int sleepTime;
                        try
                        {
                            sleepTime = Convert.ToInt32(ds.Tables[0].Rows[0]["LOG_CIRC"]) * 1000;//毫秒
                        }
                        catch
                        {
                            sleepTime = 60000;
                        }
                        if (sleepTime < 1)
                        {
                            sleepTime = 60000;
                        }
                        Thread.Sleep(sleepTime);
                        if (ds.Tables[1].Rows[0]["S_ISWATCH"].ToString() == "0")
                        {
                            //監控開關->關閉
                            obj.Dispose();
                            continue;
                        }
                        var arr = getWatchValue(ds).ToArray();
                        obj.UpdateServerStatus(arr);
                        obj.Dispose();
                    }
                    catch (Exception ex)
                    {
                        WriteLog(ex.Message);
                    }
                    //監控結束
                }
            }
        }
        /// <summary>
        /// 獲取配置信息
        /// </summary>
        /// <param name="ips"></param>
        /// <returns></returns>
        DataSet GetConfigDS(string hn,List<IPAddress> ips,MONServiceClient.MONService obj)
        {
            DataSet ds;
            try
            {
                if (ips.Count > 1)
                {
                    ds = obj.GetMachineConfig(hn, ips[0].ToString(), ips[1].ToString());
                }
                else
                {
                    ds = obj.GetMachineConfig(hn, ips[0].ToString(), "");
                }
            }
            catch
            {
                ds = null;
            }
            return ds;
        }
        /// <summary>
        /// 獲取性能數組
        /// </summary>
        /// <param name="ds"></param>
        /// <returns></returns>
        List<string> getWatchValue(DataSet ds)
        {
            var result = new List<string>();
            result.Add(ds.Tables[1].Rows[0]["LIST_ID"].ToString());
            result.Add(GetValue(ds.Tables[1].Rows[0]["S_CPU"].ToString()).ToString("F2"));
            result.Add(GetDiskValue(ds.Tables[1].Rows[0]["S_DISK_APP"].ToString()).ToString("F2"));
            result.Add(GetDiskValue(System.Environment.SystemDirectory.Substring(0, 2)).ToString("F2"));
            result.Add(GetValue(ds.Tables[1].Rows[0]["S_MEMORY"].ToString()).ToString("F2"));
            result.Add(GetValue(ds.Tables[1].Rows[0]["S_FLOW_IN"].ToString()).ToString("F2"));
            result.Add(GetValue(ds.Tables[1].Rows[0]["S_FLOW_OUT"].ToString()).ToString("F2"));
            result.Add(GetValue(ds.Tables[1].Rows[0]["S_WEB_PORT"].ToString()).ToString("F2"));
            result.Add(GetValue(ds.Tables[1].Rows[0]["S_SQL_CONNECT"].ToString()).ToString("F2"));
            result.Add(ds.Tables[1].Rows[0]["CAMP_ID"].ToString());
            result.Add(ds.Tables[1].Rows[0]["CICODE"].ToString());
            result.Add(ds.Tables[1].Rows[0]["S_KIND"].ToString());
            return result;
        }
        /// <summary>
        /// 獲取IPV4的地址
        /// </summary>
        /// <param name="hn"></param>
        /// <returns></returns>
        List<IPAddress> GetIpv4Address(string hn)
        {
            var result = new List<IPAddress>();
            var ips = Dns.GetHostAddresses(hn);
            foreach (var ip in ips)
            {
                if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                    result.Add(ip);
                }
            }
            return result;
        }
        /// <summary>
        /// 獲取性能計數器的值
        /// </summary>
        /// <param name="configStr"></param>
        /// <returns></returns>
        double GetValue(string configStr)
        {
            try
            {
                if (!dicCounter.ContainsKey(configStr))
                {
                    var arr = configStr.Split('#');
                    var pc = new PerformanceCounter();
                    pc.CategoryName = arr[0];
                    pc.CounterName = arr[1];
                    pc.InstanceName = arr[2];
                    dicCounter.Add(configStr, pc);
                }
                return dicCounter[configStr].NextValue();
            }
            catch (Exception ex)
            {
                WriteLog(string.Format("計數器取值錯誤:{0}{1}{2}", configStr, Environment.NewLine, ex.Message));
                return -1;
            }
        }
        /// <summary>
        /// 獲取磁盤信息的值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        double GetDiskValue(string key)
        {
            try
            {
                if (!dicDisk.ContainsKey(key))
                {
                    ManagementObject DiskInfo = new ManagementObject(string.Format("win32_logicaldisk.deviceid=/"{0}/"", key));
                    dicDisk.Add(key, DiskInfo);
                }
                dicDisk[key].Get();
                var s = Convert.ToDouble(dicDisk[key]["Size"]);
                var l = Convert.ToDouble(dicDisk[key]["FreeSpace"]);
                var d = (s - l) / s * 100;
                return d;
            }
            catch (Exception ex)
            {
                WriteLog(string.Format("獲取磁盤信息值錯誤:{0}{1}{2}", key, Environment.NewLine, ex.Message));
                return -1;
            }
        }
        /// <summary>
        /// 寫本地日志
        /// </summary>
        /// <param name="text"></param>
        void WriteLog(string text)
        {
            try
            {
                var logDic = ConfigurationManager.AppSettings["LogDic"];
                int logDays;
                try
                {
                    logDays = Convert.ToInt32(ConfigurationManager.AppSettings["LogDays"]);
                }
                catch
                {
                    logDays = 7;
                }
                if (logDays < 1)
                {
                    logDays = 7;
                }
                var fs = LogFileMon(logDic, logDays);
                StreamWriter writer = new StreamWriter(fs);
                writer.WriteLine(DateTime.Now.ToString());
                writer.WriteLine(text);
                writer.WriteLine("-----------------------------------------------------------");
                writer.Flush();
                writer.Close();
                fs.Close();
            }
            catch
            {
                //寫日志出錯就沒辦法了
            }
        }
        /// <summary>
        /// 維護日志文件
        /// </summary>
        /// <param name="logDic"></param>
        /// <param name="days"></param>
        FileStream LogFileMon(string logDic, int dayCount)
        {
            DirectoryInfo di = new DirectoryInfo(logDic);
            //如果日志文件夾不存在則創建日志文件夾;
            if (!di.Exists)
            {
                di.Create();
            }
            //當前應保存的日志數據
            List<string> days = new List<string>();
            for (var i = 0; i < dayCount; i++)
            {
                var d = DateTime.Now.AddDays(0 - i).ToString("yyyy-MM-dd");
                days.Add(string.Format("{0}.log", d));
            }
            //刪除沒用的歷史數據
            foreach (var f in di.GetFiles())
            {
                if (!days.Contains(f.Name))
                {
                    f.Delete();
                }
            }
            //返回當前日志文件的數據流
            var fileName = Path.Combine(logDic, days[0]);
            var fs = File.Open(fileName, FileMode.Append,FileAccess.Write);
            return fs;
        }
    }
}

服務端代碼

復制代碼 代碼如下:

Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports System.Threading
Imports System.Collections.Generic
Imports System.Text

' 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消對下行的注釋。
' <System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class MONService
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function GetMachineConfig(ByVal HostName As String, ByVal IP1 As String, ByVal IP2 As String) As DataSet
        Dim sqlda As New data_source.WebTao.Public.SqlServerData
        Try
            Dim sSQL As String = "select *  from mon_server_list " & _
                " where S_HOSTNAME ='" & HostName & "' and IP1 = '" & IP1 & "'  and IP2 = '" & IP2 & "'"
            Dim dt As DataTable = sqlda.GetMytable(sSQL)
            If dt.Rows.Count < 1 Then
                sqlda.runSql("insert into mon_server_list (S_HOSTNAME,IP1,IP2,S_ISWATCH,CICODE,S_NAME,CAMP_ID,S_KIND,STATUS) values ('" & HostName & "','" & IP1 & "','" & IP2 & "',0,'待確定','待確定',-1,0,0)")
                dt = sqlda.GetMytable(sSQL)
                sqlda.runSql("INSERT INTO [MON_INFO] ([LIST_ID],[S_CPU],[S_DISK_APP],[S_DISK_SYS],[S_MEMORY],[S_FLOW_IN],[S_FLOW_OUT],[S_WEB_PORT],[S_SQL_CONNECT],[IN_TIME]) VALUES (" & dt.Rows(0)("LIST_ID").ToString() & ",-1,-1,-1,-1,-1,-1,-1,-1,'" & Now.ToString() & "') ")
            End If
            Dim result As DataSet = sqlda.GetMyDataSet("select * from MON_PARAMETER")
            result.Tables.Add(dt)
            Return result
        Catch ex As Exception
            Return Nothing
        End Try
    End Function
    <WebMethod()> _
    Public Function UpdateServerStatus(ByVal ParamArray ValueArr() As String)
        Dim sqlda As New data_source.WebTao.Public.SqlServerData
        Try
            Dim sSQL As String = "UPDATE [MON_INFO] " & _
                  " SET " & _
                  " [S_CPU] = " & ValueArr(1) & _
                  " ,[S_DISK_APP] = " & ValueArr(2) & _
                  " ,[S_DISK_SYS] = " & ValueArr(3) & _
                  " ,[S_MEMORY] = " & ValueArr(4) & _
                  " ,[S_FLOW_IN] = " & ValueArr(5) & _
                  " ,[S_FLOW_OUT] = " & ValueArr(6) & _
                  " ,[S_WEB_PORT] = " & ValueArr(7) & _
                  " ,[S_SQL_CONNECT] = " & ValueArr(8) & _
                  " ,[IN_TIME] = '" & Now.ToString() & "'" & _
                  " WHERE LIST_ID = " & ValueArr(0)
            sqlda.runSql(sSQL)
            '沒有策略
            If ValueArr(9).Trim() = "-1" Or String.IsNullOrEmpty(ValueArr(9).Trim()) Then
                Return 0
            End If
            '找到策略
            sSQL = "select * from MON_CAMPAIGN_LIST where CAMP_ID = " & ValueArr(9)
            Dim dt As DataTable = sqlda.GetMytable(sSQL)
            Dim Dic As New Dictionary(Of String, String)
            Dic.Add("S_PRIORITY", dt.Rows(0)("S_PRIORITY").ToString())
            Dic.Add("S_ACTION", dt.Rows(0)("S_ACTION").ToString())

            '驗證策略
            sSQL = "select count(*) from MON_INFO where 1=1 and " & dt.Rows(0)("S_NAME").ToString & " and LIST_ID = " & ValueArr(0)
            Dim FLAG = CType(sqlda.myExecuteScalar(sSQL), Integer)
            '沒有超標
            If FLAG < 1 Then
                Return 0
            End If

            '是否到了下一個輪訓間隔
            sSQL = "select TOP 1 * from [MON_MAIL]   WHERE list_id = " & ValueArr(0) & "  ORDER BY S_SENDTIME DESC "
            dt = sqlda.GetMytable(sSQL)
            Dim ts As TimeSpan = TimeSpan.MaxValue
            If dt.Rows.Count > 0 Then
                Dim thatTime As DateTime = CType(dt.Rows(0)("S_SENDTIME"), DateTime)
                ts = DateTime.Now.Subtract(thatTime)
            End If
            sSQL = "select * from MON_PARAMETER"
            dt = sqlda.GetMytable(sSQL)
            Dim circ As Integer = CType(dt.Rows(0)("MAIL_CIRC"), Integer)
            If ts.TotalSeconds < circ Then
                Return 0
            End If

            '異步發信
            Dic.Add("S_TITLE", dt.Rows(0)("S_TITLE").ToString())
            Dic.Add("MAIL_SMTP_SERVER", dt.Rows(0)("MAIL_SMTP_SERVER").ToString())
            Dic.Add("MAIL_ACCOUNT", dt.Rows(0)("MAIL_ACCOUNT").ToString())
            Dic.Add("MAIL_PASSWORD", dt.Rows(0)("MAIL_PASSWORD").ToString())
            Dic.Add("MAIL_FROM", dt.Rows(0)("MAIL_FROM").ToString())
            Dic.Add("MAIL_ADDRESS", dt.Rows(0)("MAIL_ADDRESS").ToString())
            Dim sout As Double
            Dim sin As Double
            Try
                sin = Convert.ToDouble(ValueArr(5)) / 1024.0
                sout = Convert.ToDouble(ValueArr(6)) / 1024.0
            Catch ex As Exception
                sin = -1
                sout = -1
            End Try
            Dim sb As New StringBuilder()
            sb.AppendFormat("CPU使用率:{0}%<br />", ValueArr(1))
            sb.AppendFormat("內存使用率:{0}%<br />", ValueArr(4))
            sb.AppendFormat("系統磁盤使用率:{0}%<br />", ValueArr(3))
            sb.AppendFormat("文件磁盤使用率:{0}%<br />", ValueArr(2))
            sb.AppendFormat("網絡下行流量IN:{0}KB/S<br />", sin.ToString())
            sb.AppendFormat("網絡上行流量OUT:{0}KB/S<br />", sout.ToString())
            sb.AppendFormat("網站連接數:{0}<br />", ValueArr(7))
            sb.AppendFormat("數據庫連接數:{0}<br />", ValueArr(8))
            Dim subject As String = String.Format("人力運營管理系統監控告警:{0}{1}", ValueArr(10), IIf(ValueArr(11) = "0", "WEB服務器", "數據庫服務器"))
            Dim body As String = String.Format("{0}<br />{1}<br />{2}<br />{3}<br />{4}", DateTime.Now.ToString(), Dic("S_PRIORITY"), Dic("S_TITLE"), sb.ToString(), Dic("S_ACTION"))
            'TODO:oracle不支持~select @@identity
            sSQL = "INSERT INTO [MON_MAIL] ([LIST_ID] ,[S_SOURCE] ,[S_CONTENT] ,[S_ACTION] ,[S_PRIORITY] ,[S_ADDRESS] ,[STATUS] ,[S_SENDTIME]) VALUES " & _
            "(" & ValueArr(0) & ",'" & Dic("S_TITLE") & "','" & sb.ToString() & "','" & Dic("S_ACTION") & "','" & Dic("S_PRIORITY") & "','" & dt.Rows(0)("MAIL_ADDRESS").ToString() & "',0,'" & DateTime.Now.ToString() & "');select @@identity"
            Dim index As Integer = CType(sqlda.myExecuteScalar(sSQL), Integer)

            Dic.Add("SUBJECT", subject)
            Dic.Add("BODY", body)
            Dic.Add("INDEX", index)
            Dic.Add("CONSTR", sqlda.GetMyConnStr())

            ThreadPool.QueueUserWorkItem(AddressOf SendMail, Dic)
        Catch ex As Exception

        End Try
    End Function
    Function SendMail(ByVal setting As Object) As Integer
        Try
            Dim Dic As Dictionary(Of String, String) = CType(setting, Dictionary(Of String, String))
            Dim iSmtpSetting As New PublicFunction.SmtpSetting
            iSmtpSetting.SmtpServer = Dic("MAIL_SMTP_SERVER")
            iSmtpSetting.SystemEmailAccount = Dic("MAIL_ACCOUNT")
            iSmtpSetting.SystemEmailAccountPassword = Dic("MAIL_PASSWORD")
            iSmtpSetting.SmtpAuthenticationType = 1
            Dim result As Boolean = PublicFunction.Mail.SendMail(iSmtpSetting, Dic("MAIL_FROM"), Dic("MAIL_ADDRESS"), Dic("SUBJECT"), Dic("BODY"), True, System.Web.Mail.MailPriority.High, System.Text.Encoding.UTF8, New String() {})
            Dim val As Integer = IIf(result, 1, 2)
            Dim sqlda As New data_source.WebTao.Public.SqlServerData(Dic("CONSTR"))
            sqlda.runSql("update MON_MAIL set STATUS = " & val & " where MAIL_ID = " & Dic("INDEX"))
        Catch ex As Exception

        End Try
    End Function
End Class

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91成人免费观看网站| 久久免费成人精品视频| 久久天天躁狠狠躁夜夜爽蜜月| 日韩av综合网站| 欧美激情亚洲激情| 亚洲男人天堂古典| 成人午夜激情免费视频| 日韩成人激情影院| 国产一区二区欧美日韩| 97香蕉超级碰碰久久免费的优势| 欧美日韩美女在线观看| 亚洲精品久久久久中文字幕二区| 91成人在线播放| 国产精品午夜视频| 国产大片精品免费永久看nba| 亚洲国产高清自拍| 日本一区二区三区四区视频| 欧美激情久久久| 8090理伦午夜在线电影| 中文字幕日韩在线观看| 亚洲国产精品久久久久秋霞蜜臀| 亚洲成色777777女色窝| 精品视频一区在线视频| 亚洲大胆美女视频| 亚洲欧美国产精品| 国产精品久久久av久久久| 日韩在线视频观看| 亚洲少妇中文在线| 日韩最新中文字幕电影免费看| 日韩中文字幕在线视频| 欧美另类极品videosbestfree| 操人视频在线观看欧美| 亚洲综合在线做性| 久久欧美在线电影| 久久久国产精品亚洲一区| 亚洲成人xxx| 亚洲精品国产精品自产a区红杏吧| 国产日本欧美一区二区三区| 国产精品美女久久久久av超清| 疯狂蹂躏欧美一区二区精品| 欧美成人在线影院| 亚洲精品丝袜日韩| 日韩精品亚洲元码| 日韩成人在线视频| 夜色77av精品影院| 97免费视频在线| 亚洲欧美日韩在线一区| 欧美一区在线直播| 国内精品模特av私拍在线观看| 精品亚洲男同gayvideo网站| 高跟丝袜一区二区三区| 日韩免费高清在线观看| 日韩av在线网页| 在线日韩精品视频| 欧美激情精品久久久久久久变态| 日韩av色综合| 久久久久久91香蕉国产| 日韩精品免费电影| 国产啪精品视频网站| 日韩在线观看精品| 两个人的视频www国产精品| 97国产真实伦对白精彩视频8| 亚洲国产福利在线| 中国china体内裑精亚洲片| 蜜臀久久99精品久久久无需会员| 久久人91精品久久久久久不卡| 日韩女优在线播放| 久操成人在线视频| 国产精品欧美在线| 欧美激情乱人伦| 欧美成人免费全部| 欧美一区二区色| 欧美激情国产高清| 亚洲第一精品夜夜躁人人爽| 一区二区三区亚洲| 国产va免费精品高清在线| 亚洲一区中文字幕在线观看| 91国产中文字幕| 色综合久久久久久中文网| 亚洲精品中文字| 欧美夫妻性生活视频| 日韩av123| 国产精品成人av性教育| 日韩av中文字幕在线免费观看| 日韩美女av在线免费观看| 成年人精品视频| 国产综合香蕉五月婷在线| 亚洲精品中文字幕女同| 亚洲成人动漫在线播放| 久久久久北条麻妃免费看| 欧美高清无遮挡| 日本在线精品视频| 麻豆国产精品va在线观看不卡| 久久久久久国产精品久久| 亚洲人免费视频| 国产最新精品视频| 国产精品嫩草影院一区二区| 中文字幕av一区中文字幕天堂| 91在线视频精品| 日韩经典第一页| 欧美激情一级二级| 亚洲欧洲国产精品| 日韩av在线精品| 日韩精品在线观看视频| 视频在线观看一区二区| www.久久撸.com| 亚洲社区在线观看| 国产精品爽黄69天堂a| 亚洲一区精品电影| 久久精品国产免费观看| 成人黄色网免费| 色偷偷88888欧美精品久久久| 日韩国产中文字幕| 亚洲一区二区自拍| 亚洲美女av电影| 国产精品久久久久久婷婷天堂| 国产九九精品视频| 国产成人精品久久二区二区91| 欧美电影免费观看电视剧大全| 欧美黑人性生活视频| 欧美一级大片在线免费观看| 九九精品在线观看| 中文字幕亚洲欧美一区二区三区| 亚洲变态欧美另类捆绑| 久久久电影免费观看完整版| 日韩电影免费观看中文字幕| 国产91精品高潮白浆喷水| 91色视频在线观看| 国产成人精品免高潮费视频| 在线视频亚洲欧美| 久久99精品久久久久久琪琪| 国产精品嫩草影院久久久| 久久久国产精品亚洲一区| 精品女厕一区二区三区| 欧美中文字幕在线| 欧美日韩中文字幕日韩欧美| 久久久噜噜噜久久久| 国产精品一区二区3区| 国产精品一二区| 亚洲免费成人av电影| 久久精品国产一区二区三区| 欧美激情在线视频二区| 91欧美精品成人综合在线观看| 日本91av在线播放| 欧美精品在线视频观看| 国产精彩精品视频| 日韩大陆毛片av| 国外色69视频在线观看| 国产精品三级久久久久久电影| 亚洲精品不卡在线| 97免费中文视频在线观看| 成人妇女免费播放久久久| 日韩女优人人人人射在线视频| 欧美成人精品影院| 亚洲丝袜在线视频| 久久人人爽人人爽人人片av高清| 亚洲精品一区在线观看香蕉| 亚洲一二在线观看| 一区二区欧美激情| 奇米成人av国产一区二区三区| 久久精品久久久久| 亚洲自拍在线观看| 成人免费直播live| 九九热这里只有精品免费看|