@@ -945,6 +945,91 @@ def get_alert_tags(self, query=None, topn=1000):
945945 """ .format (where = query .where )
946946 return [{'environment' : t .environment , 'tag' : t .tag , 'count' : t .count } for t in self ._fetchall (select , query .vars , limit = topn )]
947947
948+ # FILTER TABS
949+
950+ def get_filter_tabs (self ):
951+ select = """SELECT * FROM filter_tabs ORDER BY index"""
952+ return self ._fetchall (select , {}, 'ALL' )
953+
954+ def get_filter_tab (self , name ):
955+ select = """SELECT * FROM filter_tabs WHERE name=%(name)s"""
956+ return self ._fetchone (select , {'name' : name })
957+
958+ def update_filter_tabs (self , tabs ):
959+ tab_updates = ',' .join ([
960+ f"""
961+ (%(name{ i } )s, %(index{ i } )s, %(filter{ i } )s)
962+ """ for i in range (len (tabs ))
963+ ])
964+ update = f"""
965+ UPDATE filter_tabs as tab
966+ SET name=update.name, index=update.index, filter=update.filter::jsonb
967+ FROM (VALUES
968+ { tab_updates }
969+ ) AS update(name, index, filter)
970+ WHERE tab.name = update.name
971+ RETURNING tab.*
972+ """
973+ objs = {}
974+ for i , tab in enumerate (tabs ):
975+ objs .update ({f'{ key } { i } ' : value for key , value in tab .items ()})
976+
977+ return self ._updateall (update , objs , True )
978+
979+ def update_filter_tab_indexes (self , tabs ):
980+ tab_updates = ',' .join ([
981+ f"""
982+ (%(name{ i } )s, %(index{ i } )s)
983+ """ for i in range (len (tabs ))
984+ ])
985+ update = f"""
986+ UPDATE filter_tabs as tab
987+ SET index=update.index
988+ FROM (VALUES
989+ { tab_updates }
990+ ) AS update(name, index)
991+ WHERE tab.name = update.name
992+ RETURNING tab.*
993+ """
994+ objs = {}
995+ for i , tab in enumerate (tabs ):
996+ objs .update ({f'{ key } { i } ' : value for key , value in tab .items ()})
997+
998+ return self ._updateall (update , objs , True )
999+
1000+ def delete_filter_tab (self , name ):
1001+ select = """DELETE FROM filter_tabs WHERE name=%(name)s RETURNING name"""
1002+ return self ._deleteone (select , {'name' : name })
1003+
1004+ def delete_filter_tabs (self , names ):
1005+ select = """DELETE FROM filter_tabs WHERE name=ANY(%(names)s) RETURNING name"""
1006+ return self ._deleteall (select , {'names' : names }, returning = True )
1007+
1008+ def create_filter_tab (self , filter ):
1009+ insert = """
1010+ INSERT INTO filter_tabs (name, index, filter)
1011+ VALUES (%(name)s, %(index)s, %(filter)s)
1012+ RETURNING *
1013+ """
1014+ return self ._insert (insert , vars (filter ))
1015+
1016+ def create_filter_tabs (self , tabs ):
1017+ tab_values = ',' .join ([
1018+ f"""
1019+ (%(name{ i } )s, %(index{ i } )s, %(filter{ i } )s)
1020+ """ for i in range (len (tabs ))
1021+ ])
1022+ insert = f"""
1023+ INSERT INTO filter_tabs (name, index, filter)
1024+ VALUES { tab_values }
1025+ RETURNING *
1026+ """
1027+
1028+ objs = {}
1029+ for i , tab in enumerate (tabs ):
1030+ objs .update ({f'{ key } { i } ' : value for key , value in tab .items ()})
1031+ return self ._insert_all (insert , objs )
1032+
9481033 # BLACKOUTS
9491034
9501035 def create_blackout (self , blackout ):
0 commit comments