@tartaria said in Анализ профилей для ПФ Yandex (BAS, бд на PostgreSQL):
Есть платное решение, но дорогое (2500$). Хотел бы найти аналоги.
Часто бывает, что пилить свой велосипед обходиться дороже, чем купить готовое. Да и не возможно это, если нет нужного человека в команде. А судя по постам такого человека нет в команде нет.
@tartaria said in Анализ профилей для ПФ Yandex (BAS, бд на PostgreSQL):
Что хотел получить от скрипта:
Анализ профилей: сколько дней прошло с момента присвоения куки Яндексом
Postgres может хранить данные как json/jsonb. А значит можно, чтобы получить инфу по cookies, просто использовать один sql запрос(наверное).
CREATE TABLE cookie_storage (
id SERIAL PRIMARY KEY,
cookie_data JSONB NOT NULL
);
SELECT cs.*
FROM cookie_storage cs,
jsonb_array_elements(cs.cookies) as cookie
WHERE cookie ->> 'domain' = 'example.com';
Другой вариант - создать таблицу нужного формата и вставлять туда данные, а не полностью объект json. И делать классический sql запрос с поиском по таблице. Формат cookies заранее известен, тоже вполне себе решение.
CREATE TABLE cookies (
id SERIAL PRIMARY KEY,
name VARCHAR(256),
value TEXT,
url TEXT,
domain VARCHAR(256),
path VARCHAR(256),
secure BOOLEAN,
http_only BOOLEAN,
same_site VARCHAR(20), -- Assuming a short string value for CookieSameSite type
expires TIMESTAMPTZ, -- TimeSinceEpoch can be stored as a timestamp with time zone
priority VARCHAR(20), -- Assuming a short string value for CookiePriority type, and marking as EXPERIMENTAL
same_party BOOLEAN, -- EXPERIMENTAL
source_scheme VARCHAR(20), -- Assuming a short string value for CookieSourceScheme type, and marking as EXPERIMENTAL
source_port INTEGER, -- Valid values are {-1, [1, 65535]}
partition_key TEXT, -- EXPERIMENTAL
partition_key_not_set BOOLEAN -- A boolean to indicate if the partition key is not set, instead of a nullable column
);
ALTER TABLE cookies
ADD COLUMN last_updated TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP;
-- This ensures that any update to a row will change the last_updated field to the current time
CREATE OR REPLACE FUNCTION update_last_updated_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.last_updated = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ language 'plpgsql';
CREATE TRIGGER update_cookies_last_updated
BEFORE UPDATE ON cookies
FOR EACH ROW
EXECUTE FUNCTION update_last_updated_column();
SELECT *
FROM cookies
WHERE last_updated >= CURRENT_DATE
AND last_updated < CURRENT_DATE + INTERVAL '1 day';
SELECT *
FROM cookies
WHERE last_updated >= NOW() - INTERVAL '24 hours';
@tartaria said in Анализ профилей для ПФ Yandex (BAS, бд на PostgreSQL):
Динамика нагула профиля по дням: были ли посещения сайтов в течение 24 часов на ежедневной основе в рамках конкретного профиля (чтобы бот выглядел максимально естественно в глазах Яндекс.Поиска)
Количество профилей, которые BAS прокачал за последние 24 часа (чтобы понимать, на сколько стабильно софт прокачивает профили и понимать, какое количество профилей осталось БЕЗ прокачки)
Решается примерно так же, как я написал выше.
@tartaria said in Анализ профилей для ПФ Yandex (BAS, бд на PostgreSQL):
Оповещение: если прекратилась прокачка, в течение 3–5 минут (к примеру приложение на BAS отвалилось или windows сервер завис и т.д., чтобы оперативно подключиться к серверу и исправить проблему)
Способов реализации множество. Но конкретно эта задача выглядит как преждевременная оптимизация, поначалу можно сделать скриптом, что по расписанию скрипт будет дергать статистику из базы и слать на почту уведомление с нужной информацией.
P.S.
Может быть, при больших объемах данных, имеет смысл использовать NoSql. Или, как делают многие, данные хранят в одном месте, потом они переливаются в другое, а там уже строится статистика.
Есть специальные сервисы, что устраивают pipes. И данные могут перелить и webhooks сделать.