예제 #1
0
    public GARequestObject Dequeue()
    {
        GARequestObject requestObject = null;

        lock (this.gaRequestQueue.SyncRoot)
        {
            lock (padlock)
            {
                if (this.gaRequestQueue.Count > 0)
                {
                    requestObject = (GARequestObject)this.gaRequestQueue.Dequeue();
                    requestObject.requestCount = this.gaRequestQueue.Count;

                    /*String key = requestObject.requestTime.ToShortDateString() + "_" + requestObject.requestTime.ToLongTimeString() + "_" + requestObject.ipAddress + "_" + requestObject.el;
                     * this.toBeRemoveFileList.Add(key);
                     * if (toBeRemoveFileList.Count > 20)
                     * {
                     *  foreach (String lKey in this.toBeRemoveFileList)
                     *  {
                     *      this.uniqueFileList.Remove(lKey);
                     *  }
                     *  this.toBeRemoveFileList.Clear();
                     * }*/
                }
            }
        }
        return(requestObject);
    }
예제 #2
0
    public void writeToFile(String threadName, GARequestObject requestObject)
    {
        updateLoggerFile();

        String theTimeStamp = "";

        if (requestObject.requestTime != null)
        {
            theTimeStamp = requestObject.requestTime.ToShortDateString() + " " + requestObject.requestTime.ToLongTimeString() + "\t";
        }

        this.file.WriteLine(threadName + "(" + requestObject.requestCount + ")\t" + theTimeStamp + requestObject.ipAddress + "\t" + requestObject.el + "\t" + requestObject.userAgent + "\t" + requestObject.returnRequestCode + "\t" + requestObject.requestStatus + "\t" + requestObject.referrer);
        this.file.Flush();
    }
예제 #3
0
 public void Enqueue(GARequestObject requestObject)
 {
     lock (this.gaRequestQueue.SyncRoot)
     {
         lock (padlock)
         {
             /*String key = requestObject.requestTime.ToShortDateString() + "_" + requestObject.requestTime.ToLongTimeString() + "_" + requestObject.ipAddress + "_" + requestObject.el;
              * if (!this.uniqueFileList.Contains(key))
              * {
              *  this.gaRequestQueue.Enqueue(requestObject);
              *  this.uniqueFileList.Add(key);
              * }*/
             this.gaRequestQueue.Enqueue(requestObject);
         }
     }
 }
예제 #4
0
    private void writeToFile(GARequestObject requestObject)
    {
        DateTime currDate = System.DateTime.Now;

        if (currDate.Day != date.Day)
        {
            date = System.DateTime.Now;
            this.file.Flush();
            this.file.Close();
            this.file = TextWriter.Synchronized(new System.IO.StreamWriter(LOG_FILE_DIR + "gaLogFile" + date.Year + date.Month + date.Day + ".log", true));
        }

        String theTimeStamp = "";

        if (requestObject.requestTime != null)
        {
            theTimeStamp = requestObject.requestTime.ToShortDateString() + " " + requestObject.requestTime.ToLongTimeString() + "\t";
        }

        this.file.WriteLine(theTimeStamp + requestObject.ipAddress + "\t" + requestObject.el + "\t" + requestObject.userAgent);
        this.file.Flush();
    }
