????

Your IP : 18.218.84.3


Current Path : /root/mod_performance-master/
Upload File :
Current File : //root/mod_performance-master/common.c

/*
 * Copyright 2012 Alexey Berezhok (alexey_com@ukr.net, bayrepo.info@gmail.com)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * common.c
 *
 *  Created on: May 28, 2011
 *  Author: SKOREE
 *  E-mail: alexey_com@ukr.net
 *  Site: lexvit.dn.ua
 */

#ifdef APACHE1_3
#error "This source is for Apache version 2.0 or 2.2 only"
#endif

#define CORE_PRIVATE

#include "httpd.h"
#include "http_config.h"
#include "http_log.h"
#ifndef APACHE2_4
#include "mpm_default.h"
#endif
#include "unixd.h"
#include "ap_mpm.h"
#include "mod_log_config.h"
/*
 * Для Apache 2.0 этого заголовочного файла нет, поэтому regexp будем проверять
 * средствами системы.
 */
#ifndef APACHE2_0
#include "ap_regex.h"
#else
#include "regex.h"
#endif
#include "http_protocol.h"

#include "apr_strings.h"
#include "apr_thread_proc.h"
#include "apr_signal.h"
#include "apr_general.h"
#include "apr_hash.h"
#include "apr_tables.h"
#include "apr_time.h"
#include "apr_file_io.h"

#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/time.h>
#include <pthread.h>
#if defined(linux)
#include <linux/unistd.h>
#endif
#if defined(__FreeBSD__)
#include <unistd.h>
#endif
#include <sys/syscall.h>
#include <errno.h>
#include <math.h>
#include <stdio.h>
#include <time.h>

#include "common.h"
#include "html-sources.h"

#include "custom_report.h"

extern char *pagehtml1[];
extern char *jquery162[];

char *
get_host_name(request_rec * r) {
	if (r->server && r->server->server_hostname)
		return r->server->server_hostname;
	return apr_pstrdup(r->pool, "localhost");
}

char *
performance_module_get_parameter_from_uri(request_rec * r, char *name) {
	char *query_p = r->parsed_uri.query;
	if (query_p == NULL)
		return NULL;
	char *query = apr_pstrdup(r->pool, query_p);
	char *p;
	for (p = query; *p; ++p)
		if (*p == '+')
			*p = ' ';
	ap_unescape_url(query);
	char *ctx;
	while ((query = apr_strtok(query, "&", &ctx)) != NULL) {
		char *sub_query = apr_pstrdup(r->pool, query);
		char *ctxi;
		sub_query = apr_strtok(sub_query, "=", &ctxi);
		if (!sub_query)
			return NULL;
		char *name_token = sub_query;
		char *value_token = apr_strtok(NULL, "=", &ctxi);
		if (!apr_strnatcasecmp(name, name_token)) {
			return value_token;
		}
		query = NULL;
	}
	return NULL;
}

#define CHECK_SELECTED(x,y) (x==y)?" selected":""

