Ad Widget

Collapse

Problem for Deleting All Service Times python script

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • VincheZ
    Junior Member
    • Mar 2019
    • 9

    #1

    Problem for Deleting All Service Times python script

    Hi everyone !

    I'm currently developing a script in python to delete all service times.
    Here is my script :
    Code:
    from pyzabbix import ZabbixAPI, ZabbixAPIException
    import datetime
    import argparse
    import re
    import ConfigParser
    import os
    
    # mandatroy settings, can be set either in variable below, in a config file
    # (~/.zabbirc, directory_script/.zabbixrc) or in command line.
    # default < config < cli
    
    settings = {
            'url': 'None',
            'username': None,
            'password': None
    }
    
    def parse_cli():
            """
            Parse CLI arguments and return whatever has been given in parameter in a
            dict.
            """
            parser = argparse.ArgumentParser(
                    description='Delete all the downtimes for all services in Zabbix'
            )
    
            parser.add_argument(
                    '-u', '--username',
                    action='store',
                    required=False,
                    help='Username to use when connecting'
            )
    
            parser.add_argument(
                    '-p', '--password',
                    required=False,
                    action='store',
                    help='Password to use when connecting'
            )
    
            parser.add_argument(
                    '--url',
                    action='store',
                    help='URL to Zabbix server',
                    required=False
            )
    
            args = vars(parser.parse_args())
            # parse_args creates key with None value, we don't want them as
            # those values could be set via config file
            for setting, value in args.items():
                    if value is None:
                            del args[setting]
            return args
    
    def validate_settings():
            """
            Validate if all the settings have been provided and valid.
            """
            for setting, value in settings.items():
                    if value is None:
                            print setting + " is not defined."
                            return False
            return True
    
    def get_services_id(zapi):
            """
            Return a list of IDs based on service names.
            """
            services = []
    
            try:
                    services = zapi.service.get(
                            output = ['serviceid'],
                            filter = {'showsla': 1}
                    )
            except ZabbixAPIException as e:
                    pass
    
            return services
    
    def delete_service_times():
            """
            Connect to Zabbix and delete all the downtimes for all services.
            """
            zapi = ZabbixAPI(settings['url'])
            zapi.login(settings['username'], settings['password'])
            services_del = get_services_id(zapi)
    
            if len(services_del) > 0:
                    try:
                            r = zapi.service.deletetimes(
                                    filter = {'serviceIds': services_del}
                            )
                    except ZabbixAPIException as e:
                            print ("Error deleting service times: " + format(e))
                            return False
            else:
                    print ("No services found in Zabbix.")
                    return False
    
            return True
    
    def main():
            cli = parse_cli()
            settings.update(cli)
            if validate_settings():
                    return delete_service_times()
            return False
    
    if __name__ == "__main__":
            if main():
                    print ("All service times have been deleted sucessfully.")
    But when I'm running it with Admin user, I've got this error:
    Code:
    Error deleting service times: ("Error -32500: Application error., No permissions to referred object or it does not exist! while sending {'params': {'filter': {'serviceIds': [{u'serviceid': u'29'}, {u'serviceid': u'45'}, {u'serviceid': u'67'}, {u'serviceid': u'62'}, {u'serviceid': u'78'}, {u'serviceid': u'16'}, {u'serviceid': u'121'}, {u'serviceid': u'80'}, {u'serviceid': u'99'}, {u'serviceid': u'20'}, {u'serviceid': u'48'}, {u'serviceid': u'25'}, {u'serviceid': u'98'}, {u'serviceid': u'31'}, {u'serviceid': u'330'}, {u'serviceid': u'100'}, {u'serviceid': u'35'}, {u'serviceid': u'34'}, {u'serviceid': u'51'}, {u'serviceid': u'27'}, {u'serviceid': u'46'}, {u'serviceid': u'50'}, {u'serviceid': u'28'}, {u'serviceid': u'49'}, {u'serviceid': u'103'}, {u'serviceid': u'15'}, {u'serviceid': u'146'}, {u'serviceid': u'18'}, {u'serviceid': u'53'}, {u'serviceid': u'43'}, {u'serviceid': u'177'}, {u'serviceid': u'55'}, {u'serviceid': u'104'}, {u'serviceid': u'63'}, {u'serviceid': u'172'}, {u'serviceid': u'154'}, {u'serviceid': u'40'}, {u'serviceid': u'21'}, {u'serviceid': u'58'}, {u'serviceid': u'182'}, {u'serviceid': u'22'}, {u'serviceid': u'14'}, {u'serviceid': u'64'}, {u'serviceid': u'65'}, {u'serviceid': u'39'}, {u'serviceid': u'66'}, {u'serviceid': u'79'}, {u'serviceid': u'61'}, {u'serviceid': u'24'}, {u'serviceid': u'59'}, {u'serviceid': u'142'}, {u'serviceid': u'42'}, {u'serviceid': u'32'}, {u'serviceid': u'37'}, {u'serviceid': u'30'}, {u'serviceid': u'26'}, {u'serviceid': u'340'}, {u'serviceid': u'176'}, {u'serviceid': u'57'}, {u'serviceid': u'329'}, {u'serviceid': u'143'}, {u'serviceid': u'36'}, {u'serviceid': u'47'}, {u'serviceid': u'54'}, {u'serviceid': u'38'}, {u'serviceid': u'44'}, {u'serviceid': u'174'}, {u'serviceid': u'119'}, {u'serviceid': u'134'}, {u'serviceid': u'169'}, {u'serviceid': u'157'}, {u'serviceid': u'184'}, {u'serviceid': u'145'}, {u'serviceid': u'165'}, {u'serviceid': u'166'}, {u'serviceid': u'183'}, {u'serviceid': u'341'}, {u'serviceid': u'342'}, {u'serviceid': u'343'}, {u'serviceid': u'122'}, {u'serviceid': u'158'}, {u'serviceid': u'331'}, {u'serviceid': u'175'}, {u'serviceid': u'124'}, {u'serviceid': u'155'}, {u'serviceid': u'179'}, {u'serviceid': u'109'}, {u'serviceid': u'164'}, {u'serviceid': u'133'}, {u'serviceid': u'135'}, {u'serviceid': u'117'}, {u'serviceid': u'181'}, {u'serviceid': u'114'}, {u'serviceid': u'102'}, {u'serviceid': u'123'}, {u'serviceid': u'115'}, {u'serviceid': u'125'}, {u'serviceid': u'150'}, {u'serviceid': u'168'}, {u'serviceid': u'171'}, {u'serviceid': u'140'}, {u'serviceid': u'126'}, {u'serviceid': u'141'}, {u'serviceid': u'138'}, {u'serviceid': u'139'}, {u'serviceid': u'136'}, {u'serviceid': u'178'}, {u'serviceid': u'106'}, {u'serviceid': u'127'}, {u'serviceid': u'128'}, {u'serviceid': u'180'}, {u'serviceid': u'52'}, {u'serviceid': u'137'}, {u'serviceid': u'19'}, {u'serviceid': u'105'}, {u'serviceid': u'56'}, {u'serviceid': u'60'}, {u'serviceid': u'130'}, {u'serviceid': u'113'}, {u'serviceid': u'152'}, {u'serviceid': u'107'}, {u'serviceid': u'132'}]}}, 'jsonrpc': '2.0', 'method': 'service.deletetimes', 'auth': u'434c4692f388524d9c363ae92dbc3535', 'id': 2}", -32500)
    Any guess why ? And how this can work ?

    I'm using Zabbix 4.2.0 and Python 2.7.5.

    Thank you all.
  • leandroinfo
    Junior Member
    • Jun 2021
    • 2

    #2
    I have de same problem. I can't understand how to pass de parameters to service.deletetimes and the documentation example is not good enough to explain how to do this.

    Comment

    Working...