예제 #5
0
    IAsyncResult Application_EndRequest(Object source, EventArgs e, AsyncCallback cb, Object state)
    {
        HttpApplication application = (HttpApplication)source;
        HttpContext     context     = application.Context;

        if (context.Response.StatusCode != 200)
        {
            return(new GaIAsyncResult(false));
        }

        string filePath      = context.Request.FilePath;
        string fileExtension =
            VirtualPathUtility.GetExtension(filePath);
        String   ipAddress   = context.Request.UserHostAddress;
        String   userAgent   = context.Request.UserAgent;
        DateTime requestTime = context.Timestamp;

        Boolean filter = false;

        foreach (String pattern in filtredIps)
        {
            if (ipAddress.StartsWith(pattern))
            {
                filter = true;
            }
        }
        if (filter)
        {
            return(new GaIAsyncResult(false));
        }

        if (!extensions.ContainsKey(fileExtension.ToLower()))
        {
            return(new GaIAsyncResult(false));
        }

        Uri    uri         = context.Request.UrlReferrer;
        String urlReferrer = "";

        if (uri != null)
        {
            urlReferrer = uri.ToString();
        }

        String[] languages    = context.Request.UserLanguages;
        String   userLanguage = "";

        if (languages != null && languages.Length > 0)
        {
            userLanguage = languages[0];
        }


        ServicePointManager.Expect100Continue = false;

        GARequestObject requestObject = new GARequestObject("1", GA_TRACKING_ID, "555", "event", extensions[fileExtension.ToLower()], "DOWNLOAD", filePath, "1", ipAddress, userAgent, requestTime, context.Response.StatusCode, context.Response.Status, urlReferrer, 0);

        if (requestObject != null)
        {
            //Debug.WriteLine("filePath : " + filePath);

            WebClient client = new WebClient();
            WebProxy  wp     = new WebProxy(OECD_PROXY);
            client.Proxy = wp;
            client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36");

            if (SEND_TO_GA)
            {
                NameValueCollection collection = new NameValueCollection();
                collection.Add("v", requestObject.v);
                collection.Add("tid", requestObject.tid);
                collection.Add("cid", requestObject.cid);
                collection.Add("t", requestObject.t);
                collection.Add("ec", requestObject.ec);
                collection.Add("ea", requestObject.ea);
                collection.Add("el", requestObject.el);
                collection.Add("ev", requestObject.ev);
                if (requestObject.referrer != null && (requestObject.referrer.Trim().Length > 0))
                {
                    collection.Add("dr", requestObject.referrer);
                }

                try
                {
                    client.UploadValuesAsync(
                        new Uri("http://www.google-analytics.com/collect"),
                        collection
                        );
                }
                catch (System.Net.WebException webE) {
                    //Debug.WriteLine(webE.Message);
                }
            }

            if (LOG_TO_FILE)
            {
                writeToFile(requestObject);
            }

            //Debug.WriteLine("Application_EndRequest  sending object to GA : " + requestObject.el);
        }

        return(new GaIAsyncResult(true));
    }
예제 #6
0
    public void ThreadRun()
    {
        //ArrayList requests = new ArrayList();
        while (true)
        {
            if (this.threadGaRequestQueue.Count() > 0)
            {
                try
                {
                    GARequestObject requestObject = this.threadGaRequestQueue.Dequeue();
                    //logger.writeToFile("ThreadRun ");

                    /*lock (this.threadGaRequestQueue.SyncRoot)
                     * {
                     *  if (threadGaRequestQueue.Count > 0)
                     *  {
                     *      requestObject = (GARequestObject)this.threadGaRequestQueue.Dequeue();
                     *      requestObject.requestCount = this.threadGaRequestQueue.Count;
                     *  }
                     * }*/

                    if (requestObject != null)
                    {
                        //logger.writeToFile("ThreadRun " + requestObject);
                        if (sendToGa)
                        {
                            NameValueCollection collection = new NameValueCollection();
                            collection.Add("v", requestObject.v);
                            collection.Add("tid", requestObject.tid);
                            collection.Add("cid", requestObject.cid);
                            collection.Add("t", requestObject.t);
                            collection.Add("ec", requestObject.ec);
                            collection.Add("ea", requestObject.ea);
                            collection.Add("el", requestObject.el);
                            collection.Add("ev", requestObject.ev);
                            if (requestObject.referrer != null && (requestObject.referrer.Trim().Length > 0))
                            {
                                collection.Add("dr", requestObject.referrer);
                            }

                            //requestObject.userAgent = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)";
                            try
                            {
                                this.client.Headers.Add(HttpRequestHeader.UserAgent, requestObject.userAgent);
                                this.client.UploadValues(
                                    new Uri("http://www.google-analytics.com/collect"),
                                    collection
                                    );
                                this.client.Dispose();
                            }
                            catch (System.Net.WebException e)
                            {
                                //Debug.WriteLine(e.Message);
                                this.logger.writeToFile(e.Message);
                            }
                            collection.Clear();
                            collection = null;
                        }

                        if (logToFile)
                        {
                            //writeToFile(requestObject);
                            this.logger.writeToFile(this.name, requestObject);
                        }

                        //Debug.WriteLine("threadGaRequestQueue(" + this.name + ") sending object to GA : " + requestObject.el);
                        //requestObject = null;
                    }
                }
                catch (Exception e) { }
            }
            else
            {
                Thread.Sleep(500);
            }

            //Debug.WriteLine("threadGaRequestQueue(" + this.name + ") sleeping : " + threadGaRequestQueue.Count);
        }
    }