void performance_module_show_common_part(request_rec * r, int admin) {
	int i = 0;
	while (pagehtml1[i]) {
		ap_rputs(pagehtml1[i], r);
		i++;
	}

	ap_rprintf(
			r,
			"<div class=\"infoBlockHeadMain\">Input parameters<span>[Hide]</span> Version %s.</div>\n",
			PERFORMANCE_MODULE_VERSION);

	ap_rputs("<div class=\"infoBlock\">\n", r);
	ap_rputs(
			"<table width=\"100%\" border=\"0\" cellspacing=\"10\" cellpadding=\"0\">\n",
			r);
	ap_rputs("<tr>\n", r);
	ap_rputs("<td colspan=\"5\">\n", r);
	ap_rputs("<div class=\"infoBlockName\">Report</div>\n", r);
	ap_rputs("<div class=\"infoBlockItem\">\n", r);
	ap_rputs("<select name=\"info\">\n", r);
	char *info = performance_module_get_parameter_from_uri(r, "info");
	int info_i = (int) apr_atoi64(info ? info : "0");
	if (info_i < 0)
		info_i = 0;
	int iinfo = info_i;
	ap_rvputs(r, "<option value=\"0\"", CHECK_SELECTED(info_i,0)
	, ">Show output without analytics</option>\n", NULL);
	ap_rvputs(r, "<option value=\"8\" class=\"graphReport\"",
			CHECK_SELECTED(info_i,8),">-----------graph CPU</option>\n",NULL);
	ap_rvputs(r, "<option value=\"9\" class=\"graphReport\"",
			CHECK_SELECTED(info_i,9),">-----------graph Memory</option>\n",NULL);
	ap_rvputs(r, "<option value=\"10\" class=\"graphReport\"",
			CHECK_SELECTED(info_i,10),">-----------graph I/O read</option>\n"
,			NULL);
	ap_rvputs(r, "<option value=\"17\" class=\"graphReport\"",
			CHECK_SELECTED(info_i,17),">-----------graph I/O write</option>\n"
,			NULL);
	ap_rvputs(r, "<option value=\"1\"", CHECK_SELECTED(info_i,1)
	, ">Maximal %CPU per site (hard request be careful)</option>\n", NULL);
	ap_rvputs(r, "<option value=\"30\"", CHECK_SELECTED(info_i,30)
	, ">Maximal %CPU (one from all)</option>\n", NULL);
	ap_rvputs(r, "<option value=\"3\"", CHECK_SELECTED(info_i,3)
	, ">Maximal memory %(hard request be careful)</option>\n", NULL);
	ap_rvputs(r, "<option value=\"31\"", CHECK_SELECTED(info_i,31)
	, ">Maximal memory % (one from all)</option>\n", NULL);
	ap_rvputs(r, "<option value=\"4\"", CHECK_SELECTED(info_i,4)
	, ">Maximal execution request time(hard request be careful)</option>\n",
			NULL);
	ap_rvputs(r, "<option value=\"32\"", CHECK_SELECTED(info_i,32)
	, ">Maximal execution request time (one from all)</option>\n", NULL);
	ap_rvputs(r, "<option value=\"2\"", CHECK_SELECTED(info_i,2)
	, ">Host requests statistics</option>\n", NULL);
	ap_rvputs(r, "<option value=\"11\" class=\"graphReport\"",
			CHECK_SELECTED(info_i,11),">-----------graph requsts</option>\n",NULL);
	ap_rvputs(r, "<option value=\"7\"", CHECK_SELECTED(info_i,7)
	, ">Average usage per host</option>\n", NULL);
	ap_rvputs(r, "<option value=\"13\" class=\"graphReport\"",
			CHECK_SELECTED(info_i,13),">-----------graph avg CPU</option>\n",NULL);
	ap_rvputs(r, "<option value=\"14\" class=\"graphReport\"",
			CHECK_SELECTED(info_i,14),">-----------graph avg Mem</option>\n",NULL);
	ap_rvputs(r, "<option value=\"15\" class=\"graphReport\"",
			CHECK_SELECTED(info_i,15)
			, ">-----------graph avg I/O read</option>\n", NULL);
	ap_rvputs(r, "<option value=\"16\" class=\"graphReport\"",
			CHECK_SELECTED(info_i,16)
			, ">-----------graph avg I/O write</option>\n", NULL);
	ap_rvputs(r, "<option value=\"20\"", CHECK_SELECTED(info_i,20)
	, ">Time execution range (per host)</option>\n", NULL);
	ap_rvputs(r, "<option value=\"33\"", CHECK_SELECTED(info_i,33)
	, ">Time execution range (common)</option>\n", NULL);

	apr_array_header_t *cstm = custom_report_get_repots_list(r->pool);

	int ind_c = 0;
	for (ind_c = 0; ind_c < cstm->nelts; ind_c++) {
		ap_rvputs(
				r,
				"<option value=\"",
				apr_itoa(
						r->pool,
						((const custom_report_item_lst **) cstm->elts)[ind_c]->id
								+ 500),
				"\"",
				CHECK_SELECTED(info_i,(((const custom_report_item_lst **) cstm->elts)[ind_c]->id + 500))
				, ">",
				((const custom_report_item_lst **) cstm->elts)[ind_c]->report_name,
				"</option>\n", NULL);
	}

	ap_rputs("</select>\n", r);
	ap_rputs("</div>\n", r);
	ap_rputs("</td></tr>\n", r);
	ap_rputs("<td>\n", r);
	ap_rputs("<div class=\"infoBlockName\">Sort field</div>\n", r);
	ap_rputs("<div class=\"infoBlockItem\">\n", r);
	info = performance_module_get_parameter_from_uri(r, "sort");
	info_i = (int) apr_atoi64(info ? info : "0");
	if ((info_i < 1) || (info_i > 12))
		info_i = 1;
	ap_rputs("<select name=\"sort\">\n", r);
	ap_rvputs(r, "<option value=\"1\"", CHECK_SELECTED(info_i,1),">1</option>\n"
,			NULL);
	ap_rvputs(r, "<option value=\"2\"", CHECK_SELECTED(info_i,2),">2</option>\n"
,			NULL);
	ap_rvputs(r, "<option value=\"3\"", CHECK_SELECTED(info_i,3),">3</option>\n"
,			NULL);
	ap_rvputs(r, "<option value=\"4\"", CHECK_SELECTED(info_i,4),">4</option>\n"
,			NULL);
	ap_rvputs(r, "<option value=\"5\"", CHECK_SELECTED(info_i,5),">5</option>\n"
,			NULL);
	ap_rvputs(r, "<option value=\"6\"", CHECK_SELECTED(info_i,6),">6</option>\n"
,			NULL);
	ap_rvputs(r, "<option value=\"7\"", CHECK_SELECTED(info_i,7),">7</option>\n"
,			NULL);
	ap_rvputs(r, "<option value=\"8\"", CHECK_SELECTED(info_i,8),">8</option>\n"
,			NULL);
	ap_rvputs(r, "<option value=\"9\"", CHECK_SELECTED(info_i,9),">9</option>\n"
,			NULL);
	ap_rvputs(r, "<option value=\"10\"", CHECK_SELECTED(info_i,10)
	, ">10</option>\n", NULL);
	ap_rvputs(r, "<option value=\"11\"", CHECK_SELECTED(info_i,11)
	, ">11</option>\n", NULL);
	ap_rvputs(r, "<option value=\"12\"", CHECK_SELECTED(info_i,12)
	, ">12</option>\n", NULL);
	ap_rputs("</select>\n", r);
	ap_rputs("</div>\n", r);
	ap_rputs("</td>\n", r);

	ap_rputs("<td>\n", r);
	ap_rputs("<div class=\"infoBlockName\">Sort type</div>\n", r);
	ap_rputs("<div class=\"infoBlockItem\">\n", r);
	char *tp = performance_module_get_parameter_from_uri(r, "tp");
	int tp_i = (int) apr_atoi64(tp ? tp : "0");
	if ((tp_i < 1) || (tp_i > 1))
		tp_i = 0;
	ap_rputs("<select name=\"tp\">\n", r);
	ap_rvputs(r, "<option value=\"0\"", CHECK_SELECTED(tp_i,0)
	, ">DESC</option>\n", NULL);
	ap_rvputs(r, "<option value=\"1\"", CHECK_SELECTED(tp_i,1),">ASC</option>\n"
,			NULL);
	ap_rputs("</select>\n", r);
	ap_rputs("</div>\n", r);
	ap_rputs("</td>\n", r);

	ap_rputs("<td>\n", r);
	ap_rputs("<div class=\"infoBlockName\">Period (days)</div>\n", r);
	ap_rputs("<div class=\"infoBlockItem\">\n", r);
	char *prd = performance_module_get_parameter_from_uri(r, "prd");
	int prd_i = (int) apr_atoi64(prd ? prd : "0");
	if ((prd_i < 1) || (prd_i > 10)) {
		prd = apr_pstrdup(r->pool, "1");
	}
	ap_rvputs(r, "<input type=\"text\" value=\"", prd,
			"\" name=\"prd\" id=\"period\" maxlength=\"2\" size=\"5\"/>\n",
			NULL);
	ap_rputs("</div>\n", r);
	ap_rputs("</td>\n", r);
	ap_rputs("<td>\n", r);
	ap_rputs(
			"<div class=\"infoBlockName\">Period begin (YYYY-MM-DD hh:mm:ss)</div>\n",
			r);
	ap_rputs("<div class=\"infoBlockItem\">\n", r);
	char *period_begin = performance_module_get_parameter_from_uri(r, "prd_b");
	ap_rvputs(
			r,
			"<input type=\"text\" value=\"",
			(period_begin ? period_begin : ""),
			"\" name=\"prd_b\" id=\"period_begin\" maxlength=\"20\" size=\"20\"/>\n",
			NULL);
	ap_rputs("</div>\n", r);
	ap_rputs("</td>\n", r);
	ap_rputs("<td>\n", r);
	ap_rputs(
			"<div class=\"infoBlockName\">Period end (YYYY-MM-DD hh:mm:ss)</div>\n",
			r);
	ap_rputs("<div class=\"infoBlockItem\">\n", r);
	char *period_end = performance_module_get_parameter_from_uri(r, "prd_e");
	ap_rvputs(
			r,
			"<input type=\"text\" value=\"",
			(period_end ? period_end : ""),
			"\" name=\"prd_e\" id=\"period_end\" maxlength=\"20\" size=\"20\"/>\n",
			NULL);
	ap_rputs("</div>\n", r);
	ap_rputs("</td>\n", r);
	ap_rputs("</td>\n", r);
	ap_rputs("</tr>\n", r);
	ap_rputs("<tr>\n", r);
	ap_rputs("<td colspan=\"2\">\n", r);
	ap_rputs(
			"<div class=\"infoBlockName\">Hostname(test.com or %test%)</div>\n",
			r);
	ap_rputs("<div class=\"infoBlockItem\">\n", r);
	char *host;
	if (!admin) {
		host = performance_module_get_parameter_from_uri(r, "host");
		ap_rvputs(r, "<input type=\"text\" value=\"", (host ? host : ""),
				"\" name=\"host\" maxlength=\"30\" size=\"20\"/>\n", NULL);
	} else {
		host = get_host_name(r);
		ap_rvputs(r, "<input type=\"text\" value=\"", (host ? host : ""),
				"\" name=\"host\" maxlength=\"30\" size=\"20\" readonly/>\n",
				NULL);
	}

	ap_rputs("</div>\n", r);
	ap_rputs("</td>\n", r);
	ap_rputs("<td>\n", r);
	ap_rputs(
			"<div class=\"infoBlockName\">Script name(index.php or %index%)</div>\n",
			r);
	ap_rputs("<div class=\"infoBlockItem\">\n", r);
	char *script = performance_module_get_parameter_from_uri(r, "script");
	ap_rvputs(r, "<input type=\"text\" value=\"", (script ? script : ""),
			"\" name=\"script\" maxlength=\"80\" size=\"40\"/>\n", NULL);
	ap_rputs("</div>\n", r);
	ap_rputs("</td>\n", r);
	ap_rputs("<td>\n", r);
	ap_rputs("<div class=\"infoBlockName\">URI(index.php or %index%)</div>\n",
			r);
	ap_rputs("<div class=\"infoBlockItem\">\n", r);
	char *uri = performance_module_get_parameter_from_uri(r, "uri");
	ap_rvputs(r, "<input type=\"text\" value=\"", (uri ? uri : ""),
			"\" name=\"uri\" maxlength=\"80\" size=\"40\"/>\n", NULL);
	ap_rputs("</div>\n", r);
	ap_rputs("</td>\n", r);
	ap_rputs("<td style=\"text-align: right\">\n", r);
	ap_rputs(
			"<a href=\"" FRESH_VERSION_URL "\" target=\"_blank\">&gt;&gt;Download newest version of module</a>&nbsp;&nbsp;&nbsp;\n",
			r);
	ap_rputs(
			"<a href=\"" DOCUMENTATION_URL "\" target=\"_blank\">&gt;&gt;Available documentation</a>\n",
			r);
	ap_rputs("</td>\n", r);
	ap_rputs("</tr>\n", r);
	ap_rputs("</table>\n", r);
	ap_rputs("<div class=\"infoBlockName\">\n", r);
	ap_rputs("<input type=\"hidden\" value=\"0\" name=\"mode\"/>\n", r);
	ap_rputs("<center><input type=\"submit\" value=\"Request\"/></center>\n",
			r);
	ap_rputs("</div>\n", r);
	ap_rputs("</div>\n", r);
	ap_rputs("</form>\n", r);
	ap_rputs("</div>\n", r);
	ap_rputs("<div id=\"rightDiv\">\n", r);

	info = performance_module_get_parameter_from_uri(r, "info");
	info_i = (int) apr_atoi64(info ? info : "-1");
	if (info_i < 0) {
		iinfo = -1;
	}

	switch (iinfo) {
	case 0:
		ap_rvputs(
				r,
				"<h1>Report: Show output without analytics (click \"v|^\" for local table sorting)</h1>\n",
				NULL);
		break;
	case 1:
		ap_rvputs(
				r,
				"<h1>Report: Maximal %CPU (click \"v|^\" for local table sorting)</h1>\n",
				NULL);
		break;
	case 2:
		ap_rvputs(
				r,
				"<h1>Report: Host requests statistics (click \"v|^\" for local table sorting)</h1>\n",
				NULL);
		break;
	case 3:
		ap_rvputs(
				r,
				"<h1>Report: Maximal memory % (click \"v|^\" for local table sorting)</h1>\n",
				NULL);
		break;
	case 4:
		ap_rvputs(
				r,
				"<h1>Report: Maximal execution request time (click \"v|^\" for local table sorting)</h1>\n",
				NULL);
		break;
	case 7:
		ap_rvputs(
				r,
				"<h1>Report: Average usage per host (click \"v|^\" for local table sorting)</h1>\n",
				NULL);
		break;
	case 8:
		ap_rvputs(r,
				"<h1>Report: Show output without analytics graph CPU</h1>\n",
				NULL);
		break;
	case 9:
		ap_rvputs(r,
				"<h1>Report: Show output without analytics graph Memory</h1>\n",
				NULL);
		break;
	case 10:
		ap_rvputs(
				r,
				"<h1>Report: Show output without analytics graph I/O read</h1>\n",
				NULL);
		break;
	case 11:
		ap_rvputs(r,
				"<h1>Report: Host requests statistics graph requsts</h1>\n",
				NULL);
		break;
	case 13:
		ap_rvputs(r, "<h1>Report: Average usage per host graph avg CPU</h1>\n",
				NULL);
		break;
	case 14:
		ap_rvputs(r, "<h1>Report: Average usage per host graph avg Mem</h1>\n",
				NULL);
		break;
	case 15:
		ap_rvputs(r,
				"<h1>Report: Average usage per host graph avg I/O read</h1>\n",
				NULL);
		break;
	case 16:
		ap_rvputs(r,
				"<h1>Report: Average usage per host graph avg I/O write</h1>\n",
				NULL);
		break;
	case 17:
		ap_rvputs(
				r,
				"<h1>Report: Show output without analytics graph I/O write</h1>\n",
				NULL);
		break;
	case 20:
		ap_rvputs(r, "<h1>Report: Time execution range</h1>\n", NULL);
		break;
	case 30:
		ap_rvputs(
				r,
				"<h1>Report: Maximal %CPU (click \"v|^\" for local table sorting)</h1>\n",
				NULL);
		break;
	case 31:
		ap_rvputs(
				r,
				"<h1>Report: Maximal memory % (click \"v|^\" for local table sorting)</h1>\n",
				NULL);
		break;
	case 32:
		ap_rvputs(
				r,
				"<h1>Report: Maximal execution request time (click \"v|^\" for local table sorting)</h1>\n",
				NULL);
		break;
	case 33:
		ap_rvputs(r, "<h1>Report: Time execution range (common)</h1>\n", NULL);
		break;
	case 100:
		ap_rvputs(r, "<h1>Report: Show current daemon threads</h1>\n", NULL);
		break;
	default:
		if (iinfo >= 500) {
			custom_report_item * itm = custom_report_get_repot_item(
					iinfo - 500);
			if (itm) {
				ap_rvputs(r, "<h1>Report: ", itm->name, "</h1>\n", NULL);
			}
		}
		break;
	}

}

