outsider

[DroneBL] Realtime stats

Oct 30th, 2018
392
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION blacklist() RETURNS TRIGGER AS $BODY$
  2. BEGIN
  3.   IF (TG_OP='UPDATE' OR TG_OP='DELETE') THEN
  4.     IF NOT EXISTS (SELECT 1 FROM blacklist WHERE ip=OLD.ip AND type=OLD.type AND listed=1 LIMIT 1) THEN
  5.       UPDATE classes SET count=count-1 WHERE classid=OLD.type AND count > 0;
  6.     END IF;
  7.     IF NOT EXISTS (SELECT 1 FROM blacklist WHERE ip=OLD.ip AND country_code=OLD.country_code AND listed=1 LIMIT 1) THEN
  8.       UPDATE country_stats SET amount=amount-1 WHERE country_code=OLD.country_code AND amount > 0;
  9.     END IF;
  10.     IF OLD.uid_add IS NOT NULL THEN
  11.       IF (OLD.listed = 1) THEN
  12.         UPDATE rpckey SET entries_active=entries_active-1 WHERE id=OLD.uid_add AND entries_active > 0;
  13.       END IF;
  14.       UPDATE rpckey SET entries=entries-1 WHERE id=OLD.uid_add AND entries > 0;
  15.     END IF;
  16.   END IF;
  17.  
  18.   IF (TG_OP='UPDATE' OR TG_OP='INSERT') THEN
  19.     IF NOT EXISTS (SELECT 1 FROM blacklist WHERE ip=NEW.ip AND type=NEW.type AND listed=1 LIMIT 1) THEN
  20.       UPDATE classes SET count=count+1 WHERE classid=NEW.type;
  21.     END IF;
  22.  
  23.     IF NOT EXISTS (SELECT 1 FROM blacklist WHERE ip=NEW.ip AND country_code=NEW.country_code AND listed=1 LIMIT 1) THEN
  24.       IF NOT EXISTS (SELECT 1 FROM country_stats WHERE country_code = NEW.country_code LIMIT 1) THEN
  25.         INSERT INTO country_stats (country_code, amount) VALUES (NEW.country_code, 1);
  26.       ELSE
  27.         UPDATE country_stats SET amount=amount+1 WHERE country_code=NEW.country_code;
  28.       END IF;
  29.     END IF;
  30.  
  31.     IF NEW.uid_add IS NOT NULL THEN
  32.       IF (NEW.listed = 1) THEN
  33.         UPDATE rpckey SET entries_active=entries_active+1 WHERE id=NEW.uid_add;
  34.       END IF;
  35.       UPDATE rpckey SET entries=entries+1 WHERE id=NEW.uid_add;
  36.     END IF;
  37.     RETURN NEW;
  38.   END IF;
  39.  
  40.   RETURN OLD;
  41. END;
  42. $BODY$ LANGUAGE plpgsql;
  43.  
  44. DROP TRIGGER IF EXISTS blacklist_update on blacklist;
  45. CREATE TRIGGER blacklist_update AFTER UPDATE ON blacklist FOR EACH ROW EXECUTE PROCEDURE blacklist();
  46. DROP TRIGGER IF EXISTS blacklist_insert on blacklist;
  47. CREATE TRIGGER blacklist_insert AFTER INSERT ON blacklist FOR EACH ROW EXECUTE PROCEDURE blacklist();
  48. DROP TRIGGER IF EXISTS blacklist_delete on blacklist;
  49. CREATE TRIGGER blacklist_delete AFTER DELETE ON blacklist FOR EACH ROW EXECUTE PROCEDURE blacklist();
Advertisement
Add Comment
Please, Sign In to add comment