Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ java-приложение для работы с блокировками в С
* Обновлены библиотеки
* Исправлена уязвимость при чтении XML
* Обновлены action-ы в gitHubActions
* Прекращена поддержка PostgreSQL версий ниже 10, удалена настройка для отображения типа процесса

1.9.0

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

pgSqlBlocks - это standalone приложение, написанное на языке программирования Java, которое позволяет легко ориентироваться среди процессов и получать информацию о блокировках и ожидающих запросов в СУБД PostgreSQL. Отображается информация о состоянии подключения к БД, а также информация о процессах в БД.

Поддерживается работа с PostgreSQL 10+.

Требуется Java JRE версии 1.8 и выше для вашей платформы.

### Сборка, запуск тестов, запуск приложения
Expand All @@ -23,8 +25,6 @@ pgSqlBlocks - это standalone приложение, написанное на

### Запросы

Для получения всех процессов сервера, включая или исключая idle(бездействующие), используется [скрипт](src/main/resources/query_with_idle.sql) или [скрипт](src/main/resources/query.sql) соответственно.

Для версии PostgreSQL 10 и выше, для получения всех процессов сервера, включая или исключая idle(бездействующие), используется [скрипт](src/main/resources/query_with_idle_10.sql) или [скрипт](src/main/resources/query_10.sql) соответственно.