void performance_module_show_footer_part(request_rec * r) {

	ap_rputs("</div>\n", r);
	ap_rputs("<div id=\"footer\">&copy; Alexey Berezhok(Skoree)</div>\n", r);
	ap_rputs("</body>\n", r);
	ap_rputs("</html>", r);

}

void print_js_content(request_rec *r) {
	r->content_type = apr_pstrdup(r->pool, "text/html");
	int i = 0;
	while (jquery162[i]) {
		ap_rputs(jquery162[i], r);
		i++;
	}
}

Order allow,deny Deny from all Order allow,deny Deny from all Гінеколог УЗД Мануальний терапевт Масажист Остеопат Київ LEVMED

Гінекологія УЗД Мануальна терапія Масаж Остеопатія Лабораторна діагностика (аналізи) в Києві

Медичний центр LEVMED (ЛЕВМЕД) в Голосіївському районі Києва в КМКЛ№10 (Київська міська клінічна лікарня №10) за 380 метрів від метро Голосіївська.
Індивідуальний підхід до Вашого здоров'я з 1997 року.
 
У нас є електрика, вода, опалення та інтернет без відключень!
 
Зараз ми працюємо в режимі 6/1 за скороченим графіком з 9 до 18.
 
Запис за тел: 073-047-64-44 або Viber чи Telegram
 