예제 #7
0
/*    private void Application_BeginRequest(Object source, EventArgs e)
 *  {
 *      // Create HttpApplication and HttpContext objects to access
 *      // request and response properties.
 *      /*HttpApplication application = (HttpApplication)source;
 *
 *      HttpContext context = application.Context;
 *      string filePath = context.Request.FilePath;
 *      string fileExtension = VirtualPathUtility.GetExtension(filePath);* /
 *  }*/


    private void Application_EndRequest(Object source, EventArgs e)
    {
        try
        {
            HttpApplication application = (HttpApplication)source;
            HttpContext     context     = application.Context;

            if (context.Response.StatusCode != 200)
            {
                return;
            }

            String range = context.Request.Headers.Get("Range");
            if (range != null && range.Trim().Length > 0)
            {
                return;
            }

            string filePath = context.Request.FilePath;
            if (filePath == null || filePath.StartsWith("/redirect/"))
            {
                return;
            }

            string fileExtension =
                VirtualPathUtility.GetExtension(filePath);
            String   ipAddress   = context.Request.UserHostAddress;
            String   userAgent   = context.Request.UserAgent;
            DateTime requestTime = context.Timestamp;

            Boolean filter = false;
            foreach (String pattern in filtredIps)
            {
                if (ipAddress.StartsWith(pattern))
                {
                    filter = true;
                    break;
                }
            }
            if (filter)
            {
                return;
            }

            if (!extensions.ContainsKey(fileExtension.ToLower()))
            {
                return;
            }

            if (userAgent != null)
            {
                String lUserAgent = userAgent.ToUpper();
                filter = false;
                foreach (String bot in filtredBots)
                {
                    if (lUserAgent.Contains(bot))
                    {
                        filter = true;
                        break;
                    }
                }
                if (filter)
                {
                    return;
                }
                //if (this.filtredBots.co lUserAgent)

                /*if (lUserAgent.Contains("GOOGLEBOT") || lUserAgent.Contains("YANDEXBOT") || lUserAgent.Contains("BINGBOT")
                || lUserAgent.Contains("BAIDUSPIDER") || lUserAgent.Contains("TWITTERBOT") || lUserAgent.Contains("YOUDAOBOT")
                || lUserAgent.Contains("YOLINKBOT") || lUserAgent.Contains("PAPERLIBOT") || lUserAgent.Contains("VOILABOT")
                || lUserAgent.Contains("SHOWYOUBOT") || lUserAgent.Contains("EXABOT") || lUserAgent.Contains("MAIL.RU_BOT"))
                || {
                ||  return;
                || }*/
            }

            Uri    uri         = context.Request.UrlReferrer;
            String urlReferrer = "";
            if (uri != null)
            {
                urlReferrer = uri.ToString();
            }

            String[] languages    = context.Request.UserLanguages;
            String   userLanguage = "";
            if (languages != null && languages.Length > 0)
            {
                userLanguage = languages[0];
            }

            ServicePointManager.Expect100Continue = false;

            GARequestObject gaRequestObject = new GARequestObject("1", GA_TRACKING_ID, "555", "event", extensions[fileExtension.ToLower()], "DOWNLOAD", filePath, "1", ipAddress, userAgent, requestTime, context.Response.StatusCode, range, urlReferrer, 0);


            if (gaRequestObject != null)
            {
                //Debug.WriteLine("filePath : " + filePath);

                //Queue.Synchronized(this.gaRequestQueue);
                //Queue mySyncdQ = Queue.Synchronized(this.gaRequestQueue);

                /*lock (this.gaRequestQueue.SyncRoot)
                 * {
                 *  this.gaRequestQueue.Enqueue(gaRequestObject);
                 * }*/
                this.gaRequestQueue.Enqueue(gaRequestObject);
            }
        }
        catch (Exception ee) {
            logger.writeToFile(ee.Message);
        }
    }