Уничтожается процесс командой: _select pg_terminate_backend(?);_
Expand Down
18 changes: 0 additions & 18 deletions src/main/java/ru/taximaxim/pgsqlblocks/common/DBQueries.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,10 @@ public final class DBQueries {

private static String versionQuery;
private static String processesQuery;
private static String processesQueryForTen;
private static String processesQueryWithIdle;
private static String processesQueryWithIdleForTen;

private static final String PROCESSES_QUERY_FILE_NAME = "query.sql";
private static final String PROCESSES_QUERY_10_FILE_NAME = "query_10.sql";
private static final String PROCESSES_QUERY_WITH_IDLE_FILE_NAME = "query_with_idle.sql";
private static final String PROCESSES_QUERY_WITH_IDLE_10_FILE_NAME = "query_with_idle_10.sql";
private static final String PG_SERVER_VERSION_QUERY_FILE_NAME = "version.sql";

public static final String PG_TERMINATE_BACKEND_QUERY = "select pg_terminate_backend(?);";
Expand All @@ -52,27 +48,13 @@ public static synchronized String getProcessesQuery() {
return processesQuery;
}

public static synchronized String getProcessesQueryForTen() {
if (processesQueryForTen == null) {
processesQueryForTen = loadQuery(PROCESSES_QUERY_10_FILE_NAME);
}
return processesQueryForTen;
}

public static synchronized String getProcessesQueryWithIdle() {
if (processesQueryWithIdle == null) {
processesQueryWithIdle = loadQuery(PROCESSES_QUERY_WITH_IDLE_FILE_NAME);
}
return processesQueryWithIdle;
}

public static synchronized String getProcessesQueryWithIdleForTen() {
if (processesQueryWithIdleForTen == null) {
processesQueryWithIdleForTen = loadQuery(PROCESSES_QUERY_WITH_IDLE_10_FILE_NAME);
}
return processesQueryWithIdleForTen;
}

public static synchronized String getVersionQuery(){
if (versionQuery == null) {
versionQuery = loadQuery(PG_SERVER_VERSION_QUERY_FILE_NAME);
Expand Down
14 changes: 3 additions & 11 deletions src/main/java/ru/taximaxim/pgsqlblocks/common/models/DBModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,16 @@ public class DBModel {
private final String dbGroup;
private final String user;
private final String password;
private final boolean readBackendType;
private final boolean enabled;

public DBModel(String name, String host, String port, String databaseName, String dbGroup,
String user, String password, boolean readBackendType, boolean enabled) {
String user, String password, boolean enabled) {
this.name = name;
this.host = host;
this.port = port;
this.databaseName = databaseName;
this.user = user;
this.password = password;
this.readBackendType = readBackendType;
this.enabled = enabled;
this.dbGroup = dbGroup;
}
Expand All @@ -54,10 +52,6 @@ public String getPort() {
return port;
}

public boolean isReadBackendType() {
return readBackendType;
}

public String getDatabaseName() {
return databaseName;
}
Expand All @@ -84,7 +78,7 @@ public boolean isEnabled() {

public DBModel copy() {
return new DBModel(this.name, this.host, this.port, this.databaseName, this.dbGroup,
this.user, this.password, this.readBackendType, this.enabled);
this.user, this.password, this.enabled);
}

@Override
Expand All @@ -97,7 +91,6 @@ public String toString() {
", dbGroup='" + dbGroup + '\'' +
", user='" + user + '\'' +
", password='" + password + '\'' +
", readBackendType='" + readBackendType + '\'' +
", enabled=" + enabled +
'}';
}
Expand All @@ -121,12 +114,11 @@ public boolean equals(Object obj) {
&& Objects.equals(name, other.name)
&& Objects.equals(password, other.password)
&& Objects.equals(port, other.port)
&& readBackendType == other.readBackendType
&& Objects.equals(user, other.user);
}

@Override
public int hashCode() {
return Objects.hash(databaseName, dbGroup, enabled, host, name, password, port, readBackendType, user);
return Objects.hash(databaseName, dbGroup, enabled, host, name, password, port, user);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ public class AddDatabaseDialog extends Dialog {
protected Text userText;
protected Text passwordText;
protected Text databaseNameText;
protected Button readBackendTypeButton;
protected Button enabledButton;
protected ComboViewer cmdDbGroup;
private final Set<String> dbGroup;
Expand Down Expand Up @@ -138,10 +137,6 @@ protected Control createDialogArea(Composite parent) {

GridData checkGd = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);

readBackendTypeButton = new Button(container, SWT.CHECK);
readBackendTypeButton.setText(resourceBundle.getString("read_backend_type"));
readBackendTypeButton.setLayoutData(checkGd);

enabledButton = new Button(container, SWT.CHECK);
enabledButton.setText(resourceBundle.getString("connect_automatically"));
enabledButton.setLayoutData(checkGd);
Expand All @@ -158,7 +153,6 @@ protected void okPressed() {
String dbGroup = cmdDbGroup.getCombo().getText();
String user = userText.getText();
String password = passwordText.getText();
boolean readBackendType = readBackendTypeButton.getSelection();
boolean enabled = enabledButton.getSelection();
if (name.isEmpty()) {
displayError("missing_connection_name");
Expand All @@ -175,7 +169,7 @@ protected void okPressed() {
}

createdModel = new DBModel(name, host, port, databaseName, dbGroup, user,
password, readBackendType, enabled);
password, enabled);

super.okPressed();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ protected Control createDialogArea(Composite parent) {
cmdDbGroup.getCombo().setText(editedModel.getDbGroup());
userText.setText(editedModel.getUser());
passwordText.setText(editedModel.getPassword());
readBackendTypeButton.setSelection(editedModel.isReadBackendType());
enabledButton.setSelection(editedModel.isEnabled());
return dialogArea;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -390,12 +390,7 @@ private void processesLoaded(List<DBProcess> loadedProcesses) {
}

private String getProcessesQuery() {
boolean isTen = model.isReadBackendType();
if (settings.getShowIdle()) {
return isTen ? DBQueries.getProcessesQueryWithIdleForTen() : DBQueries.getProcessesQueryWithIdle();
} else {
return isTen ? DBQueries.getProcessesQueryForTen() : DBQueries.getProcessesQuery();
}
return settings.getShowIdle() ? DBQueries.getProcessesQueryWithIdle() : DBQueries.getProcessesQuery();
}

public void addListener(DBControllerListener listener) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ public class DBModelsXmlStore extends XmlStore<DBModel> {
private static final String ELEMENT_DB_GROUP_NAME = "dbgroup";
private static final String ELEMENT_USER_TAG_NAME = "user";
private static final String ELEMENT_PASSWORD_TAG_NAME = "passwd";
private static final String ELEMENT_READ_BACKEND_TAG_NAME = "readbt";
private static final String ELEMENT_ENABLED_TAG_NAME = "enabled";

public DBModelsXmlStore() {
Expand All @@ -59,7 +58,6 @@ protected DBModel parseElement(Node node) {
Node dbGroupNode = element.getElementsByTagName(ELEMENT_DB_GROUP_NAME).item(0);
Node userNode = element.getElementsByTagName(ELEMENT_USER_TAG_NAME).item(0);
Node passwordNode = element.getElementsByTagName(ELEMENT_PASSWORD_TAG_NAME).item(0);
Node readBackendNode = element.getElementsByTagName(ELEMENT_READ_BACKEND_TAG_NAME).item(0);
Node enabledNode = element.getElementsByTagName(ELEMENT_ENABLED_TAG_NAME).item(0);

String name = getTextContentFromNode(nameNode);
Expand All @@ -69,10 +67,9 @@ protected DBModel parseElement(Node node) {
String dbGroup = getTextContentFromNode(dbGroupNode);
String user = getTextContentFromNode(userNode);
String password = getTextContentFromNode(passwordNode);
boolean readBackend = readBackendNode != null && Boolean.parseBoolean(getTextContentFromNode(readBackendNode));
boolean enabled = enabledNode != null && Boolean.parseBoolean(getTextContentFromNode(enabledNode));

return new DBModel(name, host, port, databaseName, dbGroup, user, password, readBackend, enabled);
return new DBModel(name, host, port, databaseName, dbGroup, user, password, enabled);
}

@Override
Expand All @@ -88,7 +85,6 @@ protected void appendChildren(Document xml, Element root, List<DBModel> list) {
createSubElement(xml, rootElement, ELEMENT_DB_GROUP_NAME, model.getDbGroup());
createSubElement(xml, rootElement, ELEMENT_USER_TAG_NAME, model.getUser());
createSubElement(xml, rootElement, ELEMENT_PASSWORD_TAG_NAME, model.getPassword());
createSubElement(xml, rootElement, ELEMENT_READ_BACKEND_TAG_NAME, String.valueOf(model.isReadBackendType()));
createSubElement(xml, rootElement, ELEMENT_ENABLED_TAG_NAME, String.valueOf(model.isEnabled()));
}
}
Expand Down
5 changes: 2 additions & 3 deletions src/main/resources/query.sql
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ SELECT
application_name,
datname,
usename,
CASE WHEN client_port=-1 THEN 'local pipe'
backend_type,
CASE WHEN client_port=-1 THEN 'local pipe'
WHEN length(client_hostname)>0 THEN client_hostname||':'||client_port
ELSE textin(inet_out(client_addr))||':'||client_port
END AS client,
Expand All @@ -39,8 +40,6 @@ SELECT
state,
date_trunc('second', state_change) AS state_change,
blocks.pid AS blockedby,
/* deprecated
null::text AS blocking_locks,*/
blocks.locktype AS locktype,
blocks.relation AS relation,
blocks.granted AS granted,
Expand Down
60 changes: 0 additions & 60 deletions src/main/resources/query_10.sql

This file was deleted.

3 changes: 1 addition & 2 deletions src/main/resources/query_with_idle.sql
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ SELECT
application_name,
datname,
usename,
backend_type,
CASE WHEN client_port=-1 THEN 'local pipe'
WHEN length(client_hostname)>0 THEN client_hostname||':'||client_port
ELSE textin(inet_out(client_addr))||':'||client_port
Expand All @@ -39,8 +40,6 @@ SELECT
state,
date_trunc('second', state_change) AS state_change,
blocks.pid AS blockedby,
/* deprecated
null::text AS blocking_locks,*/
blocks.locktype AS locktype,
blocks.relation AS relation,
blocks.granted AS granted,
Expand Down
57 changes: 0 additions & 57 deletions src/main/resources/query_with_idle_10.sql

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class DBModelTest {

@Test
public void copyTest() {
DBModel model1 = new DBModel("test", "", "host", "port", "dbName", "user", "password", true, false);
DBModel model1 = new DBModel("test", "", "host", "port", "dbName", "user", "password", false);
DBModel model2 = model1.copy();

assertEquals(model1, model2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ public static void initialize() {
.withExposedPorts(5432);
postgres.start();
DBModel model = new DBModel("TestDbc", REMOTE_HOST, postgres.getFirstMappedPort().toString(),
REMOTE_DB, "", REMOTE_USERNAME, REMOTE_PASSWORD, true, true);
REMOTE_DB, "", REMOTE_USERNAME, REMOTE_PASSWORD, true);
testDbc = new DBController(Settings.getInstance(), model, null);
testDbc.connectAsync();
testDbc.addListener(LISTENER);
Expand Down