2002-12-12 23:55:49 +03:00
/*
2004-03-30 23:35:44 +04:00
* Copyright ( C ) 2002 - 2004 Sistina Software , Inc . All rights reserved .
2009-02-09 12:45:49 +03:00
* Copyright ( C ) 2004 - 2009 Red Hat , Inc . All rights reserved .
2002-12-12 23:55:49 +03:00
*
2004-03-30 23:35:44 +04:00
* This file is part of LVM2 .
2002-12-12 23:55:49 +03:00
*
2004-03-30 23:35:44 +04:00
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
2007-08-21 00:55:30 +04:00
* of the GNU Lesser General Public License v .2 .1 .
2002-12-12 23:55:49 +03:00
*
2007-08-21 00:55:30 +04:00
* You should have received a copy of the GNU Lesser General Public License
2004-03-30 23:35:44 +04:00
* along with this program ; if not , write to the Free Software Foundation ,
2016-01-21 13:49:46 +03:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
2002-12-12 23:55:49 +03:00
*/
# ifndef _LVM_REPORT_H
# define _LVM_REPORT_H
2018-05-14 12:30:20 +03:00
# include "lib/metadata/metadata-exported.h"
# include "lib/label/label.h"
# include "lib/activate/activate.h"
2002-12-12 23:55:49 +03:00
2009-02-09 12:45:49 +03:00
typedef enum {
2016-05-10 16:15:48 +03:00
CMDLOG = 1 ,
2016-05-03 12:18:16 +03:00
FULL = 2 ,
LVS = 4 ,
LVSINFO = 8 ,
LVSSTATUS = 16 ,
LVSINFOSTATUS = 32 ,
PVS = 64 ,
VGS = 128 ,
SEGS = 256 ,
PVSEGS = 512 ,
LABEL = 1024 ,
DEVTYPES = 2048
2009-02-09 12:45:49 +03:00
} report_type_t ;
2002-12-12 23:55:49 +03:00
2014-11-27 17:02:13 +03:00
/*
* The " struct selection_handle " is used only for selection
* of items that should be processed further ( not for display ! ) .
*
* It consists of selection reporting handle " selection_rh "
* used for the selection itself ( not for display on output ! ) .
* The items are reported directly in memory to a buffer and
* then compared against selection criteria . Once we know the
* result of the selection , the buffer is dropped !
*
* The " orig_report_type " is the original requested report type .
* The " report_type " is the reporting type actually used which
* also counts with report types of the fields used in selection
* criteria .
*
* The " selected " variable is used for propagating the result
* of the selection .
*/
struct selection_handle {
struct dm_report * selection_rh ;
report_type_t orig_report_type ;
report_type_t report_type ;
int selected ;
} ;
2016-05-10 16:15:48 +03:00
struct cmd_log_item {
uint32_t seq_num ;
const char * type ;
const char * context ;
const char * object_type_name ;
const char * object_name ;
const char * object_id ;
const char * object_group ;
const char * object_group_id ;
const char * msg ;
int current_errno ;
int ret_code ;
} ;
2002-12-12 23:55:49 +03:00
struct field ;
struct report_handle ;
2016-05-30 17:28:47 +03:00
struct processing_handle ;
2002-12-12 23:55:49 +03:00
typedef int ( * field_report_fn ) ( struct report_handle * dh , struct field * field ,
const void * data ) ;
2016-08-03 16:37:14 +03:00
int report_format_init ( struct cmd_context * cmd ) ;
2016-05-02 15:22:02 +03:00
2002-12-12 23:55:49 +03:00
void * report_init ( struct cmd_context * cmd , const char * format , const char * keys ,
report_type_t * report_type , const char * separator ,
2008-06-25 01:21:04 +04:00
int aligned , int buffered , int headings , int field_prefixes ,
2016-05-12 15:37:38 +03:00
int quoted , int columns_as_rows , const char * selection ,
int multiple_output ) ;
2016-06-27 11:14:17 +03:00
int report_get_single_selection ( struct cmd_context * cmd , report_type_t report_type , const char * * selection ) ;
2014-12-02 15:14:12 +03:00
void * report_init_for_selection ( struct cmd_context * cmd , report_type_t * report_type ,
const char * selection ) ;
2016-06-14 17:44:52 +03:00
int report_get_prefix_and_desc ( report_type_t report_type_id ,
const char * * report_prefix ,
const char * * report_desc ) ;
2015-02-13 12:36:06 +03:00
int report_for_selection ( struct cmd_context * cmd ,
2016-05-30 17:28:47 +03:00
struct processing_handle * parent_handle ,
2014-12-01 16:19:30 +03:00
struct physical_volume * pv ,
struct volume_group * vg ,
struct logical_volume * lv ) ;
2002-12-12 23:55:49 +03:00
void report_free ( void * handle ) ;
2014-12-02 15:14:12 +03:00
int report_object ( void * handle , int selection_only , const struct volume_group * vg ,
2015-01-14 12:31:24 +03:00
const struct logical_volume * lv , const struct physical_volume * pv ,
const struct lv_segment * seg , const struct pv_segment * pvseg ,
2015-01-20 15:16:41 +03:00
const struct lv_with_info_and_seg_status * lvdm ,
2015-01-14 12:31:24 +03:00
const struct label * label ) ;
2013-09-18 04:09:15 +04:00
int report_devtypes ( void * handle ) ;
2016-05-10 16:15:48 +03:00
int report_cmdlog ( void * handle , const char * type , const char * context ,
const char * object_type_name , const char * object_name ,
const char * object_id , const char * object_group ,
const char * object_group_id , const char * msg ,
int current_errno , int ret_code ) ;
2016-08-08 16:45:46 +03:00
void report_reset_cmdlog_seqnum ( void ) ;
2016-05-23 16:27:09 +03:00
# define REPORT_OBJECT_CMDLOG_NAME "status"
# define REPORT_OBJECT_CMDLOG_SUCCESS "success"
# define REPORT_OBJECT_CMDLOG_FAILURE "failure"
2016-05-23 16:09:05 +03:00
int report_current_object_cmdlog ( const char * type , const char * msg , int32_t ret_code ) ;
2002-12-12 23:55:49 +03:00
int report_output ( void * handle ) ;
# endif