Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Author: Felipe Molina (@felmoltor)
- # Date: 04/03/2015
- # Summary:
- # If you manage a hosted webpage in OVH maybe this script is for you.
- # This script automaticaly access to https://logs.ovh.net/ and downloads the access logs of your apache server.
- # You can filter the downloaded logs by start and stop date.
- # Set a cron to download every day or week the OVH logs. Then analyze them in your own box.
- # TODO: Download also the "error" logs and "ftp" logs
- usr="<YOUR OVH USER>"
- pwd="<YOUR OVH PASSWORD>"
- domain="<YOUR OVH DOMAIN>"
- function printUsage() {
- echo "Usage: $0 <from date> [<to date>]"
- echo "* Format of the dates: (month/day/year MM/DD/YYYY)"
- echo "* from date: Is mandatory "
- echo "* to date: Is optional. Default value is today $(date +%M/%d/%Y)"
- }
- if [[ "$#" -gt 2 || "$#" -lt 1 ]];then
- printUsage
- exit 1
- fi
- fromdate=$1
- todate=$2
- if [[ "$fromdate" != "" ]];then
- if [[ ! $fromdate =~ ^[[:digit:]]{2}/[[:digit:]]{2}/[[:digit:]]{4}$ ]];then
- printUsage
- exit 2
- fi
- fi
- if [[ "$todate" != "" ]];then
- if [[ ! $todate =~ ^[[:digit:]]{2}/[[:digit:]]{2}/[[:digit:]]{4}$ ]];then
- printUsage
- exit 3
- fi
- else
- todate=$(date +%M/%d/%Y)
- fi
- echo "Retrieving log files from $fromdate to $todate"
- frommonth=$(echo $fromdate | cut -d'/' -f1)
- fromyear=$(echo $fromdate | cut -d'/' -f3)
- fromday=$(echo $fromdate | cut -d'/' -f2)
- tomonth=$(echo $todate | cut -d'/' -f1)
- toyear=$(echo $todate | cut -d'/' -f3)
- today=$(echo $todate | cut -d'/' -f2)
- fromepoch=$(date -d "$fromdate" +%s)
- toepoch=$(date -d "$todate" +%s)
- if [[ ! -d tmp ]];then
- mkdir tmp
- fi
- if [[ ! -d lists ]];then
- mkdir lists
- fi
- if [[ ! -d logs ]];then
- mkdir logs
- fi
- # Get the available logs dates
- echo "Obtaining the list of available folders for domain $domain"
- wget --quiet --http-user=$usr --http-password=$pwd https://logs.ovh.net/$domain/ -O tmp/$domain.available.logs.html
- # get only the name of the foler and filter it by month date
- folderlist=$(egrep -o "<a href=\"logs-.*\">" tmp/$domain.available.logs.html | cut -f2 -d'"' | cut -f1 -d'"' | sort -u)
- for folder in $(echo $folderlist);do
- fmonth=$(echo $folder | cut -d'-' -f2)
- fyear=$(echo $folder | cut -d'-' -f3)
- download=0
- if [[ "10#$year" -lt "10#$toyear" && "10#$fyear" -gt "10#$fromyear" ]];then
- download=1
- elif [[ "10#$fyear" -eq "10#$toyear" || "10#$fyear" -eq "10#$fromyear" ]];then
- if [[ "10#$fmonth" -le "10#$tomonth" && "10#$fmonth" -ge "10#$frommonth" ]];then
- download=1
- fi
- fi
- if [[ "$download" -eq "1" ]];then
- echo "Will visit folder $folder"
- echo $folder >> "lists/$domain.available.logs.list"
- fi
- done
- rm "tmp/$domain.available.logs.html"
- for folder in $(cat lists/$domain.available.logs.list); do
- wget --quiet --http-user=$usr --http-password=$pwd https://logs.ovh.net/$domain/$folder/ -O tmp/$domain.$folder.available.logs.html
- filelist=$(egrep -o "<a href=\".*.log.gz\">" tmp/$domain.$folder.available.logs.html | cut -f2 -d'"' | cut -f1 -d'"' | sort -u)
- echo "======================="
- echo "==== $folder ==="
- echo "======================="
- for file in $(echo $filelist);do
- ffile=$(echo $file | egrep -o "[[:digit:]]{2}-[[:digit:]]{2}-[[:digit:]]{4}" | sed 's/\(.*\)-\(.*\)-\(.*\)/\2\/\1\/\3/g' )
- fyear=$(echo $ffile|cut -d'/' -f3)
- fmonth=$(echo $ffile|cut -d'/' -f1)
- fday=$(echo $ffile|cut -d'/' -f2)
- fepoch=$(date -d "$fmonth/$fday/$fyear" +%s)
- if [[ "10#$fepoch" -ge "10#$fromepoch" && "10#$fepoch" -le "10#$toepoch" ]];then
- echo " * Downloading file $file..."
- wget --quiet --http-user=$usr --http-password=$pwd https://logs.ovh.net/$domain/$folder/$file -O logs/$file
- fi
- done
- rm "tmp/$domain.$folder.available.logs.html"
- done
- rm -rf tmp
- rm -rf lists
Add Comment
Please, Sign In to add comment