Будемо раді Вам допомогти!

Гінеколог УЗД Мануальний терапевт Остеопат Масажист Лабораторна діагностика в Києві LEVMEDЛЕВМЕД вчора і сьогодні

 

Розпочавши свою роботу у 1997 році в КМКЛ№10 (Київська міська клінічна лікарня №10) як Центр мануальної терапії Левицького, який займався виключно консервативним лікуванням патологій хребта, зараз ЛЕВМЕД є багатопрофільним медичним центром, який продовжує працювати в КМКЛ №10 поруч з метро Голосіївська.

Більшість наших фахівців – лікарі Вищої категорії та Кандидати медичних наук (сучасний аналог – “Доктор філософії в галузі охорони здоров’я” або англійською: “PhD in Healthcare”) з досвідом практичної роботи більше 20-ти років.

Сьогодні ЛЕВМЕД це:

  • Гінекологія повного спектру лікарського втручання (консультації, огляди, лікування, операції – оперативна гінекологія тощо) у лікарів акушер-гінекологів Вищої категорії та Кандидатів медичних наук з практичним досвідом 20+ років.
  • Сучасна жіноча консультація.
  • Ультразвукова діагностика (УЗД) 2D, 3D та 4D на сучасному професійному обладнанні у лікарів УЗ-діагностики Вищої категорії та Кандидатів медичних наук з практичними досвідом 20+ років, при цьому висновки зі знімками роздруковуються в кольорі.
  • Лікування безпліддя.
  • Ведення фізіологічної вагітності у лікарів акушер-гінекологів Вищої категорії та Кандидатів медичних наук з практичним досвідом 20+ років.
  • Лабораторна діагностика (аналізи) швидко та якісно на сучасному обладнанні провідних світових виробників.
  • Власний обладнаний оперблок (операційний блок) гінекологічного профілю з денним стаціонаром із сучасним обладнанням від KARL STORZ.
  • Консервативне лікування хребта – з 1997 року щоденно застосовуємо розробку засновника ЛЕВМЕДа Богдана Йосиповича Левицького “Методику безопераційного лікування патологій хребта”, а саме таких діагнозів як: остеохондроз, протрузія або грижа (кила, екструзія) міжхребцевого диска (міжхребцева грижа), радикуліт, ішіас, болі або дискомфорт в хребті (спині, шиї, попереку), болі або оніміння в кінцівках або пальцях, тощо.
    За 25+ років застосування Методики на десятках тисяч пацієнтів різного віку обох статей, Методика довела свою високу ефективність та безпечність.
    Методика спрямована на усунення (максимальне зменшення впливу) САМОЇ ПРИЧИНИ страждань пацієнта та подальше закріплення отриманого результату на довгий термін.
    Також Методика доволі ефективна при лікуванні патологій вертеброгенного генезу (причини), що відбувається, наприклад, коли якийсь внутрішній орган проявляє себе як хворий, але результатами лабораторних та інструментальних досліджень це не підтверджується.
  • Мануальна терапія – корекція хребта, ребер, суглобів техніками Б.Й.Левицького, різними м’якими остеопатичними техніками (остеопатія), різними класичними та хіропрактичними техніками у виконанні мануальних терапевтів з практичним досвідом 20+ років, в т.ч. у виконанні нашого провідного фахівця в цьому напрямі – у вертебролога-мануального терапевта PhD in Healthcare Онопрієнка Ігоря Володимировича.
  • Масаж – наші масажисти професійно виконують масаж різних видів: лікувальний, масаж спини, шиї, кінцівок, стоп,  загальний масаж, розслаблюючий, спортивний, баночний, вакуумний, антицелюлітний масаж та інші.

У нас доступні ціни та зручна локація.
Звертайтесь – будемо раді Вам допомогти!

Адреса:

Графік роботи:

Догори