def dump(self, dump_file_name=None):
        """Dump configuration to a file in a JSON format

        :param dump_file_name: the file to dump configuration to
        :type dump_file_name: str
        :return: None
        """
        config_dump = {}

        for _, _, category, _, _ in list(self.types_creations.values()):
            try:
                objs = [jsonify_r(i) for i in getattr(self, category)]
            except (TypeError, AttributeError):  # pragma: no cover, simple protection
                logger.warning("Dumping configuration, '%s' not present in the configuration",
                               category)
                continue

            container = getattr(self, category)
            if category == "services":
                objs = sorted(objs,
                              key=lambda o: "%s/%s" % (o["host_name"], o["service_description"]))
            elif hasattr(container, "name_property"):
                name_prop = container.name_property
                objs = sorted(objs, key=lambda o, prop=name_prop: getattr(o, prop, ''))
            config_dump[category] = objs

        if not dump_file_name:
            dump_file_name = os.path.join(tempfile.gettempdir(),
                                          'alignak-%s-cfg-dump-%d.json'
                                          % (self.name, int(time.time())))
        try:
            logger.info('Dumping configuration to: %s', dump_file_name)
            fd = open(dump_file_name, "w")
            fd.write(json.dumps(config_dump, indent=4, separators=(',', ': '), sort_keys=True))
            fd.close()
            logger.info('Dumped')
        except (OSError, IndexError) as exp:  # pragma: no cover, should never happen...
            logger.critical("Error when dumping configuration to %s: %s", dump_file_name, str(exp))
Dump configuration to a file in a JSON format

        :param dump_file_name: the file to dump configuration to
        :type dump_file_name: str
        :return: None