public static void getPopularGraph(HttpListenerContext request)
        {
            DateTime timestamp = DateTime.Now.ToUniversalTime();
            Dictionary <string, List <int> > graphvalues = new Dictionary <string, List <int> >();
            List <string> labels  = new List <string>();
            int           highest = 10;
            int           days    = 10;
            List <Script> scripts = new List <Script>();

            foreach (KeyValuePair <Script, int> scriptvalue in Program.getpopular(10))
            {
                scripts.Add(scriptvalue.Key);
            }
            for (int i = days - 1; i >= 0; i--)
            {
                YAMLConfiguration file = Program.getlog(Program.GetFileIDForTimestamp(timestamp.AddDays(i * -1)));
                labels.Add(timestamp.AddDays(i * -1).Day + "/" + timestamp.AddDays(i * -1).Month);
                for (int y = 0; y < 24; y++)
                {
                    foreach (Script script in scripts)
                    {
                        int amount = file.GetKeys(y + "." + script.ID).Count;
                        if (!graphvalues.ContainsKey(script.Name))
                        {
                            graphvalues.Add(script.Name, new List <int>());
                        }
                        graphvalues[script.Name].Add(amount);
                        if (highest < amount)
                        {
                            highest = amount;
                        }
                    }
                }
            }
            byte[] output = GraphRenderer.MultiLineGraph("popular", graphvalues, highest + 10, Math.Ceiling(highest / 10.0), days, 24, labels);
            request.Response.OutputStream.Write(output, 0, output.Length);
        }
        public static byte[] GetGraph(Script script, int days, string data, string datavalue, ModeEnum mode)
        {
            data      = data.ToLowerFast();
            datavalue = datavalue?.ToLowerFast();
            DateTime timestamp = DateTime.Now.ToUniversalTime();

            switch (mode)
            {
            case ModeEnum.ADD:
            case ModeEnum.COUNT:
            case ModeEnum.AVERAGE:

            {
                List <double> graphvalues = new List <double>();
                List <string> labels      = new List <string>();
                int           highest     = 10;
                for (int i = days - 1; i >= 0; i--)
                {
                    YAMLConfiguration file = Program.getlog(Program.GetFileIDForTimestamp(timestamp.AddDays(i * -1)));
                    labels.Add(timestamp.AddDays(i * -1).Day + "/" + timestamp.AddDays(i * -1).Month);
                    for (int y = 0; y < 24; y++)
                    {
                        if (data == "servers")
                        {
                            int amount = file.GetKeys(y + "." + script.ID).Count;
                            graphvalues.Add(amount);
                            if (highest < amount)
                            {
                                highest = amount;
                            }
                        }
                        else
                        {
                            switch (mode)
                            {
                            case ModeEnum.ADD:
                                double count = 0;
                                foreach (string server in file.GetKeys(y + "." + script.ID))
                                {
                                    count += file.ReadDouble(y + "." + script.ID + "." + server + "." + data, 0);
                                }
                                if (highest < count)
                                {
                                    highest = Convert.ToInt32(Math.Ceiling(count));
                                }
                                graphvalues.Add(count);
                                break;

                            case ModeEnum.COUNT:
                                int count2 = 0;
                                foreach (string server in file.GetKeys(y + "." + script.ID))
                                {
                                    if (file.ReadString(y + "." + script.ID + "." + server + "." + data, "").ToLowerFast() == datavalue)
                                    {
                                        count2++;
                                    }
                                }
                                if (highest < count2)
                                {
                                    highest = count2;
                                }
                                graphvalues.Add(count2);
                                break;

                            case ModeEnum.AVERAGE:
                                double        count3 = 0;
                                List <string> keys   = file.GetKeys(y + "." + script.ID);
                                foreach (string server in keys)
                                {
                                    count3 += file.ReadDouble(y + "." + script.ID + "." + server + "." + data, 0);
                                }
                                int keycount = keys.Count;
                                if (keycount < 1)
                                {
                                    keycount = 1;
                                }
                                count3 /= keycount;
                                if (highest < count3)
                                {
                                    highest = Convert.ToInt32(Math.Ceiling(count3));
                                }
                                graphvalues.Add(count3);
                                break;
                            }
                        }
                    }
                }
                return(GraphRenderer.BasicLineGraph(script.Name, graphvalues, highest, Math.Ceiling(highest / 10.0), days, 24, labels));
            }

            case (ModeEnum.MULTICOUNT):
            {
                Dictionary <string, List <int> > graphvalues = new Dictionary <string, List <int> >();
                List <string> labels    = new List <string>();
                int           highest   = 10;
                int           countsize = 0;
                for (int i = days - 1; i >= 0; i--)
                {
                    YAMLConfiguration file = Program.getlog(Program.GetFileIDForTimestamp(timestamp.AddDays(i * -1)));
                    labels.Add(timestamp.AddDays(i * -1).Day + "/" + timestamp.AddDays(i * -1).Month);
                    for (int y = 0; y < 24; y++)
                    {
                        Dictionary <string, int> loopvaluecount = new Dictionary <string, int>();
                        foreach (string server in file.GetKeys(y + "." + script.ID))
                        {
                            string currentvalue = file.ReadString(y + "." + script.ID + "." + server + "." + data, "").ToLowerFast();
                            int    count;
                            if (!string.IsNullOrWhiteSpace(currentvalue))
                            {
                                count = 1;
                            }
                            else
                            {
                                count = 0;
                            }
                            if (!loopvaluecount.ContainsKey(currentvalue))
                            {
                                loopvaluecount.Add(currentvalue, 0);
                            }
                            loopvaluecount[currentvalue] = loopvaluecount[currentvalue] + count;
                            if (!graphvalues.ContainsKey(currentvalue) && graphvalues.Keys.Count < 15 && !string.IsNullOrWhiteSpace(currentvalue))
                            {
                                graphvalues.Add(currentvalue, new List <int>());
                                for (int z = 0; z < countsize; z++)
                                {
                                    graphvalues[currentvalue].Add(0);
                                }
                            }
                        }
                        foreach (KeyValuePair <string, List <int> > currentvalue in graphvalues)
                        {
                            if (loopvaluecount.ContainsKey(currentvalue.Key))
                            {
                                graphvalues[currentvalue.Key].Add(loopvaluecount[currentvalue.Key]);
                                if (loopvaluecount[currentvalue.Key] > highest)
                                {
                                    highest = loopvaluecount[currentvalue.Key];
                                }
                            }
                            else
                            {
                                graphvalues[currentvalue.Key].Add(0);
                            }
                        }
                        countsize++;
                    }
                }
                return(GraphRenderer.MultiLineGraph(script.Name, graphvalues, highest, Math.Ceiling(highest / 10.0), days, 24, labels));
            }
            }
            return(null);
        }