Advertisement
Guest User

Untitled

a guest
Mar 17th, 2020
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Nim 3.49 KB | None | 0 0
  1. import strutils
  2. import strformat
  3. import commandeer
  4. import db_common
  5. import db_mysql
  6.  
  7. # changelog
  8. # 0.4 support for webhook
  9. # 0.3 modified output
  10. # 0.2 working version"
  11. # 0.1 time starts flowing
  12.  
  13. # Defaults
  14. let version="0.4"
  15. let myname="check_calllog"
  16. let default_minutes = 10
  17. let default_database = "asteriskcdrdb"
  18. let default_hostname = "localhost"
  19.  
  20. # Parse user Options
  21. commandline:
  22.     option show_version, bool, "version", "V"
  23.     option verbose, bool, "verbose", "v"
  24.     option user_time, int, "time", "t"
  25.     option number, int, "number", "n"
  26.     option user_database, string, "database", "d"
  27.     option username, string, "username", "u"
  28.     option password, string, "password", "p"
  29.     option hostname, string, "hostname", "H"
  30.     option webhook, string, "webhook", "w"
  31.     exitoption "help", "h",
  32.              fmt"""Usage: {myname}
  33.                -t|--time          check the last n mintues, default is {default_minutes}
  34.                -n|--number        check for this number
  35.                -d|--database      check this database, default is {default_database}
  36.                -u|--usernam       usename for database access
  37.                -p|--password      password for database access
  38.                -H|--hostname      hostname of database, default is {default_hostname}
  39.                -w|--webhook       URL of webservice to POST information
  40.                -V|--version       show version and exit
  41.                -h|--help          show this help and exit
  42.                -v|--verbose       be verbose
  43.    Check FreePBX call log for a number
  44.    """
  45.  
  46. # Parse user input
  47. # if user asks for version, show and exit
  48. if show_version:
  49.     echo fmt"{myname} version {version}"
  50.     quit 0
  51.  
  52. # Set default if user did not give us grace_period
  53. if user_time == 0:
  54.     user_time = default_minutes
  55.  
  56. # See if we need to use a different database
  57. if user_database == "":
  58.     user_database = default_database
  59.  
  60. # See if we need to use a different host
  61. if hostname == "":
  62.     hostname = default_hostname
  63.  
  64. # Sanity checks
  65. if username == "":
  66.     echo "need username"
  67.     quit 3
  68.  
  69. if number == 0:
  70.     echo "need number"
  71.     quit 3
  72.  
  73.  
  74. # Inform user if verbose
  75. if verbose:
  76.     echo fmt"check the last {user_time} minutes"
  77.     echo fmt"username {username}"
  78.     echo fmt"databse {user_database}"
  79.     echo fmt"number {number}"
  80.  
  81.  
  82. # Functions
  83.  
  84.                
  85. # Main function
  86. proc main(verbose: bool, username: string, user_time:int, user_database:string, password:string, hostname:string, number:int): int =
  87.     var db: DbConn
  88.     var query: SqlQuery
  89.     var caller: seq[string]
  90.     # make string from number, add mysql wildcard
  91.     var query_number = fmt"%{number}"
  92.     result = 0
  93.  
  94.     try:
  95.         db = open(hostname, username, password, user_database)
  96.     except DbError:
  97.         echo fmt"Could not connect to database {user_database} on host {hostname} with user {username}"
  98.         return 3
  99.        
  100.     # construct the mysql query
  101.     query = sql"select src,calldate from cdr where dst like ? and calldate >= NOW() - INTERVAL ? MINUTE order by calldate desc"
  102.  
  103.     # ask the database
  104.     for row in db.rows(query, query_number, user_time):
  105.         if row[0] in caller: continue
  106.         result = 2
  107.         caller.add(row[0])
  108.         echo fmt"{row[0]} at {row[1]}"
  109.        
  110.     if result == 0:
  111.         echo fmt"No calls for {number}"
  112.    
  113.     # End of Main
  114.    
  115.  
  116.  
  117. # Call main
  118. quit main(verbose, username, user_time, user_database, password, hostname, number)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement