/* * Web Report * Copyright (C) 2000 Inter7 Internet Technologies, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * */ #define MAX_TEMP_BUF 2000 #define MAX_SMALL_BUF 300 #define MAX_BIG_BUF 600 #define MAX_TINY_BUF 100 #define CONFIG_FILE "/usr/local/etc/webreport.conf" #define CONFIG_STRING_TOKENS "\n\t =" #define CONFIG_TITLE_TOKENS "=\n" #define MAX_DOMAINS 254 #define MAX_EXCLUDE_DIRS 10 #define MAX_INCLUDE_DIRS 10 #define MAX_EXCLUDE_SITES 10 #define DEFAULT_MAIL_PROG "mailx" #define DEFAULT_COMPRESS_PROG "gzip -f" /* the last letter of this is ignored * so it will work with index.html and index.htm */ #define INDEX_HTML_NAME "index.htm" #define INDEX_HTML_NAME_LEN 9 /* * Config File Names * */ #define CONFIG_PRICE_REPORT "price_report" #define CONFIG_ACCESS_LOG "access_log" #define CONFIG_SITE_NAME "site" #define CONFIG_TITLE "title" #define CONFIG_HTML_OUTPUT "html_output" #define CONFIG_DNS "dns" #define CONFIG_ON "on" #define CONFIG_OFF "off" #define CONFIG_LOG_ARCHIVE_DIR "log_archive_dir" #define CONFIG_REPORT_ARCHIVE_DIR "report_archive_dir" #define CONFIG_COMPRESS_PROG "compress_prog" #define CONFIG_LOG_DIR "log_dir" #define CONFIG_START_PROG "start_prog" #define CONFIG_STOP_PROG "stop_prog" #define CONFIG_HTML_FILE "html_file" #define CONFIG_TEXT_FILE "text_file" #define CONFIG_ROTATE "rotate" #define CONFIG_EMAIL "email" #define CONFIG_BG_PIC "bg_pic" #define CONFIG_BG_COLOR "bg_color" #define CONFIG_FG_COLOR "fg_color" #define CONFIG_MAIL_PROG "mail_prog" #define CONFIG_HTML_HEADER "html_header" #define CONFIG_HTML_FOOTER "html_footer" #define CONFIG_MAX_DOMAINS "max_domains" #define CONFIG_MAX_SUB_DOMAINS "max_sub_domains" #define CONFIG_MAX_URLS "max_urls" #define CONFIG_24_HOUR_TIME "24_hour_time" #define CONFIG_EXCLUDE_DIR "exclude" #define CONFIG_INCLUDE_DIR "include" #define CONFIG_EXCLUDE_SITES "exclude_sites" #define ROOT_URL "/" #define EMAIL_HTML_REPORT "html" #define EMAIL_TEXT_REPORT "text" #define EMAIL_FREQ_DAILY "daily" #define EMAIL_FREQ_WEEKLY "weekly" #define EMAIL_FREQ_MONTHLY "monthly" typedef struct web_prices { unsigned long bytes_sent; float price; } web_prices; typedef struct email_report { char email_addr[MAX_SMALL_BUF]; char output_type[MAX_SMALL_BUF]; char frequency[MAX_SMALL_BUF]; char subject[MAX_SMALL_BUF]; struct email_report *next; } email_report; typedef struct log_format { char client[MAX_SMALL_BUF]; char blank1[10]; char authuser[MAX_SMALL_BUF]; char sysdate[MAX_SMALL_BUF]; char syshour[MAX_SMALL_BUF]; char url[MAX_BIG_BUF]; char status[MAX_SMALL_BUF]; char length[MAX_SMALL_BUF]; char refer[MAX_BIG_BUF]; char browser[MAX_BIG_BUF]; } log_format; struct log_format MyLog; typedef struct total_trans_by_url { float per_req; float per_byte; unsigned long bytes_sent; unsigned long requests; char url[MAX_SMALL_BUF]; struct total_trans_by_url *next; } total_trans_by_url; struct total_trans_by_url *Ttbu; typedef struct total_trans_by_domain { float per_req; float per_byte; unsigned long bytes_sent; unsigned long requests; char domain[MAX_SMALL_BUF]; struct total_trans_by_domain *next; } total_trans_by_domain; struct total_trans_by_domain *Ttbdom; typedef struct total_trans_by_sub_domain { float per_req; float per_byte; unsigned long bytes_sent; unsigned long requests; char sub_domain[MAX_SMALL_BUF]; struct total_trans_by_sub_domain *next; } total_trans_by_sub_domain; struct total_trans_by_sub_domain *Ttbsdom; typedef struct total_trans_by_date { float per_req; float per_byte; unsigned long bytes_sent; unsigned long requests; char sysdate[MAX_SMALL_BUF]; struct total_trans_by_date *next; } total_trans_by_date; struct total_trans_by_date *Ttbd; typedef struct total_root_by_date { float per_req; float per_byte; unsigned long bytes_sent; unsigned long requests; char sysdate[MAX_SMALL_BUF]; struct total_root_by_date *next; } total_root_by_date; struct total_root_by_date *Trbd; typedef struct total_trans_by_refer { float per_req; float per_byte; unsigned long bytes_sent; unsigned long requests; char refer[MAX_BIG_BUF]; struct total_trans_by_refer *next; } total_trans_by_refer; struct total_trans_by_refer *Ttbr; typedef struct total_trans_by_browser { float per_req; float per_byte; unsigned long bytes_sent; unsigned long requests; char browser[MAX_BIG_BUF]; struct total_trans_by_browser *next; } total_trans_by_browser; struct total_trans_by_browser *Ttbb; typedef struct total_trans_by_hour { float per_req; float per_byte; unsigned long bytes_sent; unsigned long requests; } total_trans_by_hour; struct total_trans_by_hour ttbh[24]; typedef struct www_site_def { char site_name[MAX_BIG_BUF]; char access_log_name[MAX_BIG_BUF]; char title[MAX_BIG_BUF]; char html_output_name[MAX_BIG_BUF]; char log_archive_dir[MAX_BIG_BUF]; char report_archive_dir[MAX_BIG_BUF]; int do_dns; int rotate; char bg_pic[MAX_SMALL_BUF]; char html_file[MAX_SMALL_BUF]; char text_file[MAX_SMALL_BUF]; char archive_month[MAX_SMALL_BUF]; char archive_year[MAX_SMALL_BUF]; int restart_server; int max_domains; int max_sub_domains; int max_urls; int hour_time_24; char log_month[MAX_SMALL_BUF]; char log_year[MAX_SMALL_BUF]; char html_header[MAX_SMALL_BUF]; char html_footer[MAX_SMALL_BUF]; char bg_color[MAX_TINY_BUF]; char fg_color[MAX_TINY_BUF]; char first_day[MAX_SMALL_BUF]; char last_day[MAX_SMALL_BUF]; int max_exclude_sites; char exclude_sites[MAX_EXCLUDE_SITES][MAX_SMALL_BUF]; int max_exclude_dirs; char exclude_dirs[MAX_EXCLUDE_DIRS][MAX_SMALL_BUF]; int max_include_dirs; char include_dirs[MAX_INCLUDE_DIRS][MAX_SMALL_BUF]; FILE *archive_file; struct email_report *er; struct www_site_def *next; } www_site_def; struct www_site_def *SiteDef; char *DomainAbbr[MAX_DOMAINS][2] = { "unresolved", "", "com", "Commercial", "edu", "Educational", "gov", "Government", "int", "International", "mil", "US Military", "net", "Network", "org", "Non-Profit Organization", "arpa", "Old style Arpanet", "nato", "Nato field", "ad", "Andorra", "ae", "United Arab Emirates", "af", "Afghanistan", "ag", "Antigua and Barbuda", "ai", "Anguilla", "al", "Albania", "am", "Armenia", "an", "Netherlands Antilles", "ao", "Angola", "aq", "Antarctica", "ar", "Argentina", "as", "American Samoa", "at", "Austria", "au", "Australia", "aw", "Aruba", "az", "Azerbaijan", "ba", "Bosnia and Herzegovina", "bb", "Barbados", "bd", "Bangladesh", "be", "Belgium", "bf", "Burkina Faso", "bg", "Bulgaria", "bh", "Bahrain", "bi", "Burundi", "bj", "Benin", "bm", "Bermuda", "bn", "Brunei Darussalam", "bo", "Bolivia", "br", "Brazil", "bs", "Bahamas", "bt", "Bhutan", "bv", "Bouvet Island", "bw", "Botswana", "by", "Belarus", "bz", "Belize", "ca", "Canada", "cc", "Cocos (Keeling) Islands", "cf", "Central African Republic", "cg", "Congo", "ch", "Switzerland", "ci", "Cote D'Ivoire (Ivory Coast)", "ck", "Cook Islands", "cl", "Chile", "cm", "Cameroon", "cn", "China", "co", "Colombia", "cr", "Costa Rica", "cs", "Czechoslovakia (former)", "cu", "Cuba", "cv", "Cape Verde", "cx", "Christmas Island", "cy", "Cyprus", "cz", "Czech Republic", "de", "Germany", "dj", "Djibouti", "dk", "Denmark", "dm", "Dominica", "do", "Dominican Republic", "dz", "Algeria", "ec", "Ecuador", "ee", "Estonia", "eg", "Egypt", "eh", "Western Sahara", "er", "Eritrea", "es", "Spain", "et", "Ethiopia", "fi", "Finland", "fj", "Fiji", "fk", "Falkland Islands (Malvinas)", "fm", "Micronesia", "fo", "Faroe Islands", "fr", "France", "fx", "France, Metropolitan", "ga", "Gabon", "gb", "Great Britain (UK)", "gd", "Grenada", "ge", "Georgia", "gf", "French Guiana", "gh", "Ghana", "gi", "Gibraltar", "gl", "Greenland", "gm", "Gambia", "gn", "Guinea", "gp", "Guadeloupe", "gq", "Equatorial Guinea", "gr", "Greece", "gs", "S. Georgia and S. Sandwich Isls.", "gt", "Guatemala", "gu", "Guam", "gw", "Guinea-Bissau", "gy", "Guyana", "hk", "Hong Kong", "hm", "Heard and McDonald Islands", "hn", "Honduras", "hr", "Croatia (Hrvatska)", "ht", "Haiti", "hu", "Hungary", "id", "Indonesia", "ie", "Ireland", "il", "Israel", "in", "India", "io", "British Indian Ocean Territory", "iq", "Iraq", "ir", "Iran", "is", "Iceland", "it", "Italy", "jm", "Jamaica", "jo", "Jordan", "jp", "Japan", "ke", "Kenya", "kg", "Kyrgyzstan", "kh", "Cambodia", "ki", "Kiribati", "km", "Comoros", "kn", "Saint Kitts and Nevis", "kp", "Korea (North)", "kr", "Korea (South)", "kw", "Kuwait", "ky", "Cayman Islands", "kz", "Kazakhstan", "la", "Laos", "lb", "Lebanon", "lc", "Saint Lucia", "li", "Liechtenstein", "lk", "Sri Lanka", "lr", "Liberia", "ls", "Lesotho", "lt", "Lithuania", "lu", "Luxembourg", "lv", "Latvia", "ly", "Libya", "ma", "Morocco", "mc", "Monaco", "md", "Moldova", "mg", "Madagascar", "mh", "Marshall Islands", "mk", "Macedonia", "ml", "Mali", "mm", "Myanmar", "mn", "Mongolia", "mo", "Macau", "mp", "Northern Mariana Islands", "mq", "Martinique", "mr", "Mauritania", "ms", "Montserrat", "mt", "Malta", "mu", "Mauritius", "mv", "Maldives", "mw", "Malawi", "mx", "Mexico", "my", "Malaysia", "mz", "Mozambique", "na", "Namibia", "nc", "New Caledonia", "ne", "Niger", "nf", "Norfolk Island", "ng", "Nigeria", "ni", "Nicaragua", "nl", "Netherlands", "no", "Norway", "np", "Nepal", "nr", "Nauru", "nt", "Neutral Zone", "nu", "Niue", "nz", "New Zealand (Aotearoa)", "om", "Oman", "pa", "Panama", "pe", "Peru", "pf", "French Polynesia", "pg", "Papua New Guinea", "ph", "Philippines", "pk", "Pakistan", "pl", "Poland", "pm", "St. Pierre and Miquelon", "pn", "Pitcairn", "pr", "Puerto Rico", "pt", "Portugal", "pw", "Palau", "py", "Paraguay", "qa", "Qatar", "re", "Reunion", "ro", "Romania", "ru", "Russian Federation", "rw", "Rwanda", "sa", "Saudi Arabia", "sb", "Solomon Islands", "sc", "Seychelles", "sd", "Sudan", "se", "Sweden", "sg", "Singapore", "sh", "St. Helena", "si", "Slovenia", "sj", "Svalbard and Jan Mayen Islands", "sk", "Slovak Republic", "sl", "Sierra Leone", "sm", "San Marino", "sn", "Senegal", "so", "Somalia", "sr", "Suriname", "st", "Sao Tome and Principe", "su", "USSR (former)", "sv", "El Salvador", "sy", "Syria", "sz", "Swaziland", "tc", "Turks and Caicos Islands", "td", "Chad", "tf", "French Southern Territories", "tg", "Togo", "th", "Thailand", "tj", "Tajikistan", "tk", "Tokelau", "tm", "Turkmenistan", "tn", "Tunisia", "to", "Tonga", "tp", "East Timor", "tr", "Turkey", "tt", "Trinidad and Tobago", "tv", "Tuvalu", "tw", "Taiwan", "tz", "Tanzania", "ua", "Ukraine", "ug", "Uganda", "uk", "United Kingdom", "um", "US Minor Outlying Islands", "us", "United States", "uy", "Uruguay", "uz", "Uzbekistan", "va", "Vatican City State (Holy See)", "vc", "Saint Vincent and the Grenadines", "ve", "Venezuela", "vg", "Virgin Islands (British)", "vi", "Virgin Islands (U.S.)", "vn", "Viet Nam", "vu", "Vanuatu", "wf", "Wallis and Futuna Islands", "ws", "Samoa", "ye", "Yemen", "yt", "Mayotte", "yu", "Yugoslavia", "za", "South Africa", "zm", "Zambia", "zr", "Zaire", "zw", "Zimbabwe", "", "Unknown", }; #define MAX_PRICE_REPORT 5 #define PRICE_REPORT_FILE_NAME "/usr/tmp/webreport_price" typedef struct webreport_globals { char start_prog[MAX_SMALL_BUF]; char stop_prog[MAX_SMALL_BUF]; char log_dir[MAX_SMALL_BUF]; int new_month; FILE *price_report; int max_price_report; char price_report_email_addr[MAX_PRICE_REPORT][MAX_SMALL_BUF]; char mail_prog[MAX_SMALL_BUF]; char compress_prog[MAX_SMALL_BUF]; int force_archive; char current_month[4]; char current_year[5]; char current_archive_file[MAX_BIG_BUF]; int virgin_log; char netscape_format_line[MAX_BIG_BUF]; char conf_file[MAX_BIG_BUF]; time_t mytime; char TextReportName[MAX_TINY_BUF]; FILE *TextReport; char HTMLReportName[MAX_TINY_BUF]; FILE *HTMLReport; char TmpBuf[MAX_TEMP_BUF]; char LogBuf[MAX_TEMP_BUF]; unsigned long TotalRequests; unsigned long TotalBytes; unsigned long TotalDays; struct tm *mytm; struct www_site_def *cur_site; } webreport_globals; webreport_globals Globals; char *TimeAbbr[24] = { "midnight", "1 am", "2 am", "3 am", "4 am", "5 am", "6 am", "7 am", "8 am", "9 am", "10 am", "11 am", "noon", "1 pm", "2 pm", "3 pm", "4 pm", "5 pm", "6 pm", "7 pm", "8 pm", "9 pm", "10 pm", "11 pm", };